首页 > 编程知识 正文

python语音播放文本,python图像识别代码

时间:2023-05-05 11:27:02 阅读:11289 作者:3984

Linux下python实现语音识别详细教程语音识别机制概述选择安装正确的python语音识别软件包SpeechRecognition识别器类语音文件中的英语语音识别噪声对语音识别的影响麦克风中文语音识别小范围的中文

语音识别机制综述

语音识别来源于20世纪50年代初贝尔研究所进行的研究。 在初期的语音识别系统中,只能识别1个说话者和约10多个单词的词汇。 现代语音识别系统已经取得了很大的进步,可以识别多个说话者,并且拥有用于识别多种语言的庞大词汇表。

语音识别的主要部分当然是语音。 通过麦克风,声音从物理声音转换为电信号,通过模数转换器转换为数据。 数字化后,可以应用一些模型来将语音转录为文本。

现代语音识别系统大多依赖于隐马尔可夫模型[hmm]。 其机制可以近似为语音信号在非常短的时间尺度(例如10毫秒)上的静止过程,即统计特性在时间上不变化的过程。

许多现代语音识别系统在HMM识别之前使用神经网络通过特征变换和降维技术来简化语音信号。 也可以使用语音活动检测器(VAD )将语音信号减少到可能只包含语音的部分。

幸运的是,对于Python用户来说,一些语音识别服务可以通过API在线使用,其中大部分提供Python SDK。

选择合适的python语音识别软件包PyPI有几个现成的语音识别软件包。 这包括以下内容:

•apiai

谷歌云速度

•pocketsphinx

速度协调

•watson-developer-cloud

微信

一些软件包(如wit和apiai )提供了超出基本语音识别的内置功能,包括识别说话者意图的自然语言处理功能。 其他软件包,如谷歌云语音,侧重于语音到文本的转换。

其中,SpeechRecognition在易用性上与众不同。

虽然识别语音需要输入语音,但在SpeechRecognition上搜索语音输入非常简单。 不需要编写访问麦克风从头处理音频文件的脚本,只需几分钟即可自动搜索和运行。

speechrecognitionspeechrecognition与Python 2、2.7和3.3兼容,但与Python 2一起使用需要其他安装步骤。 大家可以使用pip命令从终端安装speech recognition:pip安装pip 3安装

安装过程中可能显示出现一大片红色字体安装错误! 在另一个博客上有解决方法。 (https://blog.csdn.net/weixin _ 44895651/article/details/104276569 )。

安装完成后,打开解释器窗口以检查安装。

注:请勿关闭此会话。 在后面的几个步骤中使用。

如果要处理现有音频文件,请直接调用SpeechRecognition以注意特定用例的依赖关系。 另外,请注意安装PyAudio软件包以获取麦克风输入

识别系统SpeechRecognition的核心是识别系统。

Recognizer API主要用于识别语音,每个API都有多种设置和功能来识别音频源的语音。 这里我选择的是recognize _ sphinx (: CMU sphinx-requiresinstallingpocketsphinx ) 3358

那么,必须使用pip命令安装PocketSphinx。 安装过程中容易发生红色字体错误。 因为博主英语不太好,所以不知道具体有什么错。 直接去离线的语音识别吧! 我的另一篇文章介绍了(https://blog.csdn.net/weixin _ 44895651/article/details/104445102 )。

将与音频文件使用下载相关的音频文件保存到特定目录(由博客直接保存到ubuntu桌面) :

链接: https://pan.Baidu.com/s/1 ow G1 a6j njpet _8dhepozzw

引出导线: sf73

注意:

AudioFile类可以用音频文件的路径初始化,并提供上下文管理器界面以读取和处理文件内容。

SpeechRecognition当前支持以下文件类型:

WAV:必须是PCM/LPCM格式AIFFAIFF-CFLAC:必须是初始FLAC格式; 无法以OGG-FLAC格式使用的英语语音识别在完成上述基础工作后,可以进行英语语音识别。

(1)打开终端

)2)访问语音测试文件所在的目录(博客的是桌面)。

)3)打开python解释器

(4)如下图所示输入相关命令

最后可以看到用声音转动文字的内容(this they’llsmell……),其实很有效! 因为是英语,没有噪音。

噪声对语音识别的影响噪声

