专栏首页算法+音频识别算法思考与阶段性小结
原创

音频识别算法思考与阶段性小结

这篇文章酝酿了很久,一直没抽时间写。

在中秋,国庆来临之时,落笔。

写之前,先交代几件事情,

主要是 回复 给我发邮件以及QQ上询问的朋友们的一些疑问和需求,这里稍作回复一下。

1.关于 票据ocr预处理算法 

相关算法细节已经开源。

项目地址:

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/fftResample

https://github.com/cpuimage/stb_fft

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一种简单高效的音频降噪算法示例(附完整C代码)

    <<语音增强-理论与实践>> 中提及到基于对数的最小均方误差的降噪算法,也就是LogMMSE.

    cpuimage
  • 学习图像算法阶段性总结 (附一键修图Demo) 2016.04.19更新demo

    今天特别感慨,自己从决定研究图像处理,势必要做出一键修图算法。 经历了,三个多月的书籍积累,三个多月的算法调整以及优化。 人是一种奇怪的动物,当你做不到的时候,...

    cpuimage
  • 音频算法之我思

    下载地址:https://files.cnblogs.com/files/cpuimage/denoise.zip

    cpuimage
  • 除了 Python ,这些语言写的机器学习项目也很牛

    Python 由于本身的易用优势和强大的工具库储备,成为了在人工智能及其它相关科学领域中最常用的语言之一。尤其是在机器学习,已然是各大项目最偏爱的语言。 其实除...

    AI科技大本营
  • 你必须收藏的Github技巧

    GitHub Pages大家可能都知道,常用的做法,是建立一个gh-pages的分支,通过setting里的设置的GitHub Pages模块可以自动创建该项目...

    用户5224393
  • 资源 | 普通程序员如何自学机器学习?这里有一份指南~

    机器学习工程师自学指南! 本文将会介绍机器学习的方方面面,从简单的线性回归到最新的神经网络,你不仅仅能学会如何使用它们,并且还能从零进行构建。 以下内容以计算机...

    AI科技大本营
  • 【福利】那些年我总结的Web开发者成长路线

    从实习后的那些年里,我就开始经常总结一下自己的学习路线,成长路线等等。今天,就重新把这些资料再放出来啦啦。 当然,这些资料也都是在我的GitHub上有的啦。 D...

    Phodal
  • 解读 | 6个问题深度解读CPU漏洞

    近日,谷歌Project Zero安全团队公布了两组CPU特性漏洞,分别命名为Meltdown和Spectre,安恒信息应急响应中心于日前已关注此漏洞并发布漏洞...

    安恒信息
  • 中国有哪些不错的开源软件产品?

    在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?”

    Rocky0429
  • CoreOS 已废弃组件

    CoreOS 已废弃组件 fleet => k8s cloud-config => Container Linux Config 转化为 ignition ...

    康怀帅

扫码关注云+社区

领取腾讯云代金券