会计网站建设意义,网站制作价格范围,网站打开出现建设中,用pc做网站服务器为什么不如云主机博主简介 博主是一名大二学生#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇#xff0c;博主致力于在这里分享关于人工智能#xff0c;c#xff0c;Python#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主#xff0c;博主会继续更新的#xff0c… 博主简介 博主是一名大二学生主攻人工智能研究。感谢让我们在CSDN相遇博主致力于在这里分享关于人工智能cPython爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主博主会继续更新的如果有错误之处大家可以指正。 专栏简介 本专栏主要研究python在人工智能方面的应用涉及算法案例实践。包括一些常用的数据处理算法也会介绍很多的Python第三方库。如果需要点击这里 订阅专栏。 给大家分享一个我很喜欢的一句话“每天多努力一点不为别的只为日后能够多一些选择选择舒心的日子选择自己喜欢的人” 目录
背景引入
语音识别简介
语音识别的起源与发展
语音识别的基本原理
语音识别Python SDK
Microsoft 语音识别框架SAPI
Speech
Python_Speech_Features工具库
params SpeechRecognition库工具 背景引入
自动语音识别Automatic Speech Recognition,ASR是近十年来发展较快的技术之一。随着深度学习 在AI领域的广泛应用语音识别技术开始逐步从实验室走向市场百度公司基于深度学习研发的新一代深度语音识别系统Deep Speech 2识别准确率可以达到97%美国著名杂志《MIT Technology Review》将他评为“2016年十大突破技术”之一并认为该技术在未来几年将会极大改变人们的生活。
在人工智能领域语音识别是非常重要的一个环节因为语音是智能系统获取外界信息的重要途径之一较之于键盘和鼠标等输入方法语音输入更快捷高效。近年来智能手机等各种高端的移动应用终端都集成了语音识别系统使得这些智能化程度更高使用起来也更方便。语音交互产品中具有代表性的有Apple公司的Siri,Microsoft公司的CortanaAmazon公司的Alexa华为公司的小E和百度公司的小度等。随着语音技术的高速发展各大软硬件厂商纷纷布局在推出相关硬件产品的同时也开始关注语音芯片的研发。语音识别技术的确带给了人们方便尤其是对于一些文化水平不高的人群具有很大的便利性。
语音识别简介
语音识别的起源与发展
语音识别是一门复杂的交叉技术学科通常涉及声学信号处理模式识别语言学心理学以及计算机等多个学科领域。语音识别技术的发展可追寻到20世纪50年代贝尔实验室首次实现Audrey英文数字识别系统可识别0——9单个数字英文识别并且准确识别率达到90%以上。普林斯顿大学和麻省理工学院在同一时期也推出了少量词语的独立识别系统。到20世纪80年代隐马尔可夫模型Hidden arkov ModelHMM。N-gram语言模型等重要技术开始被应用于语言识别领域是的语音识别技术从孤立词识别到连续词识别。到20世纪90年代大词汇量连续识别技术持续进步最小分类错误Minimum Classification ErrorMCE以及最大互信息Maximum Mutual InformationMMI等区分性十五模型训练方法开始被应用使得语音识别的准确率逐步提高尤其适用于长句子情形。与此同时最大后验概率Maximum Aposteriori ProbablityMAP与最大似然线性回归Maximum Likelihood Linear RegressionMLLR等模型自适应方法也开始被应用于语音识别模型的训练。到了21世纪随着深度学习的不断发展神经网络之父杰弗里·辛顿Geoffrey Hinton提出深度置信网络Deep Belief NetworkDBN。2009年辛顿和他的学生默罕默德Mohamed将深度神经网络应用于语音识别在TIMIT语音库上进行的小词汇量连续语音识别任务获得成功。TIMIT是由德州仪器Texas InstrumentsTI。麻省理工学院和斯坦福国际研究学院SRI International合作构建的声学-音频连续识别语音库。
语音识别的基本原理
语音是一种非常复杂的现象很少人能够理解它是如何被感知的。我们通常的直觉是语音是由单词构成而单词又是由各种音素Phoneme构成。然而事实上并非如此语音本身是一个动态的过程是一种连续的音频流是由一部分相当稳定状态与诸多动态变化的状态混合而成。在这种状态序列中人们可以定义或多或少类似的声音或音素。通过Adobe Audition等音频编辑软件进行录音播放可看到随时间变化的语音动态波形。 一个典型的语音对话系统一般包括如下几个技术模块对话管理器Dialog Manager语音识别器Speech Recognizer语言解析器Language Parser语言生成器Language Generator和语音合成器Speech Synthesizer。其中语音识别器又可称为语音识别模块或者语言识别系统主要用于将用户输入的语音转化为文本这也是我们最关注的核心技术。语音识别由以下几个部分构成。 语音识别是一个先编码后解码的过程。其中信号处理Signal Processing与特征提取Feature Extraction是语音识别系统的开始。这是一个编码的过程。特征提取是指从原始的语音输入经过相应处理后得到的语音特征向量Eigenvector。语音识别的一般方法是首先提取一个波形然后将其分解为语音片段并尝试识别每个语音片段中的内容。通常情况下要做到这一点我们需要尝试将所有可能的单词进行组合然后与音频进行匹配最后选择最佳匹配。由于参数数量过大需要对其进行优化所以我们会将语音分解成帧然后对于每帧提取出39个代表语音特征的代表数字这些数字即语音特征向量。
我们在提取音频信息后通过噪声和消除和信道畸变Channel Distortion进行语音增强将信号从时域转化为频域并为后面的操作提供具有特侦的特征向量。在信号处理过程中常用梅尔频率倒谱系数Mel-Frequency Cepsptral CoefficientMFCC或感知线性预测Perceptual Linear PredictionPLP作为特征向量然后使用混合高斯模型-隐马尔可夫模型GMM-HMM作为声学模型再利用最大似然Maximum LikelihoodML准则序列鉴别性训练算法例如最小分类错误和最小音素错误Minimum Phone ErrorMPE等模型进行训练。
声学模型则以特征提取部分生成的特征为输入为可变特征长序列Variable -Length生成声学模型分数Acoustic Model Score。声学模型处理的问题主要在于特征向量序列的可变长和音频信号的丰富变化性。因为语音长度是不确定的所i特征向量序列的长度也不确定。我们一般通过动态时间规整Dynamic Time WarpingDTW算法和隐马尔可夫模型来处理可变长特征序列。语言模型通过训练语料来学习词语词之间的关系估计假设词序列的可能性又称为语言模型分数。下面我们来介绍一下具体操作。
语音识别Python SDK
Microsoft 语音识别框架SAPI
SAPI是Microsoft公司提供的语音接口框架提供了应用程序和语音引擎之间的高级接口实现了控制和管理各种语音引擎的实时操作所需的所有细节。SAPI引擎主要由文本转语音Text-To-SpeechTTS系统和语音识别器构成。 import win32com.client #载入SAPI语音识别转换
from win32com.client import constants
import pythoncom #主要应用于python调用com接口载入SAPI语音处理模块并合成和输出指定语音的示例代码如下。 speakerwin32com.client.Dispatch(SAPI.SPVOICE)
speaker.Speak(开启微软语音接口)
speaker.Speak(Microsoft Speech API Initialized.)#英文语音合成除了语音合成功能SAPI可通过以下示例代码开启语音识别代码
win32com.client.Dispatch(SAPI.SpSharedRecognizer)
以下为一个基于Microsoft语音识别框架SAPI的语音识别应用的完整代码。 import win32com.client #载入SAPI语音识别转换
from win32com.client import constants
import pythoncom #主要应用于python调用com接口
#定义语音识别对象并开启SAPI语音识别引擎
speakerwin32com.client.Dispatch(SAPI.SPVOICE)
#定义一个语音识别类
class SpeechRecognition:#用传入的单词列表初始化语音识别def __init__(self,wordsToAdd):#启动TTSself.speakerwin32com.client.Dispatch(SAPI.SpVoice)#启动语音识别引擎首先创建一个侦听器self.listenerwin32com.client.Dispatch(SAPI.SpSharedRecognizer)#创建语音识别上下文self.contextself.listener.CreateRecoContext()#不允许自由识别单词————仅限命令和控制识别语法中的单词self.grammarself.context.CreateGrammar()#为语法创建一个新规则即顶级规则和动态规则self.grammar.DictationSetState(0)self.wordsRuleself.grammar.Rules.Add(wordsRule,constants.SRATopLevel\constants.SRADynamic,0)#清除规则self.wordsRule.Clear()#浏览单词列表[self.wordsRule.InitialState.AddWordTransition(None,word) for word in wordsToAdd]#将设置好的wordsrule规则激活self.grammar.Rules.Commit()self.grammar.CmdSetRuleState(wordsRule,1)#提交对语法规则的更改self.grammar.Rules.Commit()#添加一个事件处理程序self.eventHandlerContextEvents(self.context)#设置一个语音提示self.say(Successfully Started.)#定义一个函数进行TTS语音输出def say(self,phrase):self.speaker.Speak(phrase)
#处理语音对象引发的事件的回调类
class ContextEvents(win32com.client.getevents(SAPI.SpSharedRecoContext)):def OnRecognition(self,StreamNumber,StreamPosition,RecognitionType,Result):newResultwin32com.client.Dispatch(Result)print(You just said:,newResult.PhraseInfo.GetText())speechstrnewResult.PhraseInfo.GetText()#定义语音识别关键词及其对应的语音输出信息if speechstr你好:speaker.Speak(How are you doing?)elif speechstr测试:speaker.Speak(This is a testing program for speech recognition.)elif speechstr欢迎你:speaker.Speak(You are welcome to be here)elif speechstr新年快乐:speaker.Speak(Happy New Year in 2019)elif speechstr作者:speaker.Speak(心随而动)else:pass
if __name____main__:speaker.Speak(语音识别系统开启)wordsToAdd[你好,测试,欢迎你,新年快乐,作者]speechRecoSpeechRecognition(wordsToAdd)while True:pythoncom.PumpWaitingMessages() #检查是否有事件在等待然后再调用适当的回调 可能由于python版本的问题可能会出现报错这是版本的问题。 程序运行后会出现“语音识别系统开启”的提示然后等待用户语音输入。
Speech
Speech是一个智能语音模块其主要功能包括语音识别将指定文本合成为语音及将语音信号输出等。该模块不是内置模块所以需要我们去下载 pip install speech Speech模块安装完后我们可使用以下示例代码来实现启动和关闭语音系统 #speech
import speech
while True:phrasespeech.input() #循环等待语音输入speech.say(You said %s %phrase)if phraseturn off:break 如果你使用的是python3版本那么下载后的speech是不能直接使用需要你将代码改变一下。打开speech.py文件 修改一第157行print prompt改为print(prompt)。修改二第59行thread改为_thread。修改三最后一行的thread应该改为_thread。下列示例代码演示了如何通过speech模块调用Microsoft SAPI语音识别处理模块来对计算机进行简单的语音指令控制 #语音控制计算机
import sys #用于windows系统操作
import speech
import webbrowser #用于打开指定网络连接
import os
def callback(phr):if phr关闭语音识别:speech.say(Goodbye,Speech Recognition system is closing.) #播放提示语音speech.stoplistening() #关闭SAPIsys.exit() #推出程序elif phr播放电影:speech.say(I am prepaing the movie for you.) #播放提示语音webbrowser.open_new(https://www.youku.com/)elif phr看新闻:speech.say(I want to know what the world is going on)webbrowser.open_new(https://www.baidu.com/)elif phr打开控制台:speech.say(打开CMD)os.popen(C:\\Windows\\System32\\cmd.exe)
while True:phrspeech.input() #语音输入speech.say(You said is %s%phr)callback(phr) #调用函数Python_Speech_Features工具库
Python_Speech_Features工具库提供了诸如MFCCSSCFiterbank等进行语音识别的算法和工具。运行库需要NumpyScipy库的支持。可以按照上面的安装方式安装。
由于该库中的函数太多很难详细介绍大家可以去官网查看
这里介绍了一下mfcc函数的参数 params signal: the audio signal from which to compute features.Should be an N1 array 用来计算梅尔频率倒谱系数特性的音频信号。是一个N1的数组samplerate: the samplerate of the signal we are working with. 音频信号的采样率winlen: the length of the analysis window in seconds. Default is 0.025s (25 milliseconds) 分析窗口的长度以秒为单位。默认值为0.025s(25毫秒)ps: 短时傅里叶变换的窗口长度winstep: the step between successive windows in seconds. Default is 0.01s (10 milliseconds) 连续窗口之间的步长以秒为单位。默认值为0.01s(10毫秒)numcep: the number of cepstrum to return, default 13 返回倒谱的数量默认为13nfilt: the number of filters in the filterbank, default 26. 滤波器组中的过滤器数量默认为26个。nfft: the FFT size. Default is 512. FFT大小。默认是512。lowfreq: lowest band edge of mel filters. In Hz, default is 0. 梅尔滤波器的最低频带边缘。在频率(HZ)中默认值为0。highfreq: highest band edge of mel filters. In Hz, default is samplerate/2 梅尔过滤器的最高频带边缘。在频率(HZ)中默认值为1/2倍音频信号采样率preemph: apply preemphasis filter with preemph as coefficient. 0 is no filter. Default is 0.97. 采用preemph为系数的预加重滤波器。0不是过滤器。默认是0.97。ceplifter: apply a lifter to final cepstral coefficients. 0 is no lifter. Default is 22. 将一个lifter应用到最终倒谱系数。0不是lifter。默认是22。appendEnergy: if this is true, the zeroth cepstral coefficient is replaced with the log of the total frame energy. 如果这个参数的值是True第0阶倒谱系数被替换为总帧能量的对数。winfunc: the analysis window to apply to each frame. By default no window is applied. You can use numpy window functions here e.g. winfuncnumpy.hamming 分析窗口应用于每一帧。默认情况下不应用任何窗口。您可以在这里使用numpy窗口函数例如winfuncnumpy.hamming(汉明窗)c 下列函数代码我们载入一段音频。利用库中的函数进行分析和提取 from python_speech_features import mfcc
from python_speech_features import logfbank
import scipy.io.wavfile as wav #用于语音文件载入
(rate,sig)wav.read(file.wav) #载入音频文件大家自己使用自己的音频文件这里博主随便写了一个
mfcc_featmfcc(sig,rate)
fbank_featlogfbank(sig,rate) #计算滤波器组能量特征的对数
#输出结果
print(MFCC Features:)
print(mfcc_feat[1:3,:])
print(LogFBank Features:)
print(fbank_feat[1:3,:]) SpeechRecognition库工具
SpeechRecognition是一个用于语音识别的Python库他同时支持python2和python3联机或离线的多个引擎和API。
为确保SpeechRecognitional能够正常使用我们需要先安装PyAudio模块这是用于话筒相关的操作需要该模块的支持。安装完成后我们可以输入以下的命令来进行检测 python -m speech_recognition 该语音识别引擎支持以下几种不同的API ①CMU Sphinx。 ②Google Speech Recognition ③Google Cloud Speech ④Microsoft Bing Voice Recognition ⑤IBM Speech to Text ⑥ Houndify 其中CMU Sphinx支持离线语音识别其他诸如Microsoft Bing Voice RecognitionIBM Speech to Text等则需要语音识别引擎在线联机工作。 下列示例代码将演示如何将SpeechRecognition和上述的API进行联合使用以此达到语音识别的目的。 import speech_recognition as sr#导入SpeechRecognition库
#从话筒获取语音识别的音频源
rsr.Recognizer()
with sr.Microphone() as source:print(Say something)audior.listen(source)
#利用Cmu Sphinx进行语音识别
try:print(Sphinx thinks you saidr.recognize_sphinx(audio))
except sr.UnknownValueError:print(Sphinx could not undestand audio)
except sr.RequestError as e:print(Sphinx error;{0}.format(e))#利用Google Speech Recognition进行语音识别
try:处于测试的目的我们使用默认的API密钥若要使用其他的API密钥建议使用r.recognize_google(audio,keyGOOGLE_SPEECH_RECOGNITION_API_KEY),而不是用r.recognize_google(audio)print(Google Speech Recognition thinks you saidr.recognize_google(audio))
except sr.UnknownValueError:print(Google Speech Recognition could not wnderstand audio)
except sr.RequestError as e:print(Could not equest results from Google Speech Recognition service;{0}.format(e))
GOOGLE_CLOUD_SPEECH_CREDENTIALSrINSERT THE CONTENTS OF THE GOOGLE CLOUD SPEECH JSON CREDENTIALS FILE HERE
try:print(Google cloud speech thinks you saidr.recognize_google_cloud(audio,credentials_jsonGOOGLE_CLOUD_SPEECH_CREDENTIALS))
except sr.UnknownValueError:print(Google Cloud Speech could not understand audio)
except sr.RequestError as e:print(Could not request results from google cloud Speech service;{0}.format(e))
#利用Microsoft Bing voice Recognition进行语音识别
BING_KEYINSERT BING API KEY HERE
try:print(Microsoft Bing Voice Recognition thinks you saidr.recognize_bing(audio,keyBING_KEY))
except sr.UnknownValueError:print(Microsoft Bing Voice Recognition could not understand audio)
except sr.RequestError as e:print(Could not request results from Microsoft Bing Voice Recognition service;{0}.format(e))
#利用Houndify进行语音识别。Hounddify客户端ID是Base64编码字符串
HOUNDIFY_CLIENT_IDINSERT HOUNDIFY CLIENT ID HERE
#加密客户端密钥是Base64编码字符串
HOUNDIFY_CLIENT_KEYINSERT HOUNDIFY CLIENT KEY HERE
try:print(Houndify thinks you saidr.recognize_houndify(audio,client_idHOUNDIFY_CLIENT_ID,client_keyHOUNDIFY_CLIENT_KEY))
except sr.UnknownValueError:print(Houndify could not understand audio)
except sr.RequestError as e:print(Could not request results from Houndify service;{0}.format(e))利用IBM Speech to Text进行语音识别IBM_USERNAMEINSERT IBM SPEECH TO TEXT USERNAME HERE#IBM Speech to Text密码是混合大小小写字母和数字的字符串IBM_PASSWORDINSERT IBM SPEECH TO TEXT PASSWORD HEREtry:print(IBM Speech to Text thinks you saidr.recognize_ibm(audio,usernameIBM_USERNAME,passwordIBM_PASSWORD))except sr.UnknownValueError:print(IBM Speechh to Text could not understand audio)except sr.RequestError as e:print(Could not request results from IBM Speech to Text service;{0}.format(e))运行程序我们就可以从话筒获取语音然后通过几种不同的语音识别引擎来进行启动。
当然我么也可以直接导入音频文件来进行语音识别。示例代码 from os import path
AUDIO_FILEpath.join(path.dirname(path.realpath(__file__)),English.wav) #导入音频文件大家自己更改路径
rsr.Recognizer()
with sr.AudioFile(AUDIO_FILE) as source:audior.record(source) 除了使用音频文件我么也可以使用话筒来获取语音并存储为不同格式的文件 import speech_recognition as sr
rsr.Recognizer()#从话筒获取语音
with sr.Microphone() as source:print(Say something!)audior.listen(source)
#将音频写入.raw文件
with open(microphone-results.raw,wb) as f:f.write(audio.get_raw_data())
#写入.wav文件
with open(microphone-results1.wav,wb) as f:f.write(audio.get_wav_data())
#写入.aiff文件
with open(microphone-results2.aiff,wb) as f:f.write(audio.get_aiff_data())
#写入.flac文件
with open(microphone-results.flac,wb) as f:f.write(audio.get_flac_data()) 语音识别对环境有一定的要求环境噪声和干扰对语音识别会有一定的影响我们可以通过以下示例代码来校准环境噪声的识别器能量阈值 rsr.Recognizer()
with sr.Microphone()as source:#倾听1秒以内能量校准阈值r.adjust_for_ambient_noise(source)print(Say something!)audior.listen(source) 好了本期的内容就到此结束了后面会介绍MFCC算法用于语音特征分析提取。感兴趣的小伙伴可以留意关注一下。