当前位置: 首页 > 后端技术 > Python

教你用python做语音识别

时间:2023-03-25 23:31:10 Python

作者|小音源|顽皮面包在网上找了一些例子,有一些比较成熟的模型可以将语音转为文本。比如CloudSpeechAPI,但是你需要使用谷歌云平台的前提。语音识别对于python这种非常成熟的胶水语言来说,在网上找一些现成的工具包确实不是太难。在github上发现了这么一个神奇的包:speechrecognition,可以支持实时翻译,当然前提是机器上需要安装麦克风相关的依赖包;它还可以支持直接提取语音文件中的文本。通过语音识别可以调用各种平台的模型,如googleAPI、CMUsphinx、MicrosoftBingSpeech、IBMSpeechtoText、Wit.ai等离线转换对于国内网络环境,无法使用googleAPI将语音数据转换成文本文件,因为调用这个包时,你需要连接到谷歌。当然,你可以租用国外的VPS来做这件事。下面我就来说说如何在不联网的情况下通过python将语音文件转换成文本。这里使用的包是sphinx,是美国卡耐基梅隆大学开发的大词汇量、非特定、连续的英语语音识别系统。我安装sphinx使用的环境是ubuntu。imyin@develop:~/Downloads/phinx$lsb_release-aNoLSBmodulesareavailable.DistributorID:UbuntuDescription:Ubuntu16.04.3LTSRelease:16.04Codename:xenial在安装sphinx之前需要安装一些包sudoapt-getinstallgccautomakeautoconflibtoolbisonswigpython-devlibpulse-dev后,可以到相关网站下载sphinxbase安装包。当然也可以直接在github上克隆包,下载tarzxpfsphinxbase-5pr??ealpha.tar.gz后解压修改文件名mvsphinxbase-5pr??ealphasphinxbaselssphinxbaseAUTHORSdocindent.shMakefile.amREADME.mdsrcwin32autogen。sh.gitLICENSENEWSsphinxbase.pc.inswigconfigure.acincludem4READMEsphinxbase.slntest现在我们应该运行autogen.sh生成Makefiles和一些其他脚本,为后续编译和安装做准备。./autogen.sh开始源码安装make&&sudomakeinstall执行完上面的命令后,如果没有出现错误信息,说明安装成功了,但是此时你的命令没有生效,当你运行命令,就会出现这样的错误。imyin@develop:~/Downloads/phinx/sphinxbase$sphinx_lm_convertsphinx_lm_convert:errorwhileloadingsharedlibraries:libsphinxbase.so.3:cannotopensharedobjectfile:Nosuchfileordirectory系统还需要加载目录/usr/local/lib,为了让系统每次启动都能自动加载,可以修改系统配置文件ld.so.confsudoecho"/usr/local/lib">>/etc/ld.so.confsudoldconfig处这个时候,你可以通过sphinx_lm_convert命令将模型DMP文件转换成bin文件sphinx_lm_convert-izh_broadcastnews_64000_utf8.DMP-ozh_CN.lm.bin上面这行代码将中文模型DMP文件转换成bin文件。安装sphinx后,默认只支持英文。模型存放路径下只有一个en-US文件,所以这里需要添加一个处理中文的模型。相关文件可从此网址下载。在python中使用sphinx如果想在python中使用sphinx,需要安装一些依赖包。pipinstallpydub-U#负责将MP3文件转为wav文件pipinstallSpeechRecognition-U#负责将语音转为文本sudoapt-qqinstallbuild-essentialswiglibpulse-dev#为后面安装pocketsphinx做准备pipinstall-Upocketsphinx#使用sphinxsudoapt-getinstalllibav-tools#解决调用pydub时的警告:RuntimeWarning:Couldn'tfindffmpegoravconv-defaultingtoffmpeg,butmaynotworkwarn("Couldn'tfindffmpegoravconv-默认为ffmpeg,但可能无法运行”,RuntimeWarning)此时,您可以启动ipython来尝试效果。file_path='/home/imyin/Downloads/phinx/test_data'r=sr.Recognizer()hello_zh=sr.AudioFile(os.path.join(file_path,'test.wav'))withhello_zhassource:audio=r.record(source)r.recognize_sphinx(audio,language='zh_CN')'今天天气很好'可以看出这个语音识别器已经生效了。但是我说的是“今天好热”。貌似sphinx里面的模型不是很准确,这也只是短短的一句话。接下来我们看看长句的效果。我录了一段村上春树的《当我谈跑步时我谈些什么》。那年7月,我一个人去希腊跑雅典跑马拉松,把原来的马拉松路线——马拉松跑雅典——倒着跑。你为什么往反方向跑?因为一早从雅典市中心出发,在道路开始拥堵,空气还没有被污染之前就跑出市区,直奔马拉松,路上的车流量少了很多,多了跑起来舒服。这不是正式的比赛,所以你可以一个人随意跑,当然也不能指望有什么交通管制。hello_zh=sr.AudioFile(os.path.join(file_path,'test2.wav'))withhello_zhassource:audio=r.record(source)r.recognize_sphinx(audio,language='zh_CN')'唯一位置那个带球的是让猪去处理垃圾。土木工程充满温情,运动能否成功,悬而未决。印尼商业报称,他没有立场可谈。其中,春天从雅典市中心出发可以是寸土寸金的工厂。一个成功的突破寻求推动协调办公室禁止一路马拉松和AjarMountain活动等20支球队重申这不是我自己的正常比赛当然不能解释这个共识呃,看到结果,我觉得可以用一个:不好来形容。两个字形容:太差了!当然,这个模型只是我直接从网上下载的。用来训练它的语料库不会那么完整,所以在测试的时候难免会出现不准确的情况。为了让模型更准确,需要自己使用sphnix继续训练模型。相关方法可以在其官网找到,也有相应的教程。有兴趣的朋友可以自己研究。问:为什么我的准确性很差语音识别准确性并不总是很好。要测试语音识别,您需要在预先记录的参考数据库上运行识别以查看会发生什么并优化参数。你不需要玩未知值,你应该做的第一件事就是收集测试样本的数据库并测量识别精度。您需要将语音转储为wav文件,编写参考文本文件并使用解码器对其进行解码。然后使用Sphinxtrain的word_align.pl工具计算WER。测试数据库的大小取决于准确性,但通常有10分钟的转录音频就足以可靠地测试识别器的准确性。该过程在tutorialtuning中进行了描述。文中提到的教程网址是https://cmusphinx.github.io/wiki/tutorialtuning/GoogleAPI使用googleAPI处理语音识别比较准确,但是需要连接google。下面是我在VPS中执行的一段代码。可以看出它准确地将我的录音翻译成了文字。但是如果录音文件很大,运行起来会很长时间,而且会返回超时错误,这让我很苦恼。好在speech_recognition支持语音文件的截取。例如,我只能处理语音文件的前15秒。withtestassource:audio=r.record(source,duration=15)r.recognize_google(audio,language='zh-CN')'那年七月,我去了希腊,独自从雅典跑来我想跑原马拉松路线到马拉松河、马拉松和雅典。从上面的结果来看,比sphnix处理的效果要好很多。通过查看帮助文档,发现speech_recognition不仅可以截取前面的录音,还可以截取中间的录音。在[18]中:r.record?Signature:r.record(source,duration=None,offset=None)Docstring:Recordsupto``duration``secondsofaudiofrom``source``(an``AudioSource``实例)从``offset``(如果未指定则从开头)开始转换为``AudioData``实例,它返回。如果没有指定``duration``,那么它会一直记录到没有更多的音频输入为止。例如,我想处理5秒到20秒之间的内容。withtestassource:audio=r.record(source,offset=5,duration=15)r.recognize_google(audio,language='zh-CN')'哪条马拉松原路线单独从雅典跑到马拉松河为什么你必须考虑跑马拉松直奔雅典?因为星辰变化,从雅典的中心开始,今天就到此为止。世界真的很精彩,更精彩,继续自己去发现!