这篇文章酝酿了好久,一直没抽时间写。html
在中秋,国庆来临之时,落笔。git
写以前,先交代几件事情,github
主要是 回复 给我发邮件以及QQ上询问的朋友们的一些疑问和需求,这里稍做回复一下。算法
1.关于 票据ocr预处理算法 性能优化
相关算法细节已经开源。网络
项目地址:oracle
https://github.com/cpuimage/OcrPreprocessing性能
各位能够根据CPUImageLocalColorFilter算法思路,对应项目需求进行算法改写定制算法实现。学习
主要是基于颜色过滤的思路,只要确认具体需求,测试
提供的算法,能够解决绝大多数关于颜色叠加,干扰移除的问题。
因为思路比较简单,这里就不展开,
须要的阅读相关代码,理解一下。
2.关于音频指纹算法实现,已经开源。
项目地址:
基础:
https://github.com/cpuimage/shazam
进阶:
https://github.com/cpuimage/AudioFingerprinter
音频指纹最重要的是时序信息,改进的思路和方向有不少,
例如提取更加鲁棒性的特征或者增长特征维度等。
对音频指纹,哼唱搜歌感兴趣的,能够参阅实现。
3.关于音频采样算法
相关项目:
简易实现,便携可采用:
目前有两种简单插值实现,平时基本够用。
https://github.com/cpuimage/resampler
若有更高要求的,能够采用:
https://github.com/cpuimage/speex_resampler
https://github.com/cpuimage/WebRTC_Resampler
https://github.com/cpuimage/FFTResampler
4.关于音频降噪算法
降噪算法可参阅项目:
https://github.com/cpuimage/AudioDenoise
https://github.com/cpuimage/WebRTC_NS
https://github.com/cpuimage/rnnoise
因为有不少人询问rnnoise的训练方法和数据集。
算法实现细节见:
https://people.xiph.org/~jm/demo/rnnoise/
关于数据集问题,原做者已经开放下载了。
下载地址:
https://people.xiph.org/~jm/demo/rnnoise/rnnoise_contributions.tar.gz
关于rnnoise采样率适配和训练问题:
参阅项目:
https://github.com/GregorR/rnnoise-nu
https://github.com/GregorR/rnnoise-models
GregorR已经作了不少工做了,因此大多数问题,你们能够考虑联系他。
5.便携fft实现stb_fft开源,单头文件实现。
这个开源项目只是方便一些思路的验证和平时的测试使用。
不是性能最优实现,最优实现版本暂不开源。
项目地址:
https://github.com/cpuimage/stb_fft
差很少就这么多,
以上,如果有不理解的地方,能够给我发邮件或QQ联系。
回到主题上,本人最近一直在研究音频识别的一个小分支——性别判断。
简而言之就是经过声音分析,判断 说话者的性别。
听起来好像很简单,可是作起来,才知道,路上好多坑。
总的来讲,想要精准识别声音的性别,若是没有干扰是很简单的事情,
可是,有了干扰以后的问题就复杂多了。
咱们先考虑一下,声音信息可能受到什么因素的干扰。
1.外界干扰,主要是噪声
例如:多人交谈(等非主体的声音),软硬设备(网络,电压等抖动),背景环境(室内室外)
2.说话者生物干扰音素
例如: 语速,音量,音高,固然还有生物问题 既发声器官的状态(年龄,感冒发炎等)
3.文化因素,发音风格,饮食环境下的声喉状态
4. 以上1+2+3 等多重状况叠加下的混合干扰
从以上说起的各个音素来看,理想很丰满,现实很骨感。
不论是asr识别仍是声纹识别,仍是其余音频方向的算法处理,毫无疑问,困难重重。
花了近6个月,踩了无数个小坑以后,在不处理噪声的干扰状况下,
对中国人的普通话,音频性别识别终于达到85%的准确率。
因为是先验算法,纯c不采用任何第三方库的干净算法实现,
能够随时调参优化算法,适配不一样的状况。
没有采用深度学习的方案去作特征工程。
这里要说一下,为何不用深度学习的方法,
以及使用深度学习方法的一些思考。
首先,深度学习的数据集处理,就是一项体力活,
而后数据清洗,神经网络选型设计等等。
像我这样的懒人,真的不爱作体力活,我更喜欢思考。
在我看来,深度学习基于数据的特征工程,
最终会落到一个共同的话题,文化大一统。
也就是说,最后训练产出的有效特征,
也许更多的是基于数据的文化规律。
为何这么说呢?
其实只要思考一个问题就能够了。
人的性别跟人说的话的内容多少长短,有没有直接关联。
我我的认为,并无。
而深度学习大多数根据人说的话的内容(数据集),进行数据特征工程,
假设它有效,那它最终提取的有效特征是什么?
有多是在必定数据长度下的文化特征。
通俗地讲,就是一个地区的一些人的文化风格或生活方式。
例如:
卧槽 -> 屌丝
靓女 -> 广东人
老司机 -> 你懂的
只是举个例子。
也就是说,若是采用深度学习去作声纹识别,
其实更像是定义 男士说话的内容风格 或 女士说话的内容风格。
固然这里只是经过性别识别这个维度去思考这个问题。
若把这个问题扩展到 asr 或者 声纹识别,也会有必定的关联。
在我看来,asr 经过语音转为文字,是的的确确在作信号转译。
可是 声纹识别就不该该是这个理。
固然音频指纹,哼唱搜索是另外一个问题。
若是说 asr能够根听说话的内容来进行预测评估,天然是没问题的,
可是性别或者说声纹,就不能了。
你不能根据某我的说的某句话很像某我的的风格就说,他是某人吧。
这种问题,放到图像领域同样存在,
例如人脸识别,没有严格的生物信息,
怎么区分双胞胎或者其实目标的是活体非录像。
或者说根据某我的的声音来判断真伪,也多是录音呢?
从逻辑上来讲,这是不科学的,也是不合理的。
在我看来,深度学习用来作一些带有长度大小信息的数据的特征工程是能够的,
可是若是作一些文化规律的工程或者工做,就差强人意了。
说到这里,只能说,在必定的角度上做为辅助参考是能够的,
可是彻底替代人类去作一些事情,为时过早。
除非,生物信息大跃进,更多生物信息数据维度参与进来。
一句话总结就是,能回答像不像,但不能确认是否是。
根据这个思考,
不少项目或者说工程化逻辑,
并不须要确认是否是,而只须要关注什么条件下触发异常反馈,
然后人工跟进,例如质检,自(fu)动(zhu)驾驶等。
因为音频性别识别目前还不能达到我本身预设的理想状态,暂时也没有开源计划。
我的目前的下一个研究方向,有多是音频降噪这种叫人头大,扰人清梦的东西。
但有挑战,才有进步。
图像领域,两年前作完一键修图以后,就没有花心思继续研究了。
这个一键修图算法,也一直没抽时间去整理,
等哪天有时间再整理出来,释放demo给你们玩玩。
近期也看到很多人在研究诸如去雾,水下加强,去模糊之类的。
很有感慨,不过图像方面,除非有灵感上脑,不然,暂时不去深刻了。
固然,我会慢慢把以前作的一些图像算法,整理开源。
独乐乐不如众乐乐。
好基友 imageshop 已经作了不少工做了,
图像方面的算法,移步他的博客,你会有收获的。
回头得找个时间聚聚。
也许,在将来的一小段时间里,
俺还会在音频,视频,图像以及其余算法延伸方向作一些研究或者具备挑战性的工做。
国内的技术创新,确实比较落后,
特别是音频 天然语言 方向,须要一些有志之士一块儿努力。
最后为新人作点科普工做。
之于图像,必需要啃下:
模糊,卷积,颜色空间
之于音频,必需要啃下:
傅里叶变换,插值采样
算法性能优化可参阅:
计算机体系机构
http://www.ituring.com.cn/book/888
数值计算指南
https://docs.oracle.com/cd/E57201_01/html/E57330/index.html
https://github.com/ARM-software/CMSIS_5
cpu指令集优化
https://www.agner.org/optimize/
后面如有精力再作一些与算法编码优化相关的分享。
最后简单作个本人简介:
前金山员工,前金山毒霸研发。
前百度员工,前百度杀毒研发。
89年生人,大专商务英语专业。
不少事情,在于你想不想作,其余的都是借口。
想到就去作,与之共勉。
如有其余相关问题或者需求也能够邮件联系俺探讨。
邮箱地址是: gaozhihan@vip.qq.com