资源经验分享python+opencv+mfcc+pygame+arduino多进程=简单的音视频采集分析系统

python+opencv+mfcc+pygame+arduino多进程=简单的音视频采集分析系统

2019-12-18 | |  97 |   0

原标题:python+opencv+mfcc+pygame+arduino多进程=简单的音视频采集分析系统

原文来自:CSDN      原文链接:https://blog.csdn.net/qq_42819637/article/details/103450904



python+opencv+mfcc+pygame+arduino多进程=简单的音视频采集分析系统


前言

上了大学以来看了很多很多csdn上的博客,感觉受益匪浅得到了很多的帮助,所以今天想总结一下自己最近在做的一个小项目——一个简单的音视频采集分析系统:

整体来说:

 文字识别   —— opencv+EAST+tesseract
    语音分析 —— mfcc+pyaudio
        GUI —— pygame

本文也主要从这三个方面来讲解代码和思路

1.文字识别

对于选取什么编程语言进行开发的问题上,在经过了多次许多考虑之后(装不上c++的opencv),我最终选择用python来做本次开发主要语言(用pip装起来实在简单)。后来也证明这个选择对现阶段的我来说是非常正确的。

1.1初识opencv

opencv对于图像的处理能力可以说是非常的强大。而对于小白的我来说主要关注的是图像识别的相关内容。在刚刚接触opencv的时候我尝试了许多它的一些人脸识别、微笑识别的demo——即别人做好xml(分选器)
opencv的xml的主要原理并不复杂——主要是依托机器学习的相关内容对大量的正负样本集进行训练。其中机器学习的方式可谓是五花八门,阿里好像也有相关的比赛。我就主要说我自己试用的一种官方自带的harr特征训练分选器:

1 准备一份正负样本集:
1.1正样本就是你要识别的东西 负样本就是完全不相关的背景(负样本最好跟应用场景相关)
1.2负样本的数量要达到正样本的三倍?(不太懂,可能也有一定的玄学成分)
1.3样本数量别太多也别太少(太少没用,太多训练太慢)
1.4利用opencv把样本集的图片都给灰度化了(对于灰度化很多朋友可能不太理解(我就不太懂)在查阅了很多资料后,我个人认为灰度化就是把图像转化为数据以方便我们对图像做一些处理,我们常见的RGB模式更多的是图像在颜色上的表示,而想转化成计算机语言就要进行灰度化了。(可能更重要的减小数据大小))
ming
2 利用opencv老版本的harr训练器(新版本更新完把它给砍了)
2.1要进cmd来操作,还有一些固定命令来完成文件夹的操作

⬇这个博客里写的很全可以参考参考(感谢他奥)
https://blog.csdn.net/qq_32502511/article/details/79010509

经过了漫长的学习过程(4个小时?)我终于获得了自己的分选器,但是效果不佳,不佳的原因有很多(样本少、训练方式效率低、训练器有bug(我觉得它那个层级有点问题)),最终我放弃了自己训练的四个分选器。
01.png
小结:整体来说呢,官方自带的harr训练器的算法主要就是查找图片的像素特征然后配合阈值来完成分选和判决,整体来说的思路也是比较古老吧,但是对于opencv不是很了解的小伙伴来说,是一个练手的好机会
↓这个链接详细讲解了opencv的harr特征的基本一些原理
https://www.cnblogs.com/BlueFire-py/p/9396837.html
简单来说harr特征提取的逻辑非常的简单:
提取特征-》遍历-》获得积分图-》adaboost分类器-》获得权重-》分级训练

代码中的人脸识别部分就是利用的官方自带的harr特征分选器所实现的,并且我们修改了一些参数增强了识别的精准度。
例如:
scale_factor参数控制harr特征扫描扩张的比例系数可以稍微调高一点提高性能
min_neighbors:构成检测目标的相邻矩形的最小个数(缺省-1)。如果组成检测目标的小矩形的个数和小于min_neighbors-1 都会被排除。如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,这种设定值一般用在用户自定义对检测结果的组合程序上。 将参数调高可以提高识别的精准度减少识别出错的概率
min_size:检测窗口的最小尺寸。缺省的情况下被设为分类器训练时采用的样本尺寸(人脸检测中缺省大小是~20×20)。为了提高性能和准确度,我将窗口尺寸调整为10*10,

1.2探秘OCR

在尝试了xml分选器失败后,我也对opencv有了一些相对的了解,于是我决定尝试完成视频ocr文字识别的项目

首先OCR这个概念就是光学字符识别,目前在市面上也有许多成熟的产品,
它的大体思路就是两步走:
1 文本检测(标出文本区域(roi))

2文字识别

标识文本区域的算法有很多:在这里先介绍两种大的结构吧,

传统的Faster RCNN:

整体思路就是:把文本当作是一个待检测的物体(object),提取特征,遍历查找(滑动窗口)特征获得权重,比较阈值,获得判决,优化坐标,
缺点是文本在光学上有一定的专有特征(单条文本比较类似矩形,x比较大,y比较小,需要专门的优化)

CTPN

CTPN是在2016年横空出世的一种文本检测方法,它在RCNN的基础上进行了许多创新:
1.可能是最标志性的创新就是,CTPN采用了多个小文本框集合采集的方法,将传统的一个大的文本框拆分成了多个较小的文本框,这样做不仅增强了识别的精准度,更重要的一点是它还强化了文本检测的边界难题,普通的文本检测方法很难判断文本的边界到底在哪里,而将文本框拆分细化就可以完美的解决了这一问题。
2CTPN依然采用的是RCNN的回归机制(滑动窗口),但是CTPN将参数简化(因为文本的高基本是固定的)所以只要获取两个参数(纵向,定宽)就好啦
3 CTPN算法的整体逻辑大概就是先将大文本框拆分最后再合并的思路

讲了这么多,我们应该对文本检测算法也有了一定的了解了,那么下面主要介绍一下我这次所采用的EAST算法:

2.2 EAST

EAST算法于2017年问世。EAST网络分为特征提取层+特征融合层+输出层三大部分。

EAST的特征提取主要采用的是PVAnet,它是对FCN的一种改进(没有深入了解过)
特征合并层,将抽取的特征进行合并,用了U-net的方法
输出层:
算法会输出
一个置信度参数,
一个bounding box(4个参数)
一个角度参数(box的旋转变化)
还有一个把参数的box(text quadrangle coordinates)关于这个参数我查了很多资料却还并不是非常的理解,但我知道它的用途是当文本发生了一些扭曲弯曲旋转(放射变换)后,能够起到一定的辅助作用。

2.3动手完成视频流OCR

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:在python中计算ssim(与Matlab结果一致)

下一篇:BeautifuSoup库爬取美女图片

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...