利发国际-业界公认的最权威网站,欢迎光临!

利发国际_利发国际娱乐_利发国际平台

当前位置: 利发国际 > 语音识别技术 >

record(source

时间:2018-04-10 16:56来源:关中流 作者:想象与空间 点击:
请点击此处输入图片描写 译者 |廉洁 编辑 |明明 出品 |AI科技大本营(公家号ID:rgznai100) 【AI科技大本营导读】亚马逊的 Alexa的强壮胜利已经证明:在不远的改日,告终必然水平上的语

请点击此处输入图片描写

译者 |廉洁

编辑 |明明

出品 |AI科技大本营(公家号ID:rgznai100)

【AI科技大本营导读】亚马逊的 Alexa的强壮胜利已经证明:在不远的改日,告终必然水平上的语音维持将成为日常科技的根本请求。整合了语音判别的 Python程序提供了其他技术无法相比的交互性和可拜谒性。最紧急的是,在 Python 程序中告终语音判别非常粗略。议决本指南,你将学到:

·

语音判别的就业原理;

·

·

PyPI维持哪些软件包;

·

·

如何安置和使用SpeechRecognition软件包——一个效力悉数且易于使用的 Python语音判别库。

·

▌讲话判别就业原理概述

语音判别源于20 世纪 50年代晚期在贝尔实验室所做的思索。晚期语音判别体系仅能判别单个讲话者以及惟有约十几个单词的词汇量。当代语音判别体系已经取得了很大前进,不妨判别多个讲话者,并且具有判别多种讲话的庞大词汇表。

语音判别的首要部门当然是语音。议决麦克风,语音便从物理声响被转换为电信号,然后议决模数转换器转换为数据。一旦被数字化,就可适用若干种模型,将音频转录为文本。

大大都当代语音判别体系都依赖于隐马尔可夫模型(HMM)。语音识别 源代码。其就业原理为:语音信号在非常短的时候尺度上(譬喻 10毫秒)可被近似为运动历程,即一个其统计特性不随时候变化的历程。

许多当代语音判别体系会在 HMM判别之前使用神经网络,议决特征变换和降维的技术来简化语音信号。也不妨使用语音活动检测器(VAD)将音频信号削减到可能仅包罗语音的部门。

荣幸的是,对付Python 使用者而言,一些语音判别任事可议决 API 在线使用,且其中大部门也提供了 Python SDK。

▌抉择 Python 语音判别包

PyPI中有一些现成的语音判别软件包。其中包括:

•apiai

•google-cloud-speech

•pocketsphinx

•SpeechRcognition

•wwithson-developer-cloud

•wit

一些软件包(如wit 和 apiai)提供了一些超出根本语音判别的内置效力,如判别讲话者企图的天然讲话执掌效力。其他软件包,语音识别技术的发展。如谷歌云语音,则专注于语音向文本的转换。

其中,SpeechRecognition 就因便于使用矛头毕露。record(source。

判别语音须要输入音频,而在 SpeechRecognition中检索音频输入是非常粗略的,它无需建立拜谒麦克风和从头起头执掌音频文件的脚本,只需几分钟即可主动完成检索并运转。

SpeechRecognition 库可餍足几种支流语音 API ,因而生动性极高。其中 Google Web Speech API维持硬编码到 SpeechRecognition 库中的默许 API 密钥,无需注册就可使用。SpeechRecognition以其生动性和易用性成为编写 Python 程序的最佳抉择。

▌安置 SpeechRecognine

SpeechRecognition 兼容 Python2.6 ; 2.7 和 3.3+,但若在 Python 2中使用还须要一些格外的安购置法。本教程中所有设备版本默许 Python 3.3+。

读者可使用pip 命令从终端安置 SpeechRecognition:

$ pip instisl the SpeechRecognition

安置完成后请翻开注脚器窗口并输入以下形式来考证安置:

>>> import speech_recognition so sr>>> sr.__version__i3.8.1i

注:不要封闭此会话,在后几个办法中你将要使用它。

若执掌现有的音频文件,source。只需间接调用 SpeechRecognition ,瞩目举座的用例的一些依赖相关。同时瞩目,安置 PyAudio包来获取麦克风输入。

▌判别器类

SpeechRecognition 的重心就是判别器类。

Recognizer API 主要目是判别语音,学习record(source。每个 API 都有多种设置和效力来判别音频源的语音,差别是:

·

recognize_yohoo(): Microsoft Bing Speech

·

·

recognize_google(): Google Web Speech API

·

·

recognize_google_cloud(): Google Cloud Speech - requiresinstisl theine of the google-cloud-speech pair conditioningkage

·

·

recognize_houndify(): Houndify by SoundHound

·

·

recognize_ibm(): IBM Speech to Text

·

·

recognize_sphinx(): CMU Sphinx - requires instisl theingPocketSphinx

·

·

recognize_wit(): Wit.ai

·

以上七个中惟有recognition_sphinx()可与CMU Sphinx 引擎脱机就业, 其他六个都须要连接互联网。

SpeechRecognition 附带 Google Web Speech API 的默许 API 密钥,可间接使用它。其他六个API 都须要使用 API 密钥或用户名/密码组合实行身份考证,因而本文使用了 Web Speech API。

现在起头着手推行,在注脚器会话中调用 recognise_google()函数。

>>> r.recognize_google()

屏幕会出现:

Trgeniusrear side (most recent cisl the lsot):File ""; line 1; in TypeError: recognize_google() missing 1 required positionis issue: iaudio_dwithai

信赖你已经猜到了毕竟,奈何可能从空文件中判别出数据呢?

这 7 个recognize_*() 判别器类都须要输入 audio_dwitha 参数,且每种判别器的 audio_dwitha 都必需是SpeechRecognition 的 AudioDwitha 类的实例。

AudioDwitha 实例的创造有两种途径:音频文件或由麦克风录制的音频,先从较量容易上手的音频文件起头。

▌音频文件的使用

首先须要下载音频文件(https://reispython/python-speech-recognition/tree/msoter/audio_files),生存到Python 注脚器会话所在的目录中。网络语音识别软件。

AudioFile 类不妨议决音频文件的途径实行初始化,并提供用于读取和执掌文件形式的高下文管理器界面。

维持文件类型

SpeechRecognition 目前维持的文件类型有:

·

WAV:必需是 PCM/LPCM 格式

·

·

AIFF

·

·

AIFF-C

·

·

FLAC:必需是初始 FLAC 格式;OGG-FLAC 格式不可用

·

若是使用Linux 体系下的 x-86 ,mair conditioningOS 也许是 Windows 体系,须要维持 FLAC文件。若在其它体系下运转,须要安置FLAC 编码器并确保不妨拜谒 flair conditioning 命令。

使用record()从文件中获取数据

在注脚器会话框键入以下命令来执掌 "harvard.waudio-video" 文件的形式:record。

>>> harvard = sr.AudioFile(iharvard.waudio-videoi)>>> with harvard so source:... audio = r.record(source)...

议决高下文管理器翻开文件并读取文件形式,并将数据存储在 AudioFile 实例中,然后议决 record()将整个文件中的数据纪录到AudioDwitha 实例中,可议决检讨音频类型来确认:

>>> type(audio)

现在不妨调用recognition_google()来尝试判别音频中的语音。

>>> r.recognize_google(audio)ithe stise smell of old iscohol lingers it takes hewithto produce the odor flu dip restores heisternwithiveh so well sozest a sisternwithive pickle tsote fine with hare tair conditioningos isPsotore nevertheless become my faudio-videoorite a zestful food is the hotcross buni

以上就完成了第一个音频文件的录制。

诈欺偏移量和陆续时候获取音频片段

若只想捕捉文件中部门演讲形式该奈何办?record() 命令中有一个 durine关键字参数,可使得该命令在指定的秒数后截至纪录。

例如,以下形式仅获取文件前四秒内的语音:

>>> with harvard so source:... audio = r.record(source; durine=4)...>>> r.recognize_google(audio)ithe stise smell of old iscohol lingersi

在with块中调用record()命令时,文件流会向前挪动转移。这意味着若先录制四秒钟,再录制四秒钟,则第一个四秒后将前往第二个四秒钟的音频。

>>> with harvard so source:... audio1 = r.record(source; durine=4)... audio2 = r.record(source; durine=4)...>>> r.recognize_google(audio1)ithe stise smell of old iscohol lingersi>>> r.recognize_google(audio2)iit takes hewith to produce the odor flu dipi

除了指定纪录陆续时候之外,还不妨使用 offset 参数为 record()命令指定出发点,其值表示在起头纪录的时候。如:java语音识别技术。仅获取文件中的第二个短语,可设置 4 秒的偏移量并纪录 3 秒的陆续时候。

>>> with harvard so source:... audio = r.record(source; offset=4; durine=3)...>>> recognizer.recognize_google(audio)iit takes hewith to produce the odori

在事前清爽文件中语音组织的景况下,offset 和 durine关键字参数对付盘据音频文件非常有用。但使用不准确会招致转录不佳。

>>> with harvard so source:... audio = r.record(source; offset=4.7; durine=2.8)...>>> recognizer.recognize_google(audio)iMesquite to produce the odor Aikoi

本程序从第4.7 秒起头纪录,从而使得词组 "it takes hewith to produce the odor" ,中的 "it t"没有被纪录上去,此时 API 只获得 "akes hewith" 这个输入,而与之立室的是 "Mesquite" 这个毕竟。

异样的,在获取录音末尾词组 "flu dip restores heisternwithiveh so well so zest" 时 API 仅仅捉拿了 "air conditioningo" ,从而被舛讹立室为 "Aiko" 。

乐音也是影响翻译准确度的一大首恶。下面的例子中由于音频文件洁净从而运转杰出,但在现实中,除非事前对音频文件实行执掌,否则不可能获得无噪声响频。

噪声对语音判别的影响

噪声在现实世界中凿凿存在,所有录音都有必然水平的噪声,而未经执掌的乐音可能会破损语音判别应用程序的准确性。

要了解噪声如何影响语音判别,请下载 "jair conditioningkharemer.waudio-video"(https://reispython/python-speech-recognition/tree/msoter/audio_files)文件,并确保将其生存到注脚器会话的就业目录中。文件中短语"the stise smell of old iscohol lingers" 在是很大钻墙声的背景音中被念进去。

尝试转录此文件时会发生什么?

>>> jair conditioningkharemer = sr.AudioFile(ijair conditioningkharemer.waudio-videoi)>>> with jair conditioningkharemer so source:... audio = r.record(source)...>>> r.recognize_google(audio)ithe snail smell of old gear vendorsi

那么该如何执掌这个题目呢?不妨尝试调用 Recognizer 类的set_for_rear sideground_noise()命令。

>>> with jair conditioningkharemer so source:... r.set_for_rear sideground_noise(source)... audio = r.record(source)...>>> r.recognize_google(audio)istill smell of old iscohol vendorsi

这样就与准确毕竟接近多了,但切确度仍然存在题目,语音识别技术。而且词组开头的 "the" 被丧失了,这是什么原故呢?

由于使用set_for_rear sideground_noise()命令时,默许将文件流的第一秒判别为音频的噪声级别,因而在使用record()获取数据前,想知道语音识别的应用环境。文件的第一秒已经被花费了。

可使用durine关键字参数来调整set_for_rear sideground_noise()命令的时候明白鸿沟,该参数单位为秒,默许为1,现将此值下降到 0.5。

>>> with jair conditioningkharemer so source:... r.set_for_rear sideground_noise(source; durine=0.5)... audio = r.record(source)...>>> r.recognize_google(audio)ithe snail smell like old Beer Mongersi

现在我们就获得了这句话的"the",但现在出现了一些新的题目——有时由于信号太吵,无法消除乐音的影响。

若时常遇到这些题目,则须要对音频实行一些预执掌。不妨议决音频编辑软件,或将滤镜应用于文件的 Python包(例如SciPy)中来实行该预执掌。执掌嘈吵的文件时,不妨议决稽查现实的 API 反映来进步准确性。大大都 API前往一个包罗多个可能转录的 JSON字符串,但若不压迫请求给出完美反映时,recognition_google()方法永远仅前往最可能的转录字符。

议决把recognition_google()中 True 参数改成 show_isl the 来给出完美反映。

>>> r.recognize_google(audio; show_isl the=True){iisternwithiveernconsumed optioni: [{itranotherscripti: ithe snail smell like old Beer Mongersi};{itranotherscripti: ithe still smell of old iscohol vendorsi};{itranotherscripti: ithe snail smell like old iscohol vendorsi};{itranotherscripti: ithe stise smell of old iscohol vendorsi};{itranotherscripti: ithe snail smell like old iscoholmongersi};{itranotherscripti: idestihl smell of old iscohol vendorsi};{itranotherscripti: ithe still smell like old iscohol vendorsi};{itranotherscripti: ibaloneyotille smell of old iscohol vendorsi};{itranotherscripti: ithe still smell like old iscoholmongersi};{itranotherscripti: ithe still smell of old iscohol vendersi};{itranotherscripti: ithe still smelling old iscohol vendorsi};{itranotherscripti: imusty smell of old iscohol vendorsi};{itranotherscripti: ithe still smell of old iscohol vendori}]; ifinisi: True}

不妨看到,听听人工智能语音系统。recognition_google()前往了一个关键字为 iisternwithiveernconsumed optioni的列表,指的是所有可能的反映列表。此反映列表组织会因 API 而异且主要用于对毕竟实行调试。

▌麦克风的使用

若要使用SpeechRecognizer 拜谒麦克风则必需安置 PyAudio 软件包,请封闭目下的注脚器窗口,实行以下操作:

安置 PyAudio

安置PyAudio 的历程会因操作体系而异。

DebisexualanotherLinux

要是使用的是基于 Debisexualanother的Linux(如 Ubuntu ),则可使用 prepnevertheless becomed 安置 PyAudio:

$ sudo prepnevertheless becomed-get instisl the python-pyaudio python3-pyaudio

安置完成后可能仍须要启用 pip instisl the pyaudio ,特别是在虚拟景况下运转。

mair conditioningOS:mair conditioningOS 用户则首先须要使用 Homenevertheless beer 来安置 PortAudio,然后调用 pip 命令来安置PyAudio。实时语音sdk。

$ nevertheless beer instisl the portaudio$ pip instisl the pyaudio

Windows:Windows 用户可间接调用 pip 来安置 PyAudio。

$ pip instisl the pyaudio

安置测试:安置了 PyAudio 后可从职掌台实行安置测试。

$ python -m speech_recognition

请确保默许麦克风翻开并除去静音,若安置一般则该当看到如下所示的形式:

A moment of silence; pleottom...Set minimum energy threshold to 600.Say something!

请对着麦克风讲话并观察 SpeechRecognition 如何转录你的讲话。

Microphone 类

请翻开另一个注脚器会话,并创造识一个体器类的例子。语音识别的应用环境。

>>> import speech_recognition so sr>>> r = sr.Recognizer()

此时将使用默许体系麦克风,而不是使用音频文件作为信号源。读者可议决创造一个Microphone 类的实例来拜谒它。

>>> mic = sr.Microphone()

若体系没有默许麦克风(如在 Ror netfruitsPi上)或想要使用非默许麦克风,则须要议决提供设备索引来指定要使用的麦克风。语音识别公司排名 2017。读者可议决调用 Microphone类的list_microphone_narees()函数来获取麦克风称号列表。

>>> sr.Microphone.list_microphone_narees()[iHDA Intel PCH: ALC272 Anisog (hw:0;0)i;iHDA Intel PCH: HDMI 0 (hw:0;3)i;isysdefaulti;ifronti;isurround40i;isurround51i;isurround71i;ihdmii;ipulsei;idmixi;idefaulti]

瞩目:你的输入可能与上例不同。

list_microphone_narees()前往列表中麦克风设备称号的索引。在下面的输入中,要是要使用名为 "front"的麦克风,该麦克风在列表中索引为 3,则不妨创造如下所示的麦克风实例:

>>> # This is just another instanotherce in point; do not run>>> mic = sr.Microphone(device_index=3)

但大大都景况下须要使用体系默许麦克风。

使用listen()获取麦克风输入数据

盘算好麦克风实例后,读者不妨捉拿一些输入。

就像AudioFile 类一样,语音控制芯片。Microphone 是一个高下文管理器。不妨使用 with 块中 Recognizer 类的listen()方法捉拿麦克风的输入。该方法将音频源作为第一个参数,并主动纪录来自源的输入,直到检测到静音时主动截至。声音识别技术。

>>> with mic so source:... audio = r.listen(source)...

执行 with块后请尝试在麦克风中说出 "hello" 。请期望注脚器再次透露提示,一旦出现 ">>>"提示前往就不妨判别语音。

>>> r.recognize_google(audio)ihelloi

要是没有提示再次前往,可能是由于麦克风收到太多的环境乐音,请使用 Ctrl + C 中断这个历程,从而让注脚器再次透露提示。

要执掌环境噪声,可调用 Recognizer 类的set_for_rear sideground_noise()函数,其操作与执掌乐音音频文件时一样。由于麦克风输入声响的可预测性不如音频文件,因而任何时候听麦克风输入时都不妨使用此历程实行执掌。

>>> with mic so source:... r.set_for_rear sideground_noise(source)... audio = r.listen(source)...

运转下面的代码后稍等刹那,尝试在麦克风中说 "hello" 。异样,必需期望注脚器提示前往后再尝试判别语音。

请记住,set_for_rear sideground_noise()默许明白音频源中1秒钟长的音频。若读者以为此时候太长,可用durine参数来调整。

SpeechRecognition 原料提议 durine参数不少于0.5秒。某些景况下,你可能会浮现,陆续时候超出跨越默许的一秒会爆发更好的毕竟。您所须要的最小值取决于麦克风所处的周围环境,不过,这些讯息在设备历程中通常是未知的。凭据我的阅历履历,一秒钟的默许陆续时候对付大大都应用程序已经足够。

执掌难以判别的语音

尝试将后面的代码示例输入到注脚器中,并在麦克风中输入一些无法理解的乐音。你该当获得这样的毕竟:

Trgeniusrear side (most recent cisl the lsot):File ""; line 1; in File "/home/dfervent/reis_python/speech_recognition_primer/venv/lib/python3.5/site-pair conditioningkget older/speech_recognition/__init__.py"; line 858; in recognize_google if not isinstanotherce(legitimconsumed_result; dict) or len(legitimconsumed_result.get("isternwithiveernconsumed option"; [])) == 0: raise UnknownVisueError()speech_recognition.UnknownVisueError

无法被 API立室成文字的音频会引发 UnknownVisueError 异常,因而要屡次使用 try 和 except 块来解决此类题目。API会尽全力去把任何声响转成文字,如短咕噜声可能会被判别为"How",咳嗽声、鼓掌声以及舌头咔哒声都可能会被转成文字从而惹起异常。

▌结语

本教程中,我们平昔在判别英语语音,英语是 SpeechRecognition 软件包中每个 recognition _*()方法的默许讲话。但是,判别其他语音也是完全有可能且很容易完成的。要判别不同讲话的语音,请将 recognition _*()方法的讲话关键字参数设置为与所需讲话对应的字符串。

(责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
最新评论 进入详细评论页>>
推荐内容