在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python語音識別系統的優勢和安裝使用手冊

8g3K_AI_Thinker ? 2018-04-25 17:43 ? 次閱讀

▌語言識別工作原理概述

語音識別源于 20 世紀 50 年代早期在貝爾實驗室所做的研究。早期語音識別系統僅能識別單個講話者以及只有約十幾個單詞的詞匯量。現代語音識別系統已經取得了很大進步,可以識別多個講話者,并且擁有識別多種語言的龐大詞匯表。

語音識別的首要部分當然是語音。通過麥克風,語音便從物理聲音被轉換為電信號,然后通過模數轉換器轉換為數據。一旦被數字化,就可適用若干種模型,將音頻轉錄為文本。

大多數現代語音識別系統都依賴于隱馬爾可夫模型(HMM)。其工作原理為:語音信號在非常短的時間尺度上(比如 10 毫秒)可被近似為靜止過程,即一個其統計特性不隨時間變化的過程。

許多現代語音識別系統會在 HMM 識別之前使用神經網絡,通過特征變換和降維的技術來簡化語音信號。也可以使用語音活動檢測器(VAD)將音頻信號減少到可能僅包含語音的部分。

幸運的是,對于 Python 使用者而言,一些語音識別服務可通過 API 在線使用,且其中大部分也提供了 Python SDK。

▌選擇 Python 語音識別包

PyPI中有一些現成的語音識別軟件包。其中包括:

?apiai

?google-cloud-speech

?pocketsphinx

?SpeechRcognition

?watson-developer-cloud

?wit

一些軟件包(如 wit 和 apiai )提供了一些超出基本語音識別的內置功能,如識別講話者意圖的自然語言處理功能。其他軟件包,如谷歌云語音,則專注于語音向文本的轉換。

其中,SpeechRecognition 就因便于使用脫穎而出。

識別語音需要輸入音頻,而在 SpeechRecognition 中檢索音頻輸入是非常簡單的,它無需構建訪問麥克風和從頭開始處理音頻文件的腳本,只需幾分鐘即可自動完成檢索并運行。

SpeechRecognition 庫可滿足幾種主流語音 API ,因此靈活性極高。其中 Google Web Speech API 支持硬編碼到 SpeechRecognition 庫中的默認 API 密鑰,無需注冊就可使用。SpeechRecognition 以其靈活性和易用性成為編寫 Python 程序的最佳選擇。

▌安裝 SpeechRecognation

SpeechRecognition 兼容 Python2.6 , 2.7 和 3.3+,但若在 Python 2 中使用還需要一些額外的安裝步驟。本教程中所有開發版本默認 Python 3.3+。

讀者可使用 pip 命令從終端安裝 SpeechRecognition:

$ pip install SpeechRecognition

安裝完成后請打開解釋器窗口并輸入以下內容來驗證安裝:

>>> import speech_recognition as sr>>> sr.__version__'3.8.1'

注:不要關閉此會話,在后幾個步驟中你將要使用它。

若處理現有的音頻文件,只需直接調用 SpeechRecognition ,注意具體的用例的一些依賴關系。同時注意,安裝 PyAudio 包來獲取麥克風輸入。

▌識別器類

SpeechRecognition 的核心就是識別器類。

Recognizer API 主要目是識別語音,每個 API 都有多種設置和功能來識別音頻源的語音,分別是:

recognize_bing():Microsoft Bing Speech

recognize_google():Google Web Speech API

recognize_google_cloud():Google Cloud Speech- requires installation of the google-cloud-speech package

recognize_houndify():Houndifyby SoundHound

recognize_ibm():IBM Speech to Text

recognize_sphinx():CMU Sphinx- requires installing PocketSphinx

recognize_wit():Wit.ai

以上七個中只有 recognition_sphinx()可與CMU Sphinx 引擎脫機工作, 其他六個都需要連接互聯網。

SpeechRecognition 附帶 Google Web Speech API 的默認 API 密鑰,可直接使用它。其他六個 API 都需要使用 API 密鑰或用戶名/密碼組合進行身份驗證,因此本文使用了 Web Speech API。

現在開始著手實踐,在解釋器會話中調用 recognise_google()函數。

>>> r.recognize_google()

屏幕會出現:

Traceback (most recent call last): File "", line 1, in TypeError: recognize_google() missing 1 required positional argument: 'audio_data'

相信你已經猜到了結果,怎么可能從空文件中識別出數據呢?

這 7 個recognize_*() 識別器類都需要輸入audio_data參數,且每種識別器的audio_data都必須是 SpeechRecognition 的 AudioData 類的實例。

