教你怎樣用python進行語音識別

2020-12-15 CDA數據分析師

作者 | 小隱 來源 | 淘氣麵包

網上找到一些例子,有一些成熟的模型,可以將語音轉成文字。例如Cloud Speech API,但是需要你使用google雲平臺的前提。

speech recognition

對於python這一非常成熟的膠水語言,在網上找一些現成的工具包真的不是一個太難的問題。在GitHub上就發現了這樣一個神奇的包:speech recognition

它可以支持實時翻譯,當然前提是需要在機器上安裝有關麥克風的依賴包;還可以支持將語音文件中的文字直接提取出來。通過speech recognition可以調用多種平臺上的模型,比如google API,CMU sphinx,Microsoft Bing Speech,IBM Speech to Text,Wit.ai 等

離線轉換

對於國內的網絡環境,無法用google API來將語音數據轉換成文本文件,因為在調用這個包的時候,需要連接到google。當然,你可以租用一個國外的VPS來做這件事情。

這裡講一下如何在不聯網的情況下,依然可以通過python來將語音文件轉換成文字。這裡用到的包為sphinx,sphinx是由美國卡內基梅隆大學開發的大詞彙量、非特定人、連續英語語音識別系統。

安裝 sphinx

我本人所用的環境為ubuntu。

imyin@develop:~/Downloads/phinx$ lsb_release -aNo LSB modules are available.Distributor ID: UbuntuDescription: Ubuntu 16.04.3 LTSRelease: 16.04Codename: xenial

在安裝sphinx之前需要安裝一些軟體包

sudo apt-get install gcc automake autoconf libtool bison swig python-dev libpulse-dev

之後可以在相關網站上下載sphinxbase安裝包,當然也可以直接clone github上的包

下載完之後進行解壓

tar zxpf sphinxbase-5prealpha.tar.gz

修改文件名

mv sphinxbase-5prealpha sphinxbasels sphinxbaseAUTHORS doc indent.sh Makefile.am README.md src win32autogen.sh .git LICENSE NEWS sphinxbase.pc.in swigconfigure.ac include m4 README sphinxbase.sln test

現在我們應該運行

autogen.sh

來生成

Makefiles

和其他一些腳本以備後續的編譯和安裝。

./autogen.sh

下面開始源碼安裝

make && sudo make install

執行完以上命令之後,如果沒有出現什麼報錯信息,就說明已經安裝成功了,但是此時你的命令並不可以生效,在運行命令時會出現這樣的錯誤。

imyin@develop:~/Downloads/phinx/sphinxbase$ sphinx_lm_convert sphinx_lm_convert: error while loading shared libraries: libsphinxbase.so.3: cannot open shared object file: No such file or directory

還需要讓系統加載目錄

/usr/local/lib

,為了讓系統每次啟動時都可以自動加載,可以修改系統配置文件

ld.so.conf

sudo echo "/usr/local/lib" >> /etc/ld.so.confsudo ldconfig

這時候,就可以通過

sphinx_lm_convert

命令將模型DMP文件轉成bin文件

sphinx_lm_convert -i zh_broadcastnews_64000_utf8.DMP -o zh_CN.lm.bin

上面這行代碼是將中文的模型DMP文件轉成了bin文件。在安裝完sphinx後默認只支持英文,在存放模型的路徑下只有一個文件名為

en-US

,所以這裡需要添加一個處理中文的模型,相關文件可以在這個網址中下載。

在python中使用sphinx

想要在python中使用sphinx的話,需要安裝一些依賴包。

pip install pydub -U # 負責將MP3文件轉換為 wav 文件pip install SpeechRecognition -U # 負責將語音轉換成文字sudo apt -qq install build-essential swig libpulse-dev # 為後面安裝 pocketsphinx 做準備pip install -U pocketsphinx # 為使用 sphinx sudo apt-get install libav-tools # 為解決在調用 pydub 時出現的 warning :RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)

這時候,就可以啟動ipython來試試效果了。