在现实世界中确实存在,所有录音都有一定程度的噪声,而未经处理的噪音可能会破坏语音识别应用程序的准确性。
要了解噪声如何影响语音识别,请下载 “jackhammer.wav”(链接:https://pan.baidu.com/s/1AvGacwXeiSfMwFUTKer3iA
提取码:3pj7)
通过尝试转录效果并不好,我们可以通过尝试调用 Recognizer 类的adjust_for_ambient_noise()命令。
当然具体的博主没有实践,不知道准确性如何!大家可以借鉴这篇文章(https://mp.weixin.qq.com/s/B1w-ZLwoK1-5wDZW9pJ82g)

麦克风的使用

若要使用 SpeechRecognizer 访问麦克风则必须安装 PyAudio 软件包。
如果使用的是基于 Debian的Linux(如 Ubuntu ),则可使用 apt 安装 PyAudio:sudo apt-get install python-pyaudio python3-pyaudio安装完成后可能仍需要启用 pip3 install pyaudio ,尤其是在虚拟情况下运行。
在安装完pyaudio的情况下可以通过python实现语音录入生成相关文件。
pocketsphinx的使用注意:
支持文件格式:wav
音频文件的解码要求:16KHZ,单声道
利用python实现录音并生成相关文件程序代码如下:

from pyaudio import PyAudio, paInt16import numpy as npimport waveclass recoder: NUM_SAMPLES = 2000 SAMPLING_RATE = 16000 LEVEL = 500 COUNT_NUM = 20 SAVE_LENGTH = 8 Voice_String = [] def savewav(self,filename): wf = wave.open(filename, 'wb') wf.setnchannels(1) wf.setsampwidth(2) wf.setframerate(self.SAMPLING_RATE) wf.writeframes(np.array(self.Voice_String).tostring()) wf.close() def recoder(self): pa = PyAudio() stream = pa.open(format=paInt16, channels=1, rate=self.SAMPLING_RATE, input=True,frames_per_buffer=self.NUM_SAMPLES) save_count = 0 save_buffer = [] while True: string_audio_data = stream.read(self.NUM_SAMPLES) audio_data = np.fromstring(string_audio_data, dtype=np.short) large_sample_count = np.sum(audio_data > self.LEVEL) print(np.max(audio_data)) if large_sample_count > self.COUNT_NUM: save_count = self.SAVE_LENGTH else: save_count -= 1 if save_count < 0: save_count = 0 if save_count > 0: save_buffer.append(string_audio_data ) else: if len(save_buffer) > 0: self.Voice_String = save_buffer save_buffer = [] print("Recode a piece of voice successfully!") return True else: return Falseif __name__ == "__main__": r = recoder() r.recoder() r.savewav("test.wav")

注意:在利用python解释器实现时一定要注意空格!!!
最后生成的文件就在Python解释器回话所在目录下,可以通过play来播放测试一下,如果没有安装play可以通过apt命令来安装。

中文的语音识别

在进行完以前的工作以后,我们对语音识别的流程大概有了一定的了解,但是作为一个中国人总得做一个中文的语音识别吧!
我们要在CMU Sphinx语音识别工具包里面下载对应的普通话升学和语言模型。
图片中标记的就是普通话!下载相关的语音识别工具包。
但是我们要把zh_broadcastnews_64000_utf8.DMP转化成language-model.lm.bin,这里可以借鉴这篇博主的文章。最后得到chinese.lm.bin
再解压zh_broadcastnews_16k_ptm256_8000.tar.bz2得到zh_broadcastnews_ptm256_8000文件夹。
借鉴刚才那位博主的方法,在Ubuntu下找到speech_recognition文件夹。可能会有很多小伙伴找不到相关的文件夹,其实是在隐藏文件下。大家可以点击文件夹右上角的三条杠。如下图所示:

然后给显示隐藏文件打个勾,如下图所示:

然后依次按照以下目录就可以找到啦:
然后把原来的en-US改名成en-US-bak,新建一个文件夹en-US,把解压出来的zh_broadcastnews_ptm256_8000改成acoustic-model,把chinese.lm.bin改成language-model.lm.bin,把pronounciation-dictionary.dic改后缀成dict,复制这三个文件到en-US里。同时把原来en-US文件目录下的LICENSE.txt复制到现在的文件夹下。
最终该文件夹下有以下文件:

然后我们就可以通过麦克风录入一个语音文件文件(“test.wav”)
在该文件目录下打开python解释器输入以下内容:

就看到了输出内容,但是我说的是两个中国,也测试了一下其他的发现识别效果很不好!!!
当然有好多同学可能想要语音包,我就分享给大家啦!(链接:https://pan.baidu.com/s/13DTDnv_4NYbKXpkXAXODpw
提取码:zh39)

小范围中文识别

用官方提供的效果太差,几乎不能用!那么我看了很多文章以后就想到了一种优化方法,但是只适合小范围的识别!一些命令啥的应该没有问题,但是聊天什么的可能就效果不太好。
找到刚才复制的4个文件夹,有一个pronounciation-dictionary.dict的文件夹,打开以后是以下内容:
感觉这内容就是类似于一个字典,很多用词和平时交流的用词差距比较大。那么我们改成我们习惯的用词就可以啦! 抱着试一试的想法,结果还真的可以。识别效果真的不错!
我的做法是:
(1)把图片中红色标记以上的内容继续保留,红色以下的内容删除掉。当然处于保险考虑建议大家给该文件备份一下!
(2)给红色线以下输入自己想识别的内容!(按照规则输入,不同于拼音!!!)最近新型肺炎的情况不断的变好,听到最多的一句话就是“中国加油”那么今天的内容就是将“中国加油”实现语音转文字!希望能早日开学,哈哈哈哈。

(3)输入以下内容:

就可以看到中国加油啦!同时希望肺炎疫情早日康复!

语音合成

语音合成个人的理解就是文字转语音。这篇文章已经介绍的很详细啦!(https://blog.csdn.net/chadian3912/article/details/81077537)所以我就不多介绍啦!不过这句话中可以设置client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('你好百度', 'zh', 1, { 'vol': 5,'spd': 3,'pit':9,'per': 3})音量、声调、速度、男/女/萝莉/逍遥。
大家快去尝试合成一下吧!最后来欣赏一下语音合成后4种不同风格的语音,你更喜欢那一款呢?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。