目次
はじめに
新型コロナウイルスの影響で対面形式での販売はみなさん気を使われていますよね。
弁当販売のために店舗の前に出てずっと立ちっぱなしの店員さんを見て、これから夏で暑くなるのに大変だなぁと思ったので、注文を声で受けてレシートに打ち出す機会を作ってみました。
例えるなら自動ドライブスルーみたいな感じ。これで従業員さんを張り付きにする必要がなくなるはず。
これからの時代、機械でできることはどんどん任していきましょう!!
・声だけでモノにはタッチしないのでコロナウイルスの感染リスクなし
・電源を入れるだけですぐ使えるスタンドアロン型。小さいくスマホ用モバイルバッテリーで動くので携帯も可能。
・市販品の組み合わせなので安い。全部で1万円強で作れる。USBマイク,スピーカーは自前のものを流用すればさらにコストダウン可能。
・設計データは全てオープンですので改良等も自由。
作り方
設計データは以下に置いておきます。改善要望は大歓迎です。
部品表
回路図
https://oshwlab.com/minmax/voice-printer
以下、ポイントのみ解説。
USBマイク、スピーカーの設定
USBマイクの使用優先度を上げる
options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1
マイク、スピーカーのサウンドカードとデバイスの環境設定
・ラズベリーパイのデスクトップ画面右上のスピーカーアイコンを右クリックして各USBデバイスをONにして下さい。設定は自動で~/.asoundrcに書き込まれて次回からデフォルトで有効になります。
動作確認
・マイクで録音してtest.wavとして保存
$ arecord -d 10 -f cd test.wav
・スピーカーで再生
$ aplay test.wav
プリンターの設定
ラズパイUART(シリアル通信)の有効化
ラズパイ⇔プリンタはUARTで通信。ラズパイ3でUARTを使う方法は2つあるがどちらも一長一短。
今回、Bluetoothは使わないので1で対応。
1.Bluetoothを無効にしてUARTを有効にする
2.CPUのクロック数を固定にしてUARTを有効にする(パフォーマンスがわずかに落ちる)
変更箇所は2か所。
/boot/cmdline.txt を以下に変更。
console=tty1 root=PARTUUID=ea7d04d6-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles
/boot/config.txt に以下を追記。
#Enable UART
dtoverlay=pi3-miniuart-bt # Bluetoothを無効にする場合
#core_freq = 250 # クロック数を固定する場合
enable_uart=1
juliusの設定
リポジトリの中のinstall.shを実行すればコンパイル、インストール、辞書の取得まで一気にやってくれます。バージョンは4.5に合わせています。ここでは注意事項のみ記載。
・julius ver4.5から文字エンコード仕様が変更になっています。
既存のWEBリソースの様に、実行時にエンコード変換するオプションを入れるとエラーになりますので注意して下さい。(githubに上げているソースはver4.5に対応済みです)
・julius日本語辞書モデル(dictation-kit)はサイズが大きいので気長に待ちましょう。
ラズベリーパイ起動時にプログラムを自動実行させる
以下はsystemctrlで実装する例。
juliusはマイク、スピーカーの設定をユーザー環境設定から参照しているため、プログラムの実行はユーザ権限で実施。プログラムがエラーで落ちてもrestartしてくれる様にしてます。
/etc/systemd/system/voice-printer.service
[Unit]
Description=voice printer
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/pi/src/voice-printer
ExecStart=/usr/bin/python /home/pi/src/voice-printer/main.py
Restart=always
User=pi
[Install]
WantedBy = multi-user.target
上記追加したら下記順に実行して、設定更新、サービスリスタート、スタートアップに登録を完了
$ sudo systemctl daemon-reload
$ sudo systemctl restart voice-printer
$ sudo systemctl enable voice-printer
参考にしたサイト
・ラズパイのUSBマイク設定
・ラズパイからレシート出力するためのpythonスクリプト
・ラズパイでシUART(シリアル通信)を有効にする方法
・音声認識エンジン「julius」のインストール
・ベースに使ったラズパイケースのCADモデル