AudioData 實例的創建有兩種路徑:音頻文件或由麥克風錄制的音頻,先從比較容易上手的音頻文件開始。

▌音頻文件的使用

首先需要下載音頻文件(https://github.com/realpython/python-speech-recognition/tree/master/audio_files),保存到 Python 解釋器會話所在的目錄中。

AudioFile 類可以通過音頻文件的路徑進行初始化,并提供用于讀取和處理文件內容的上下文管理器界面。

支持文件類型

SpeechRecognition 目前支持的文件類型有:

WAV: 必須是 PCM/LPCM 格式

AIFF

AIFF-C

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

若是使用 Linux 系統下的 x-86 ,macOS 或者是 Windows 系統,需要支持 FLAC文件。若在其它系統下運行,需要安裝 FLAC 編碼器并確保可以訪問 flac 命令。

使用record()從文件中獲取數據

在解釋器會話框鍵入以下命令來處理 “harvard.wav” 文件的內容:

>>> harvard = sr.AudioFile('harvard.wav')>>> with harvard as source:... audio = r.record(source)...

通過上下文管理器打開文件并讀取文件內容,并將數據存儲在 AudioFile 實例中,然后通過 record()將整個文件中的數據記錄到 AudioData 實例中,可通過檢查音頻類型來確認:

>>> type(audio)

現在可以調用recognition_google()來嘗試識別音頻中的語音。

>>> r.recognize_google(audio)'the stale smell of old beer lingers it takes heatto bring out the odor a cold dip restores health andzest a salt pickle taste fine with ham tacos alPastore are my favorite a zestful food is the hotcross bun'

以上就完成了第一個音頻文件的錄制。

利用偏移量和持續時間獲取音頻片段

若只想捕捉文件中部分演講內容該怎么辦?record()命令中有一個 duration 關鍵字參數,可使得該命令在指定的秒數后停止記錄。

例如,以下內容僅獲取文件前四秒內的語音:

>>> with harvard as source:... audio = r.record(source, duration=4)...>>> r.recognize_google(audio)'the stale smell of old beer lingers'

在with塊中調用record()命令時,文件流會向前移動。這意味著若先錄制四秒鐘,再錄制四秒鐘,則第一個四秒后將返回第二個四秒鐘的音頻。

>>> with harvard as source:... audio1 = r.record(source, duration=4)... audio2 = r.record(source, duration=4)...>>> r.recognize_google(audio1)'the stale smell of old beer lingers'>>> r.recognize_google(audio2)'it takes heat to bring out the odor a cold dip'

除了指定記錄持續時間之外,還可以使用 offset 參數為 record() 命令指定起點,其值表示在開始記錄的時間。如:僅獲取文件中的第二個短語,可設置 4 秒的偏移量并記錄 3 秒的持續時間。

>>> with harvard as source:... audio = r.record(source, offset=4, duration=3)...>>> recognizer.recognize_google(audio)'it takes heat to bring out the odor'

在事先知道文件中語音結構的情況下,offset和duration關鍵字參數對于分割音頻文件非常有用。但使用不準確會導致轉錄不佳。

>>> with harvard as source:... audio = r.record(source, offset=4.7, duration=2.8)...>>> recognizer.recognize_google(audio)'Mesquite to bring out the odor Aiko'

本程序從第 4.7 秒開始記錄,從而使得詞組 “it takes heat to bring out the odor” ,中的 “it t” 沒有被記錄下來,此時 API 只得到 “akes heat” 這個輸入,而與之匹配的是 “Mesquite” 這個結果。

同樣的,在獲取錄音結尾詞組 “a cold dip restores health and zest” 時 API 僅僅捕獲了 “a co” ,從而被錯誤匹配為 “Aiko” 。

噪音也是影響翻譯準確度的一大元兇。上面的例子中由于音頻文件干凈從而運行良好,但在現實中,除非事先對音頻文件進行處理,否則不可能得到無噪聲音頻。

噪聲對語音識別的影響

噪聲在現實世界中確實存在,所有錄音都有一定程度的噪聲,而未經處理的噪音可能會破壞語音識別應用程序的準確性。

要了解噪聲如何影響語音識別,請下載 “jackhammer.wav” (https://github.com/realpython/python-speech-recognition/tree/master/audio_files)文件,并確保將其保存到解釋器會話的工作目錄中。文件中短語 “the stale smell of old beer lingers” 在是很大鉆墻聲的背景音中被念出來。

嘗試轉錄此文件時會發生什么?

>>> jackhammer = sr.AudioFile('jackhammer.wav')>>> with jackhammer as source:... audio = r.record(source)...>>> r.recognize_google(audio)'the snail smell of old gear vendors'

那么該如何處理這個問題呢?可以嘗試調用 Recognizer 類的adjust_for_ambient_noise()命令。

>>> with jackhammer as source:... r.adjust_for_ambient_noise(source)... audio = r.record(source)...>>> r.recognize_google(audio)'still smell of old beer vendors'

這樣就與準確結果接近多了,但精確度依然存在問題,而且詞組開頭的 “the” 被丟失了,這是什么原因呢?

因為使用adjust_for_ambient_noise()命令時,默認將文件流的第一秒識別為音頻的噪聲級別,因此在使用record()獲取數據前,文件的第一秒已經被消耗了。

可使用duration關鍵字參數來調整adjust_for_ambient_noise()命令的時間分析范圍,該參數單位為秒,默認為 1,現將此值降低到 0.5。

>>> with jackhammer as source:... r.adjust_for_ambient_noise(source, duration=0.5)... audio = r.record(source)...>>> r.recognize_google(audio)'the snail smell like old Beer Mongers'

現在我們就得到了這句話的 “the”,但現在出現了一些新的問題——有時因為信號太吵,無法消除噪音的影響。

若經常遇到這些問題,則需要對音頻進行一些預處理。可以通過音頻編輯軟件,或將濾鏡應用于文件的 Python 包(例如SciPy)中來進行該預處理。處理嘈雜的文件時,可以通過查看實際的 API 響應來提高準確性。大多數 API 返回一個包含多個可能轉錄的 JSON 字符串,但若不強制要求給出完整響應時,recognition_google()方法始終僅返回最可能的轉錄字符。

通過把recognition_google()中True參數改成show_all來給出完整響應。

>>> r.recognize_google(audio, show_all=True){'alternative': [ {'transcript': 'the snail smell like old Beer Mongers'}, {'transcript': 'the still smell of old beer vendors'}, {'transcript': 'the snail smell like old beer vendors'}, {'transcript': 'the stale smell of old beer vendors'}, {'transcript': 'the snail smell like old beermongers'}, {'transcript': 'destihl smell of old beer vendors'}, {'transcript': 'the still smell like old beer vendors'}, {'transcript': 'bastille smell of old beer vendors'}, {'transcript': 'the still smell like old beermongers'}, {'transcript': 'the still smell of old beer venders'}, {'transcript': 'the still smelling old beer vendors'}, {'transcript': 'musty smell of old beer vendors'}, {'transcript': 'the still smell of old beer vendor'}], 'final': True}

可以看到,recognition_google()返回了一個關鍵字為 'alternative' 的列表,指的是所有可能的響應列表。此響應列表結構會因 API 而異且主要用于對結果進行調試。

▌麥克風的使用

若要使用 SpeechRecognizer 訪問麥克風則必須安裝 PyAudio 軟件包,請關閉當前的解釋器窗口,進行以下操作:

安裝 PyAudio

安裝 PyAudio 的過程會因操作系統而異。

Debian Linux

如果使用的是基于 Debian的Linux(如 Ubuntu ),則可使用 apt 安裝PyAudio:

$ sudo apt-get install python-pyaudio python3-pyaudio

安裝完成后可能仍需要啟用pip install pyaudio,尤其是在虛擬情況下運行。

macOS:macOS 用戶則首先需要使用Homebrew來安裝PortAudio,然后調用pip命令來安裝PyAudio。

$ brew install portaudio$ pip install pyaudio

Windows:Windows 用戶可直接調用pip來安裝PyAudio。

$ pip install pyaudio

安裝測試:安裝了 PyAudio 后可從控制臺進行安裝測試。

$ python -m speech_recognition

請確保默認麥克風打開并取消靜音,若安裝正常則應該看到如下所示的內容:

A moment of silence, please...Set minimum energy threshold to 600.4452854381937Say something!

請對著麥克風講話并觀察 SpeechRecognition 如何轉錄你的講話。

Microphone類

請打開另一個解釋器會話,并創建識一個別器類的例子。

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

此時將使用默認系統麥克風,而不是使用音頻文件作為信號源。讀者可通過創建一個Microphone類的實例來訪問它。

>>> mic = sr.Microphone()

若系統沒有默認麥克風(如在 RaspberryPi 上)或想要使用非默認麥克風,則需要通過提供設備索引來指定要使用的麥克風。讀者可通過調用Microphone類的list_microphone_names()函數來獲取麥克風名稱列表。

>>> sr.Microphone.list_microphone_names()['HDA Intel PCH: ALC272 Analog (hw:0,0)', 'HDA Intel PCH: HDMI 0 (hw:0,3)', 'sysdefault', 'front', 'surround40', 'surround51', 'surround71', 'hdmi', 'pulse', 'dmix', 'default']

注意:你的輸出可能與上例不同。

list_microphone_names()返回列表中麥克風設備名稱的索引。在上面的輸出中,如果要使用名為 “front” 的麥克風,該麥克風在列表中索引為 3,則可以創建如下所示的麥克風實例:

>>> # This is just an example; do not run>>> mic = sr.Microphone(device_index=3)

但大多數情況下需要使用系統默認麥克風。

使用listen()獲取麥克風輸入數據

準備好麥克風實例后,讀者可以捕獲一些輸入。

就像AudioFile類一樣,Microphone是一個上下文管理器。可以使用 with 塊中Recognizer 類的listen()方法捕獲麥克風的輸入。該方法將音頻源作為第一個參數,并自動記錄來自源的輸入,直到檢測到靜音時自動停止。

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

執行 with 塊后請嘗試在麥克風中說出 “hello” 。請等待解釋器再次顯示提示,一旦出現 “>>>” 提示返回就可以識別語音。

>>> r.recognize_google(audio)'hello'

如果沒有提示再次返回,可能是因為麥克風收到太多的環境噪音,請使用 Ctrl + C 中斷這個過程,從而讓解釋器再次顯示提示。

要處理環境噪聲,可調用 Recognizer 類的adjust_for_ambient_noise()函數,其操作與處理噪音音頻文件時一樣。由于麥克風輸入聲音的可預測性不如音頻文件,因此任何時間聽麥克風輸入時都可以使用此過程進行處理。

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

運行上面的代碼后稍等片刻,嘗試在麥克風中說 “hello” 。同樣,必須等待解釋器提示返回后再嘗試識別語音。

請記住,adjust_for_ambient_noise()默認分析音頻源中1秒鐘長的音頻。若讀者認為此時間太長,可用duration參數來調整。

SpeechRecognition 資料建議 duration 參數不少于0.5秒。某些情況下,你可能會發現,持續時間超過默認的一秒會產生更好的結果。您所需要的最小值取決于麥克風所處的周圍環境,不過,這些信息在開發過程中通常是未知的。根據我的經驗,一秒鐘的默認持續時間對于大多數應用程序已經足夠。

處理難以識別的語音

嘗試將前面的代碼示例輸入到解釋器中,并在麥克風中輸入一些無法理解的噪音。你應該得到這樣的結果:

Traceback (most recent call last): File "", line 1, in File "/home/david/real_python/speech_recognition_primer/venv/lib/python3.5/site-packages/speech_recognition/__init__.py", line 858, in recognize_google if not isinstance(actual_result, dict) or len(actual_result.get("alternative", [])) == 0: raise UnknownValueError()speech_recognition.UnknownValueError

無法被 API 匹配成文字的音頻會引發UnknownValueError異常,因此要頻繁使用try和except塊來解決此類問題。API 會盡全力去把任何聲音轉成文字,如短咕嚕聲可能會被識別為 “How”,咳嗽聲、鼓掌聲以及舌頭咔噠聲都可能會被轉成文字從而引起異常。

▌結語

本教程中,我們一直在識別英語語音,英語是 SpeechRecognition 軟件包中每個recognition _ *()方法的默認語言。但是,識別其他語音也是絕對有可能且很容易完成的。要識別不同語言的語音,請將 recognition _ *()方法的語言關鍵字參數設置為與所需語言對應的字符串。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 語音識別系統

    關注

    0

    文章

    18

    瀏覽量

    10481
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84683

原文標題:Python語音識別終極指南

文章出處:【微信號:AI_Thinker,微信公眾號:人工智能頭條】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    freebsd使用手冊pdf

    分起步介紹了FREEBSD的安裝和基本使用方法。讀者可根據自已的情況按順序跳過一些熟悉的主題來閱讀。第二部分常用操作介紹了FREEBSD常用的功能。 FreeBSD使用手冊下載(PDF)
    發表于 10-21 17:22

    USB設計及使用手冊

    USB設計及使用手冊  [hide]USB使用手冊.rar[/hide][此貼子已經被作者于2009-11-19 11:52:30編輯過]
    發表于 11-19 11:51

    基于LabVIEW的語音識別系統

    請大家幫幫忙,基于LabVIEW的語音識別系統,要求先錄幾個人的聲音做樣板,然后再讓其中一個人說話,能辨別出是誰說的
    發表于 05-16 11:16

    友善之臂Ubuntu使用手冊

    友善之臂Ubuntu使用手冊手冊介紹如何在友善之臂開發板 Tiny4412 以及 NanoPC-T1 上安裝和使用 Ubuntu 系統
    發表于 12-18 10:42

    怎么設計基于嵌入式系統語音口令識別系統

    隨著計算機技術和信息技術的迅速發展,語音口令識別已經成為了人機交互的一個重要方式之一。語音口令識別系統將根據人發出的聲音、音節或短語給出響應,如通過
    發表于 09-03 08:27

    使用緊急呼叫和DSP的語音識別系統

    開發并測試了安裝在汽車內、使用簡單離散字的特定發音人語音識別系統
    發表于 11-04 07:23

    基于LabVIEW的語音識別系統

    基于LabVIEW的語音識別系統
    發表于 03-07 16:41

    基于DSP的漢字語音識別系統如何實現

    基于DSP的漢字語音識別系統如何實現
    發表于 03-12 06:33

    語音識別系統在智能家庭系統中的應用是什么?

    語音識別系統在智能家庭系統中的應用是什么?
    發表于 05-31 06:54

    嵌入式語音識別系統中的電路設計是如何的

    現在社會發展的這么快,什么高科技都涌現出來,什么智能機器人啦,智能手機等,有很多在這里就不一一列舉了,在這里我們要說的就是語音識別系統了,現在嵌入式產品如此的多,就像一些智能空調啦,我們可以對著他說
    發表于 12-20 07:52

    基于HMM的語音識別系統是怎么訓練的

    基于HMM的語音識別系統是怎么訓練的?有哪些步驟?
    發表于 12-23 06:16

    基于STM32的語音識別系統的設計與實現

    基于STM32的語音識別系統的設計與實現
    發表于 11-09 18:03 ?50次下載

    YS-LDV7語音識別模塊使用手冊免費下載

    本文檔的主要內容詳細介紹的是YS-LDV7語音識別模塊使用手冊免費下載。
    發表于 03-13 08:00 ?26次下載
    YS-LDV7<b class='flag-5'>語音</b><b class='flag-5'>識別</b>模塊<b class='flag-5'>使用手冊</b>免費下載

    語音識別系統功能_語音識別系統的應用

    對比語音識別技術的兩個發展方向,由于基于不同的運算平臺,因此具有不同的特點。大詞匯量連續語音識別系統一般都是基于PC機平臺,而語音
    發表于 10-01 09:21 ?5666次閱讀
    <b class='flag-5'>語音</b><b class='flag-5'>識別系統</b>功能_<b class='flag-5'>語音</b><b class='flag-5'>識別系統</b>的應用

    語音識別設置能刪除嗎_語音識別系統工作流程

    本文首先介紹了語音識別設置的刪除,其次闡述了語音識別系統工作流程,最后介紹了語音識別系統的實現。
    發表于 04-01 09:47 ?4170次閱讀
    主站蜘蛛池模板: 小泽玛利亚厕所大喷水| 久久人人爽爽爽人久久久| 国产jlzzjlzz视频免费| 久久99热国产这有精品| 欧美性天天| 天天在线天天综合网色| 中文字幕一区二区三区永久| 色老成人精品视频在线观看| www欧美在线观看| 窝窝视频成人影院午夜在线| 五月婷婷激情网| 波多野结衣在线视频观看 | 黄网站色视频大全免费观看| 日本片免费观看一区二区| 午夜在线| 男女交黄| 国产亚洲精品自在久久77| 国产福利毛片| 特级生活片| 未满十八18周岁禁止免费国产| 亚洲一区二区视频| 你懂的网站在线观看| 久久久午夜毛片免费| 亚洲产国偷v产偷v自拍色戒| 播五月婷婷| 三级aa久久| 国产三级在线看| 黄色网在线看| 美女视频黄的免费视频网页| 久久精品国产福利| 五月婷六月婷婷| 天天狠天天干| 一级三级黄色片| 校园春色亚洲欧美| 伊人久久大香线蕉综合bd高清| 成人精品亚洲人成在线| 中文字幕一区二区三| 久久精品视频9| 2021久久精品免费观看| 日本视频h| 国产精品久久久久久久久久影院 |