file_path = '/home/imyin/Downloads/phinx/test_data'r = sr.Recognizer()hello_zh = sr.AudioFile(os.path.join(file_path, 'test.wav'))with hello_zh as source: audio = r.record(source)r.recognize_sphinx(audio, language='zh_CN')'今天 天氣 很'

可以看出,這個語音識別器已經生效了。但是我說的是「今天天氣好熱啊」。

看來sphinx中的模型並非很準吶,而且這只是一個短句子。我們接下來看看長句子的效果,我錄了村上春樹的《當我談跑步時我談些什麼》中的一段內容。

那一年的七月裡,我去了一趟希臘,要獨自從雅典跑到馬拉松,將那條原始的馬拉松路線——馬拉松至雅典——逆向跑上一趟。為什麼要逆向跑呢?因為清晨便從雅典市中心出發,在道路開始擁堵、空氣被汙染之前跑出市區,一路直奔馬拉松的話,道路的交通量遠遠少得多,跑起來比較舒適。這不是正式的比賽,自己一個人隨意去跑,當然不能指望有什麼交通管制。hello_zh = sr.AudioFile(os.path.join(file_path, 'test2.wav'))with hello_zh as source: audio = r.record(source)r.recognize_sphinx(audio, language='zh_CN')'南 音 揚 的 只有 領 過 球 的 立場 是 希望 讓 豬只 處理 垃圾 土木工程 上 打球 運動 充滿 溫情 能 成功 嗎 而 中止 了 對 印尼 商報 稱 他 不是 沒有 立場 談 那 一 枚 其中 春天 從 雅典 市中心 出發 寸 廠 都 可 成功 突破 尋求 對 於 能 提升 統籌 署 取締 一路 直奔 馬拉松 和 阿 惹 山 活動 等 二十 個 隊 中 重申 這 不是 正常 的 比賽 自己 一個人 卻 一直到 當然 不能 說明 什麼 這種 共識'

呃,看到結果,我覺得可以用一個來形容:差勁。兩個字來形容:太差勁!

當然,這個模型只是我直接從網上下載下來的。訓練它時所用到的語料不會那麼齊全,所以在測試時難免會出現不準確的情況。要想讓模型更加準確,需要自己在利用sphnix繼續訓練模型。

相關辦法在其官網上可以找到,也有相應的教程。感興趣的朋友可以自行研究。

Q: Why my accuracy is poorSpeech recognition accuracy is not always great. To test speech recognition you need to run recognition on prerecorded reference database to see what happens and optimize parameters.You do not need to play with unknown values, the first thing you should do is to collect a database of test samples and measure the recognition accuracy. You need to dump speech utterances into wav files, write the reference text file and use decoder to decode it. Then calculate WER using the word_align.pl tool from Sphinxtrain. Test database size depends on the accuracy but usually it’s enough to have 10 minutes of transcribed audio to test recognizer accuracy reliably. The process is described in tutorialtuning.

Google API

利用google API來處理語音識別則相當準確,不過需要連接google,以下是我在VPS中執行的一段代碼,可以看出,它將我的錄音精準地翻譯成了文字。

但是如果錄音文件較大的話,會運行時間很長,並且會返回一個超時的錯誤,這很是讓我苦惱。

不過幸運的是,speech_recognition支持將語音文件進行截取處理。例如,我可以只處理語音文件中的前15秒鐘的內容。

with test as source: audio = r.record(source, duration=15)r.recognize_google(audio, language='zh-CN')'那一年的7月裡我去了一趟希臘有獨自從雅典跑到馬拉松江哪條原始的馬拉松路線馬拉松直雅典一想跑上一趟'

從上面的結果看,簡直比sphnix處理的效果好太多了。

通過看幫助文檔發現speech_recognition不僅可以截取前面的錄音,還可以截取中間的。

In [18]: r.record?Signature: r.record(source, duration=None, offset=None)Docstring:Records up to ``duration`` seconds of audio from ``source`` (an ``AudioSource`` instance) starting at ``offset`` (or at the beginning if not specified) into an ``AudioData`` instance, which it returns.If ``duration`` is not specified, then it will record until there is no more audio input.

例如我想處理5秒至20秒之間的內容。

