1. 程式人生 > >用樹莓派實現會說話的湯姆貓

用樹莓派實現會說話的湯姆貓

會說話的湯姆貓很多人都玩過,對著它說話,它就會用貓的音調重複你說的話。這篇文章就是介紹如何使用樹莓派來實現這個功能。

測試裝置:

樹莓派3B+

ReSpeaker 2-Mics Pi HAT(USB的麥克風應該也可以)

耳機/音箱(需要帶插頭的)

1、ReSpeaker硬體安裝

ReSpeaker是直接扣在樹莓派上的,將樹莓派的針腳全部插入到ReSpeaker中。

2、ReSpeaker驅動安裝

通過SSH連線到樹莓派後,首先更新包源,然後安裝git,下一步會使用git下載程式碼:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git

從github獲取麥克風驅動原始碼:

git clone https://github.com/respeaker/seeed-voicecard.git

進入原始碼目錄,安裝驅動:

cd seeed-voicecard
sudo ./install.sh
reboot

安裝成功後需要重啟,然後分別執行aplay -l和arecord -l列出所有的聲音播放裝置和聲音錄製裝置:

pi@raspberrypi:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 7/7
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
pi@raspberrypi:~ $ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: seeed2micvoicec [seeed-2mic-voicecard], device 0: bcm2835-i2s-wm8960-hifi wm8960-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

如果都看到了card 1: seeed2micvoicec,則說明安裝成功。

3、ReSpeaker驅動安裝問題

如果安裝成功請跳過這一步。

我這裡第一次安裝沒有成功,報了一個錯誤:

Error! echo
Your kernel headers for kernel 4.14.50-v7+ cannot be found at
/lib/modules/4.14.50-v7+/build or /lib/modules/4.14.50-v7+/source.

大概意思是說找不到linux核心的標頭檔案,這個去目錄下找確實沒有,可能是由於官方映象升級核心時遺漏了些東西,最終按照這篇文章解決了:https://github.com/respeaker/seeed-voicecard/issues/83

大概步驟是:

(1)升級系統核心(如果沒安裝rpi-update,則需要先安裝):

sudo rpi-update

安裝成功後重啟。

(2)更新linux headers(如果沒安裝rpi-source,則需要先安裝):

sudo rpi-source --skip-gcc

(3)刪除老版本的linux headers:

刪除/lib/modules/資料夾下的老版本,比如我這裡安裝的最新版本是: 4.14.54-v7+,把非4.14.54開頭的資料夾刪掉就行了。

(4)重新安裝驅動:

sudo ./install.sh

安裝成功後重啟,再執行aplay -l和aarecord -l確認是否安裝成功。

4、測試ReSpeaker

執行錄音和播放命令:

arecord -f cd -Dhw:1 | aplay -Dhw:1

將揚聲器的插頭插入ReSpeaker的播放器介面。

現在說話,耳機中應該能夠聽到重複的聲音。

ReSpeaker上還支援APA102 LED,可以根據接收到的聲音有閃燈的效果。

這裡用到了pip,這是python的一個包安裝工具,需要先安裝:

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip -V  #檢視pip版本

然後安裝執行:

sudo pip install spidev
git clone https://github.com/respeaker/mic_hat.git
cd mic_hat
python pixels.py

現在說話的時候等應該會閃。

5、安裝PyAudio

雖然aplay和arecord可以實現播放和錄音的功能,但是如果要實時檢測聲音的話需要用PyAudio(可能也有別的庫,這裡選一個常用的)。

因為我這裡用了python3,所以需要python3版本的PyAudio:

sudo apt-get install portaudio19-dev python-all-dev python3-all-dev
pip3 install pyaudio

6、安裝SoundTouch

這個程式可以對音訊進行一些處理,我們這裡用來做變聲。

在Windows上可以直接下載:https://www.surina.net/soundtouch/download.html

在樹莓派上需要原始碼編譯安裝這個程式:

sudo wget https://gitlab.com/soundtouch/soundtouch/-/archive/soundtouch-2.0.0/soundtouch-soundtouch-2.0.0.tar.gz
sudo tar -xvf  soundtouch-soundtouch-2.0.0.tar.gz
cd soundtouch-soundtouch-2.0.0
sudo apt-get install automake autoconf libtool build-essential
./bootstrap
./configure
make
make install

安裝之後會在/usr/local/lib中生成類庫檔案,但是這個目錄下的檔案不能自動發現,建議將這個目錄增加到/etc/ld.so.conf中:

include ld.so.conf.d/*.conf
/usr/local/lib  #增加的行

然後執行 ldconfig 載入配置。

7、執行湯姆貓程式

這是一個用python3寫的程式,先安裝幾個依賴庫:

sudo pip3 install numpy

然後在/home/pi下建立一個目錄tomcat:

cd /home/pi
mkdir tomcat
cd tomcat

然後建立 tomcat.py,這個是會說話的湯姆貓的主程式。其中大概的流程是:

持續監控麥克風聲音,如果達到某個閾值就開始錄製聲音,如果聲音低於某個閾值就結束錄音,然後儲存聲音,然後變聲,然後播放;播放完畢後,繼續監控麥克風聲音。

現在上傳這個檔案到tomcat目錄中就可以運行了。

chmod +x ./tomcat.py
./tomcat.py

現在說句話試試,你應該能夠聽到湯姆貓美妙的回聲了(記得連上耳機或音箱哦