(RaspbianOS 2020-02-05版では、Debian向けのAIYインストールを使って楽になったので、コメント4に投稿)
Raspberry Pi 4でAIY Voice Kit を動作させ、「ね~グーグル」の呼びかけができたので、
備忘録とする。RasPi3でも勿論動作する。
更に、14)のcheck_audio.pyを飛ばせば、AIY Voice Kit が無くても動作したので驚いた。Pulseaudioでマイク・スピーカーを切り替えることで自由に構築・運用ができる。
(下記原稿中、「–ダッシュ2個」の表現が全角文字置換されているので要注意)
【新規SDカードに書き込む場合】
1)MicroSDの初期化
PCにてExplorerがすべて閉じた状態でディスク管理を開いて
SDドライブのパーティションをすべてボリューム削除する
2)Win32DiskImager等でMicroSDに最新RaspbianOSを書き込む
https://downloads.raspberrypi.org/raspbian_full_latest
2019-09-26-raspbian-buster-full.img(Busterバージョン)
3)bootのconfig.txtに次の追記をする
dtoverlay=googlevoicehat-soundcard
また次をコメントアウトする
#dtparam=audio=on
なお、ミニLCDを使う場合は、次の追記も必要になることが多い。
7Inch 1024×600だと、config.txtに次の追加を指示されている。
max_usb_current=1
hdmi_force_hotplug=1
config_hdmi_boost=7
hdmi_group=2
hdmi_mode=87
hdmi_cvt 1024 600 60 6 0 0 0
4)bootのトップにsshダミーファイルをおく
5)RasPiにMicroSDを入れ、電源をオンにして起動する
(もしRasPi4だった場合は、まだgooglevoicehat-soundcardの
ボードをドッキングさせずに電源を入れる)
6)RaspberryPiの設定誘導に対し、Password,Locale,Time zoneを適切に
変更し、WiFiのPassKeyを設定する(スマホのGoogleツールで
デバイス設定するとき、同一AP配下となる様に考慮)
updateはここではskipする
7)PCからSSHツールにてraspberrypi.localに接続する
SSHで時々の休止が気になるときは、次のコマンドで省エネを停止できる
sudo iw dev wlan0 set power_save off
8)ダウンロードリストを拡張して、UPGRADEを実施する
echo “deb https://dl.google.com/aiyprojects/deb stable main” | sudo tee /etc/apt/sources.list.d/aiyprojects.list
wget -q -O – https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add –
sudo apt-get update
sudo apt-get -y upgrade
sudo reboot する
(RasPi4については、ここで画面出力を2Kに確定し、Shutdown
してgooglevoicehat-soundcardのボードをドッキングさせる)
9)仮置きとしてAIY V2のインストールをする
sudo apt install –fix-missing dkms
sudo apt-get install -y aiy-voicebonnet-soundcard-dkms aiy-dkms
処理中に–configureのエラーが発生するが、無視する:
aiy-dkms
aiy-voicebonnet-soundcard-dkms
10)AIYのadcとi2cの変更
sudo cp /usr/src/aiy-1.1/aiy/iio/adc/aiy-adc.c /usr/src/aiy-1.1/aiy/iio/adc/aiy-adc.c.org
sudo vi +138 /usr/src/aiy-1.1/aiy/iio/adc/aiy-adc.c
該当1行の削除
sudo cp /usr/src/aiy-1.1/aiy/mfd/aiy-io-i2c.c /usr/src/aiy-1.1/aiy/mfd/aiy-io-i2c.c.org
sudo vi /usr/src/aiy-1.1/aiy/mfd/aiy-io-i2c.c
2か所のi2c_lock_adapter(i2c->adapter);をi2c_lock_bus(i2c->adapter, I2C_LOCK_ROOT_ADAPTER);に変更
2か所のi2c_unlock_adapter(i2c->adapter);をi2c_unlock_bus(i2c->adapter, I2C_LOCK_ROOT_ADAPTER);に変更
インストールする
sudo dkms install aiy/1.1
sudo dkms remove aiy-voicebonnet-soundcard/1.0 –all
sudo reboot する
11)Audioのインストール
sudo apt-get update
sudo apt-get install -y pulseaudio pavucontrol
タイムアウトだったら、上手く行くまでinstallを再試行する。
処理中のaiy-voicebonnet-soundcardに関するエラーは無視する。
sudo mkdir /etc/pulse/daemon.conf.d/
echo “default-sample-rate = 48000” | sudo tee /etc/pulse/daemon.conf.d/aiy.conf
sudo apt-get install -y aiy-python-wheels
処理中にlinux_armv6lと–configureのエラーが発生するが、無視する:
aiy-python-wheels
aiy-voicebonnet-soundcard-dkms
また、VLCのHDMIからの音声出力を選択したいならば、
#dtparam=audio=on
のコメントを外し、カード番号を入れ替え、さらに次の
定義を、/etc/asound.conf に追加する。
<AIY VoiceKITのサウンドカードの人は、次のように設定>
options snd_rpi_googlevoicehat_soundcard index=0
pcm.softvol {
type softvol
slave.pcm dmix
control {
name Master
card 0
}
}
pcm.micboost {
type route
slave.pcm dsnoop
ttable {
0.0 30.0
1.1 30.0
}
}
pcm.!default {
type asym
playback.pcm “plug:softvol”
capture.pcm “plug:micboost”
}
ctl.!default {
type hw
card 0
}
<カード番号の入れ替え>/etc/modprobe.d/alsa-base.conf
options snd slots=snd_rpi_googlevoicehat_soundcard,snd_bcm2835
options snd_rpi_googlevoicehat_soundcard index=0
options snd_bcm2835 index=1
12)protobufのインストール
cd Downloads
pip3 download protobuf
pip3 install ./protobuf-3.11.2-py2.py3-none-any.whl
(3.11.2の部分は、最新Vnoを使う)
sudo vi +7 /var/lib/dpkg/info/aiy-python-wheels.postinst
7-8行をコメントアウトする
sudo dpkg –configure –force-overwrite –force-overwrite-dir -a
処理中に–configureのエラーが発生するが、無視する:
aiy-voicebonnet-soundcard-dkms
sudo reboot する
13)実行準備
git clone https://github.com/google/aiyprojects-raspbian.git AIY-projects-python
sudo mv AIY-projects-python /opt/aiy/projects-python
ln -s /opt/aiy/projects-python AIY-projects-python
ln -s /home/pi/AIY-projects-python AIY-voice-kit-python
sudo pip3 install -e AIY-projects-python
THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.
このエラーが出たとしても無視する。
sudo cp /opt/aiy/projects-python/src/aiy/assistant/auth_helpers.py \
/opt/aiy/projects-python/src/aiy/assistant/auth_helpers.py.org
sudo vi +75 /opt/aiy/projects-python/src/aiy/assistant/auth_helpers.py
この行末カッコ内の最後のパラメタ’,-1’を削除する
pip3 install google-assistant-library==1.0.0
# (Segmentation Fault防止のため、1.0.1を推奨するメッセージを
無視して1.0.0をPre設置)
pip3 install google-assistant-library
pip3 install google-auth-oauthlib
sudo pip3 install grpcio
AIYプロジェクト内の日本語対応が不完全なところを修正する。
vi +214 /home/pi/.local/lib/python3.7/site-packages/google/assistant/library/assistant.py
の.encode(‘ASCII’) を.encode(‘utf-8’) にする。
AIYボードの初期化のために、命令を追加する。
vi +284 /home/pi/AIY-voice-kit-python/src/aiy/board.py
に、GPIO.setwarnings(False) を行追加する。
14)次の確認を実施する
amixer sset Master 50% で、音量を半分にしておく
export PYTHONPATH=”/home/pi/AIY-voice-kit-python/src”
/home/pi/AIY-voice-kit-python/checkpoints/check_audio.py
15)次のURLに基づき、アカウント登録をする
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00255/042600011/?P=4
assistant.json ファイルを /home/piに置く
16)サンプルコードの実行
export PYTHONPATH=”/home/pi/AIY-voice-kit-python/src”
$PYTHONPATH/examples/voice/assistant_library_with_button_demo.py
初回のスクリプト実行時にURLが表示され、ブラウザでアクセスする
ことで認証文字列が返される。
それをスクリプト実行中の質問に貼り付ける。
17)デバイスの登録
サンプルコードの実行でしばらく放置し、スマホのHomeアプリの設定・詳細設定の
「アシスタント」に出現した新たなデバイス(Voice Kit)の言語を
日本語に設定し、属性参照を許可する。
以下は、SmartTV(PX-W3U4,PX-Q3U4使用)に変身させるときの追加作業
18)TVチューナーサポートシステムのインストール
curl –silent https://mori1-hakua.tokyo/test/TVget.sh | sh
19)N2TTS,youtube-dl,mojimojiのインストール
このURLに従う:https://support.kddi-research.jp/n2/service.html
(wget -O n2-linux-foc.tgz https://support.kddi-research.jp/n2/download.php?type=5)
sudo -H pip install youtube-dl
pip3 install mojimoji
pip3 install –upgrade google-api-python-client
【RasPi4に対応させ、multiTV.shから aiyTV.shを用意】
MPEG2に対するプレーヤーとして、OMXからVLCメディアプレーヤに
切り替えるため、
source ~/.biling
if [ “$BILING” = “yes” ]; then
MPG2 =`vcgencmd codec_enabled MPG2`
if [ “$MPG2” = “MPG2 disabled” ]; then
BILING=sel
fi
fi
とし、
elif [ “$BILING” = “sel” ]; then
(recdvb –dev ${DEV} –b25 –strip –http 8080 ${LCH}; exit) &
(sleep 2) &
cvlc -f –no-video-title-show http://localhost:8080/${CH}/
fi
と、プレーヤーを取り換える。
VLCはマルチスレッドではブロックノイズが出やすいため、スレッドを
シングルに切り替える。
<sayJ関数の追加>
vi $PYTHONPATH/aiy/voice/tts.py
<pre>
def sayJ(text, asynch=0, lang=’ja-JP’, volume=60, pitch=130, speed=100, device=’sysdefault:CARD=ALSA’):
logging.info(text) with tempfile.NamedTemporaryFile(suffix='.wav', dir=RUN_DIR) as f: cmd = 'n2tts -p VOLUME=%s -o %s "%s" && aplay -q -D %s %s' % \ (volume, f.name, text, device, f.name) if asynch==0: subprocess.check_call(cmd, shell=True) else: subprocess.Popen(cmd, shell=True) </pre>
以上
最初にDKMSを次のモードでインストールする。
sudo apt install –fix-missing dkms
vi /etc/udev/rules.d/99-px4video.rules
KERNEL==”px4video*”, GROUP=”video”, MODE=”0664″
KERNEL==”isdb2056video*”, GROUP=”video”, MODE=”0664″
sudo -H pip install –upgrade youtube-dl
Raspbian2020-0205 向けの正式ドキュメントは、次からDownloadできる。
https://mori1-hakua.tokyo/test/日本語AssistantV3.txt
また、音声呼び出しのSmartTV(PX-W3U4,PX-Q3U4使用)は、次でInstallできる。
curl –silent https://mori1-hakua.tokyo/test/TVget.sh | bash
これで、次のような声掛けによるテレビ視聴ができるようになる。
・aiy でBS-TBSを見たい
・aiy でフジテレビに変えて
・aiy で1チャンネルに切り替えて
・aiy で258チャンネルを見たい
・aiy でフジテレビをチラ見したい
・裏でTBSを見たい
・表でNHKを見たい
・aiy の裏を消して
・音声を交代して
aiy を省略すると、一般的には、家庭用のTVの操作になってしまう。