with test as source: audio = r.record(source, offset=5, duration=15)r.recognize_google(audio, language='zh-CN')'要獨自從雅典跑到馬拉松江哪條原始的馬拉松路線馬拉松直雅典一項跑上一趟為什麼要一想到呢因為星辰變從雅典市中心出發'

今天就講到這裡。世界真奇妙,更多精彩,自己繼續去發現吧!

相關焦點

  • 【C/Python】單詞語音識別-牛刀小試
    今天筆者簡單的實現了一下單詞的語音識別器,在訓練集(1060 個樣本)上,錯誤率壓到 1.2%,一學期的努力算是有了一個交代。        注意項目用 Python 3.5.x 和 C 語言開發,開發環境是 Visual Studio 2017。本項目主要參考 HTK 語音識別包,但中間掉進不少的坑,讀者參考 HTK 時也需謹慎。
  • 用Python 訓練自己的語音識別系統,這波操作穩了
    作者 | 李秋鍵責編 | Carol封圖 | CSDN 付費下載自視覺中國近幾年來語音識別技術得到了迅速發展,從手機中的Siri語音智能助手、微軟的小娜以及各種平臺的智能音箱等等,各種語音識別的項目得到了廣泛應用。
  • Python語音識別終極指北,沒錯,就是指北!
    最重要的是,在 Python 程序中實現語音識別非常簡單。閱讀本指南,你就將會了解。你將學到:•語音識別的工作原理;•PyPI 支持哪些軟體包; •如何安裝和使用 SpeechRecognition 軟體包——一個功能全面且易於使用的 Python 語音識別庫。
  • 用 Python 訓練自己的語音識別系統,這波操作穩了
    近幾年來語音識別技術得到了迅速發展,從手機中的Siri語音智能助手、微軟的小娜以及各種平臺的智能音箱等等,各種語音識別的項目得到了廣泛應用。
  • 【乾貨】怎樣用深度學習做語音識別
    加盟新智元,與人工智慧業界領袖攜手改變世界。【新智元導讀】吳恩達曾經預測當語音識別的準確率從95%上升到99%時,語音識別將會成為人類與計算機交互的新方式。歸功於深度學習,這4%的準確率的提升使得語音識別從難以實際應用的技術變成有無限的應用潛力的技術。
  • Tensorflow官方語音識別入門教程 | 附Google新語音指令數據集
    語音識別教程Google還配合這個數據集,推出了一份TensorFlow教程,教你訓練一個簡單的語音識別網絡,能識別10個詞,就像是語音識別領域的MNIST(手寫數字識別數據集)。雖然這份教程和數據集都比真實場景簡化了太多,但能幫用戶建立起對語音識別技術的基本理解,很適合初學者使用。
  • 用Python進行圖文識別(OCR)
    OCR與Tesseract介紹  將圖片翻譯成文字一般被稱為光學文字識別(Optical Character Recognition,OCR)。可以實現OCR 的底層庫並不多,目前很多庫都是使用共同的幾個底層OCR 庫,或者是在上面進行定製。
  • 如何在Python中將語音轉換為文本
    語音識別是計算機軟體識別口語中的單詞和短語並將其轉換為人類可讀文本的能力。在本教程中,你將知道如何使用SpeechRecognition 庫在Python中將語音轉換為文本 。因此,我們不需要從頭開始構建任何機器學習模型,該庫為我們提供了各種著名的公共語音識別API(例如Google Cloud Speech API,IBM Speech To Text等)的便捷包裝。
  • 絕佳的ASR學習方案:這是一套開源的中文語音識別系統
    機器之心編輯作者:AI檸檬博主語音識別目前已經廣泛應用於各種領域,那麼你會想做一個自己的語音識別系統嗎?這篇文章介紹了一種開源的中文語音識別系統,讀者可以藉助它快速訓練屬於自己的中文語音識別模型,或直接使用預訓練模型測試效果。所以對於那些對語音識別感興趣的讀者而言,這是一個學習如何搭建 ASR 系統的極好資料。
  • python應用之人臉識別及人臉解鎖
    各位看官大家好,今天我們繼續用python編寫一些無用,但卻有趣的小程序,
  • 使用Python三步完成文本到語音的轉換
    P.S  本文將通過網際網路使用Google API進行文本到語音的翻譯,所以請大家保持網絡連接正常。注意:這是語言建模教程的第一部分。在本教程系列中,我們將介紹如何使用gTTS進行語音轉換,光學字符識別,深度學習模型(如序列到注意力序列模型)以及其他有趣的東西。
  • Python不超過10行代碼就可實現人臉識別,教你辨別真假
    人臉識別技術大致由人臉檢測和人臉識別兩個環節組成。之所以要有人臉檢測,不光是為了檢測出照片上是否有人臉,更重要的是把照片中人臉無關的部分刪掉,否則整張照片的像素都傳給f(x)識別函數肯定就不可用了。人臉檢測不一定會使用深度學習技術,因為這裡的技術要求相對低一些,只需要知道有沒有人臉以及人臉在照片中的大致位置即可。
  • 文字轉語音助手怎麼實現轉換?教你用手機語音識別軟體處理
    文字轉語音助手也就是能夠把文本信息轉換成語音內容的工具,當我們開直播由於各種原因不便於說話時就可以藉助文字轉語音助手把想要講的內容以文字的信息將其轉換成語音。這種轉換方式其實可以歸納到語音識別處理一類中,而我們常用的錄音轉文字助手就是這樣的一種工具。
  • 基於DeepSpeech2實現中文語音識別,實施全流程講解,拿來即用
    你是否在苦苦尋找能識別中文的語音識別模型?那認真看完本文,你也能實現,本文可能為您節省少則幾小時多則數天的工作時間。DeepSpeech2由百度矽谷AI實驗室在2015年發布,是一個採用PaddlePaddle深度學習框架實現的端到端自動語音識別系統,它能通過簡單學習算法較準確的識別英語和中文。
  • 語音識別技術
    在講語音識別之前,我們先了解一下指紋識別,使用過指紋解鎖的手機的小夥伴幾乎每天都幾十次的使用頻率,其實原理總結起來就比較簡單,就是先把你的指紋特徵點進行提前登記到指紋庫裡面,下次你再指紋解鎖的時候,此時也是通過提取特徵點後進行特徵點的匹配
  • 使用Python和Keras創建簡單語音識別引擎
    得益於深度學習方面令人難以置信的最新進展,計算機也可以從經驗中學習理解語音。語音識別通過聲學和語言建模使用算法來工作。聲學建模表示語音和音頻信號的語言單元之間的關係;語言建模將聲音與單詞序列進行匹配,以幫助區分聽起來相似的單詞。通常,基於循環層的深度學習模型用於識別語音中的時間模式,以提高系統內的準確性。
  • 語音識別算法有哪些_語音識別特徵提取方法
    語音識別算法有哪些_語音識別特徵提取方法 網絡整理 發表於 2020-04-01 09:24:49   語音識別算法有哪些   本文列舉了幾種不同的語音識別算法
  • 專注E2E語音識別,騰訊AILab開源語音處理工具包PIKA
    機器之心報導作者:魔王、杜偉PyTorch + Kaldi,騰訊 AI Lab 開源輕量級語音處理工具包 PIKA,專注於端到端語音識別任務。Kaldi 是一個開源的語音識別系統,由 Daniel Povey 主導開發,在很多語音識別測試和應用中廣泛使用。
  • 門禁當中加入語音識別和rfid會有怎樣的不同
    門禁當中加入語音識別和rfid會有怎樣的不同 姚燁豪 毛建華 發表於 2020-03-04 14:47:39 RFID (Radio Frequency Identification
  • 教你用Python進行自然語言處理(附代碼)
    你是在說spaCy嗎?spaCy是一個相對較新的包,「工業級的Python自然語言工具包」,由MattHonnibal在ExplosionAI.開發。它在設計時目標用戶以應用數據科學家為主,這也意味著它不需要用戶來決定使用哪個算法來處理常見任務,而且它非常地快—快得難以置信(它用Cython來實現)。