2021年9月5日 星期日

pocketsphinx 語音指令實驗

我的手指被我操到快廢掉了 :-( 趕快研究一下語音下指令。 觀念上是可行的。 需要先安裝這幾個套件: apt install pocketsphinx pocketsphinx-en-us xdotool

試車: pocketsphinx_continuous -inmic yes 它會印出一堆訊息, 最後出現 「INFO: continuous.c(275): Ready....」 就可以開始對麥克風唸一句 (大約十幾個字以下的) 英文。 順利的話, 它又會印一堆訊息, 最後印出你剛剛唸的英文。 因為預設的語言目錄是英文, 也就是說上面那句等同於: pocketsphinx_continuous -inmic yes -hmm /usr/share/pocketsphinx/model/en-us/en-us 不知道是我的發音太不標準, 還是它空耳太嚴重, 竟把 「read a book during lunch」 聽成 「we will do a live show」 orz。

如果初始化訊息印完後, 不管說什麼它都沒反應, 請先 測試 linux 的麥克風設定

還好我們的目標不是完整的英文聽寫, 只是簡短的語音指令。 根據 wiki 的說明, 請建一個文字檔 bash.txt 長得像這樣:

list long /1e-6/
move /1e-5/
copy /1e-6/
c d /1e-6/
public /1e-6/

然後這樣執行: pocketsphinx_continuous -inmic yes -kws bash.txt -logfn /dev/null 加了 -kws 選項, 就變成了只認少數關鍵詞的模式; 加後 -logfn /dev/null , 囉嗦的訊息就消失了。 唸唸看這幾個詞, 看電腦認不認得出來。

再來到 這裡 下載我的小程式 voicmd.py (前面的底線只是為了叫 gist 把它排到前面) 和設定檔 bash.txt 。 我的程式要讀的設定檔後面多了一欄要餵給 xdotool 的鍵, 不符合 sphinx 的格式, 所以 voicmd.py 會臨時動態在 /var/run/user/xxxx/ 底下產生真正餵給 sphinx 的另一個文字檔。 先在終端機的一個分頁執行 python3 voicmd.py -f bash.txt 。 然後切到另一個分頁。 假設你目前在家目錄, 而且底下有個 public_html/ 子目錄, 那麼開始一個字一個字唸 「cd public tab enter」, 就看到終端機印出指令、 (因為仿佛按了 tab 鍵而) 完成 completion、 走進去 public_html/ 子目錄 (我自己很常做的動做)。 你也可以參考 xdotool 按鍵名稱表 來修改你的設定檔。

有救了! 我的指頭有救了! 不過後來發現更完整的東東: caster, 請點首頁的 Videos 底下幾個連結觀賞一下語音操作實況。 目前遇到的問題 以後再來研究。 暑假快結束了, 我還有好多正事還沒做...

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。