樹莓派的語音識別


樹莓派的語音識別

1. 安裝linux下的聲音庫

sudo apt-get install alsa-base
sudo apt-get install alsa-utils
sudo apt-get install libasound2-dev

可能遇到的問題:

E: Unable to locate package alsa-base

解決:更換系統的源

cd /etc/apt/
cp sources.list sources.list.bak
sudo apt-get install vim
sudo vim source.list
...中科大的軟件源
deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
...

sudo apt-get update # 更新源
sudo apt-get -f install #修復損壞的軟件包
sudo apt-get upgrade #更新軟件

換源可能出現的問題:

Err:1 http://mirrors.aliyun.com/ubuntu xenial InRelease                                                        
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32

解決:

sudo gpg --keyserver keyserver.ubuntu.com --recv 3B4FE6ACC0B21F32 //(這個公鑰根據提示來寫的) 
sudo gpg --export --armor 3B4FE6ACC0B21F32 | sudo apt-key add -
sudo apt-get update

輸入alsamixer

2.聲音的輸入和輸出

將usb聲卡作為默認的聲卡:

cd 
vim .asoundrc
... 內容如下
pcm. !default sysdefault:Device
...

聲音的輸出: 挑選一個wav格式的音樂: 可以在這個網站下載示例 https://www.ape8.cn/

sudo aplay loveme.wav #開始播放音樂

聲音輸入:

sudo arecord -D hw:1,0 -c1 -r16000 -fS16_LE test.wav #對着話筒說話進行錄制

參數說明:

-h,—help(幫助)
-V,–version(打印版本信息)
-l,–list-devices(列出全部聲卡和數字音頻設備)
-L,–list-pcms(列出全部PCM定義)
-D,–device(指定PCM設備名稱)
-q,–quiet(安靜模式)
-t,–file-type(文件類型voc,wav,raw或au)
-c,–channels(設置通道數)
-f,–format(設置格式)
-r,–rate(設置頻率)
-d,–duration(設置持續時間,單位為秒)
-s,–sleep-min(設置最小休眠時間)
-M,–mmap(mmap流)
-N,–nonblock(設置為非塊模式)
-B,–buffer-time(緩沖持續時長,單位為微秒)
-v,–verbose(顯示PCM結構和設置)
-I,–separate-channels(設置為每個通道一個單獨文件)

3. 語音識別

采用開源庫: PocketShinx

下載安裝:

#下載
wget https://sourceforge.net/projects/cmusphinx/files/sphinxbase/5prealpha/sphinxbase-5prealpha.tar.gz/download -O sphinxbase.tar.gz

wget https://sourceforge.net/projects/cmusphinx/files/pocketsphinx/5prealpha/pocketsphinx-5prealpha.tar.gz/download -O pocketsphinx.tar.gz
# 解壓
tar -xzvf sphinxbase.tar.gz
tar -xzvf pocketsphinx.tar.gz
# 安裝依賴
sudo apt-get install bison libasound2-dev swig
#先安裝sphinxbase
cd sphinxbase-5prealpha
sudo ./configure --enable-fixed
sudo make
sudo make install
#安裝pocketsphinx
cd pocketsphinx-5prealpha
sudo ./configure
sudo make
sudo make install
#讓系統知道PocketPhinx庫文件的位置
sudo vim /etc/ld.so.conf
...追加一行
/usr/local/lib
...
# 進入pocketPhinx下的src/programs
./pocketsphinx_continuous -inmic yes #這樣就可以對着話筒說了,語音識別完成

4. 提高識別精度

通過上述的開源庫,測試發現十分的不准確,提高准確率的方法有兩種,一種是通過訓練模型,過程很復雜,另一種是通過制定一些關鍵字進行范圍限定.下面是第二種方法的操作步驟

創建字典

vim keyword.txt
...
up
down
left
right
light
hello
...

生成程序識別的文件:訪問http://www.speech.cs.cmu.edu/tools

將字典文件上傳,生成指定的.tgz壓縮文件,點擊下載

./pocketsphinx_continuous -lm 3253.lm -dict 3253.dic -inmic yes

發現識別精度直線上升

5.理解語音並發起動作

動作可以多種多樣,他可以是觸發一個腳本,可以是回復一句話,下面的實例,做一個簡單回應,當我說出hello, 他回復im okay,這樣的功能

讓程序說話: 文本轉語音: TTS(TextToSpeach)

sudo apt-get install espeak

修改pocketPhinx的程序

cp continuous.c  continuous.c.bak # 做好備份
...修改如下
if (!in_speech && utt_started) {
            /* speech -> silence transition, time to start new utterance  */
            ps_end_utt(ps);
            hyp = ps_get_hyp(ps, NULL );
            if (hyp != NULL) {
		printf("開始識別了昂....");
		if(strcmp(hyp,"HELLO")==0){
		  system("sudo espeak \"im okay\"");
		}
                printf("%s\n ", hyp);
                fflush(stdout);
            }

            if (ps_start_utt(ps) < 0)
                E_FATAL("Failed to start utterance\n");
            utt_started = FALSE;
            E_INFO("Ready....\n");
        }

sudo make # 重新編譯
./pocketsphinx_continuous -lm 3253.lm -dict 3253.dic -inmic yes


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM