pocketSphinx Android 离线语音识别
前幾天有個(gè)朋友找到我說(shuō)是否有非第三方(訊飛、百度)的語(yǔ)音識(shí)別方案,之前對(duì)這塊的了解是語(yǔ)音識(shí)別基本都是調(diào)用這種第三方的方案。聽(tīng)完之后,谷歌發(fā)下有兩種方案。
調(diào)用Android本地
具體就是使用原生的SpeechRecognizer來(lái)調(diào)用,但是這種目前的國(guó)內(nèi)環(huán)境是需要修改的,但是不能保證修改后各個(gè)機(jī)型是否能夠使用,按照這種方法,試了在小米手機(jī)上,基本是無(wú)法識(shí)別的,具體可以看下這篇文章的介紹:
https://juejin.cn/post/6844903861405089799
使用開(kāi)源的pocketSphinx方案
在github上發(fā)現(xiàn)pocketSphinx可以滿足目前的要求,開(kāi)源地址 : https://github.com/cmusphinx/pocketsphinx
由于是在android 設(shè)備上運(yùn)行的,所以可以直接使用Android開(kāi)源方案:
https://github.com/cmusphinx/pocketsphinx-android
按照這個(gè)教程添加依賴庫(kù)
dependencies {implementation 'edu.cmu.pocketsphinx.android:pocketsphinx-android:5prealpha@aar' }dependencies {compile (name:'pocketsphinx-android-debug', ext:'aar') }repositories {flatDir {dirs 'libs'} }或者也可以參考github上給出的 Android demo
https://github.com/cmusphinx/pocketsphinx-android-demo
由于是使用離線的方案,所以需要我們先訓(xùn)練好字典的模型,生成需要的語(yǔ)音模型,訪問(wèn)這個(gè)網(wǎng)址 http://www.speech.cs.cmu.edu/tools/lmtool-new.html點(diǎn)擊選擇文件,選擇剛才編寫(xiě)的命令集文件 command.txt,然后點(diǎn)擊COMPILE KNOWLEDGE BASE按鈕就可以生成語(yǔ)言模型,如圖:
這里生成了好幾個(gè)文件,我們可以把整個(gè) .tgz 文件下載下來(lái)解壓縮,其中得到的 .lm 文件就是我們需要的語(yǔ)言模型。
語(yǔ)言模型在這一步已經(jīng)完成了,接下來(lái)需要添加字典模型,在這個(gè)網(wǎng)址下載我們需要的模型:https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/Mandarin/
解壓后,里面有一個(gè).dic文件,然后參考這個(gè) .dic 文件的格式,在上一步獲取到的 .lm 語(yǔ)言模型文件中還有一個(gè) .dic 文件,補(bǔ)充完整這個(gè) .dic 文件的發(fā)音,如圖所示:
字典模型就這樣完成了,接下來(lái)添加 聲學(xué)模型
同樣是在資源網(wǎng)盤(pán)的 Mandarin 文件夾下,下載 .tar.bz2 的壓縮文件解壓后,得到如下聲學(xué)模型文件:
按照一般的流程,到這里,再根據(jù)文檔,就可以完成了,但是在開(kāi)發(fā)的過(guò)程中 發(fā)現(xiàn)按照以上方法,運(yùn)行都是報(bào)錯(cuò)的。
目前官網(wǎng)的字典模型是
該版本是比較新的,另外訓(xùn)練好的語(yǔ)音模型,在官網(wǎng)的demo版本中沒(méi)有看到是在那個(gè)地方加載,基于這兩個(gè)疑問(wèn),試了很多次,發(fā)現(xiàn)都不知道怎么解決,后面看到一個(gè) pocketSphinx 舊的版本的使用方法,https://blog.csdn.net/Crystal_xing/article/details/84957466
按照這個(gè)教程和對(duì)應(yīng)的開(kāi)源代碼:
發(fā)現(xiàn)里面有使用到 .lm 文件的訓(xùn)練好的模型,然后根據(jù)上面提到的,訓(xùn)練了對(duì)應(yīng)的關(guān)鍵字語(yǔ)音模型,發(fā)現(xiàn)還是無(wú)法識(shí)別,最后通過(guò)反復(fù)對(duì)比,發(fā)現(xiàn)是使用的字典模型版本不一致導(dǎo)致的。
于是使用了 PocketSphinx 0.7 https://sourceforge.net/projects/cmusphinx/files/pocketsphinx/0.7/ 版本的字典模型,解壓后在pocketsphinx-0.7\model\lm\zh_CN/mandarin_notone.dic 去找實(shí)際的拼音,然后運(yùn)行發(fā)現(xiàn)能夠正常的識(shí)別出來(lái),完美解決了。
總結(jié)
以上是生活随笔為你收集整理的pocketSphinx Android 离线语音识别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Wap网页制作
- 下一篇: [索引汇总帖] 【eoeAndroid社