Raspberry Pie久しぶりに触って音声認識・レシート出力した備忘
RaspberryPie久しぶりに触った 多少は変わったり不便したことがあるので雑多にメモ
本当に書き散らすような記述
基本的にここを参考にしてく話
あとこれ
前提
- Symcode 58MM USB サーマルレシートプリンター https://www.amazon.co.jp/dp/B071X6RHM1/
- Raspberry Pie 3B+
https://www.amazon.co.jp/dp/B07K4DN1SJ/
- 4の2GBのが売ってなかったのと消費電力云々と家にUSB-Cがなかった
- STARTO 3.5インチ Raspberry Pi用ディスプレイ
https://www.amazon.co.jp/dp/B07RZW9CWP/
- なくてもいいけど、今回の用途的にあった方が便利なので使った
- なんとタッチパネル操作ができるが今回は無用の長物だ
- 家にあったUSBマイク
- 結果論だけど集音マイクの方がいいなぁ
RaspberryPieのOSはRaspberry Pi OS Lite
2021-05-07-raspios-buster-armhf-lite.img
https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit
どうでもいいけど、今はSDにOSを焼いてくれるアプリケーションが出ているらしい
が、自分の端末にアレコレ入れたくなかったので今回は使わなかった
https://www.raspberrypi.org/software/
色々いれる
いつもの
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get vim $ sudo apt-get git
python
pythonコマンドのデフォの参照を3系に変える
$ cd /usr/bin $ sudo unlink python $ sudo ln -s python3 python
参考:https://www.ingenious.jp/articles/howto/raspberry-pi-howto/python-3-change/
pipも入ってなかったので入れる pipはそのままだとpip3で呼ぶことになるので、上記のpython3.xへの変更に倣い参照を差し替える
# install pip $ sudo apt-get -y install python3-dev $ sudo apt-get -y install python3-pip # link $ cd /usr/bin $ sudo unlink python $ sudo ln -s pip3 pip
日本語表示
$ sudo apt-get jfbterm
参考:https://www.raspberrypi.org/forums/viewtopic.php?t=240773
NW接続とか
久しぶりにやるとSSHすら苦労した
これは完全に自分の事情なんだけど、 手元のWindows端末にはLANポートは一つでWifiなし、MacbookにはWifiがあってLANポートすらない
丁度手元にUSBオス-LANメスなケーブルがあったのでどうにかなった
これで繋げばいい ssh pi@raspberry.local
raspberry.localでログインするしIP固定はしなくていいかな
Wifi設定前は以下の構成で接続して設定する [Internert]-[Router]-[LAN]-[Win]-[USB-LAN]-[LAN]-[RaspberryPie]
でWifiの設定をする。最初に以下のようなことも言われるけど、
Wi-Fi is currently blocked by rfkill. Use raspi-config to set the country before use.
こちらの手順で十分だった http://faster-than-the-sol.blogspot.com/2020/03/raspbian.html
raspi-configのメニューがちょっと変わっていて
1. SystemOption > S1 Wireless LAN
にある
今回はraspi-configで設定したけど、上記に記述されている通り/boot直下に書いてしまっておいた方が早い気もする
モニタ準備
準備する
商品の説明書に説明が書いてあることだろうから特に困らないだろう
$ git clone https://github.com/Lcdwiki/LCD-show.git $ chmod -R 755 LCD-show $ cd LCD-show $ sudo ./MHS35-show
困らないだろうと思いきや、
sudo ./MHS35-show
の実行中にエラーが出る
$ sudo ./MHS35-show (省略) Selecting previously unselected package xserver-xorg-input-evdev. (Reading database ... 45946 files and directories currently installed.) Preparing to unpack .../xserver-xorg-input-evdev_1%3a2.10.6-1+b1_armhf.deb ... Unpacking xserver-xorg-input-evdev (1:2.10.6-1+b1) ... Processing triggers for man-db (2.8.5-2) ... dpkg: dependency problems prevent configuration of xserver-xorg-input-evdev: xserver-xorg-input-evdev depends on libevdev2 (>= 1.2.2+dfsg-1~); however: Package libevdev2 is not installed. xserver-xorg-input-evdev depends on libmtdev1 (>= 1.1.0); however: Package libmtdev1 is not installed. xserver-xorg-input-evdev depends on xorg-input-abi-24; however: Package xorg-input-abi-24 is not installed. xserver-xorg-input-evdev depends on xserver-xorg-core (>= 2:1.18.99.901); however: Package xserver-xorg-core is not installed. dpkg: error processing package xserver-xorg-input-evdev (--install): dependency problems - leaving unconfigured Errors were encountered while processing: xserver-xorg-input-evdev reboot now Connection to raspberrypi.local closed by remote host. Connection to raspberrypi.local closed.
https://www.amazon.co.jp/gp/customer-reviews/R4LL68CCBYJ5E/
この人のコメント通り以下の作業を実施する(ありがたい)
$ sudo vi /etc/rc.local
"fbcp &"
の行をコメントアウト、もしくは削除する
Google Cloud Speech APIを使う準備
冒頭のコチラに記載のものとは多少方法が変わっている
# Add the Cloud SDK distribution URI as a package source echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list # Import the Google Cloud public key curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add - # Update the package list and install the Cloud SDK sudo apt-get update && sudo apt-get install google-cloud-sdk
https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu
sudo apt-get update && sudo apt-get install google-cloud-sdk
の実行時に文句を言われた
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
素直に sudo apt --fix-broken install
し再度実行したら無事解決
この後説明の通り認証情報つくったり、json置いたりとかする
参考(利用方法):https://cloud.google.com/speech-to-text/docs/libraries?hl=ja#client-libraries-install-python
事前にWindowsで試すなら...
因みにWindowsならGUIでぽちぽちインストールしたあと コード内でこんな感じにCredentialのJsonのパスを設定してあげる
... from google.cloud import speech ... credential_path = r"D:\dev\python-speech-test\testhogehoge-xxxxxxxxxxxx.json" os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credential_path # 参考:https://stackoverflow.com/questions/51554341/google-auth-exceptions-defaultcredentialserror
サンプルのgitは古くなってるし pip install -r requirements.txt
は別にやらなくていいかな
自分で以下をインストールしておけばいい
# 最終的にプログラムを動かす時にはマイクを利用する # マイクを使う時にsudo python hoge.pyとしないとマイクが使えないよとOSエラーになる # ということでpipもsudoで入れる sudo pip install google.cloud sudo pip install google-cloud-speech
マイク関連
冒頭のコチラの記事の通り、設定ファイル弄る
もしかしたらやらなくていいかも...
ただpyaudioとnumpyはpipで入れてはいけない
以下の手順に従ってインストールする
pyaudio
$ sudo apt-get install python3-pyaudio
numpy
https://qiita.com/ohbashunsuke/items/e233b4969e4c410ac74f
$ sudo apt-get install libatlas-base-dev
$ pip uninstall numpy # remove previously installed version
$ sudo apt-get install python3-numpy
音量ってかインプットゲイン
GUIでいじれるっぽいけど反映されてない気がする
https://www.ukeyslabo.com/raspberry-pi/audio/#gui%E3%81%A7%E6%93%8D%E4%BD%9C%E3%81%A7%E3%81%8D%E3%82%8B-alsamixer%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89
pyaudio側では弄れない。うーん
事前にWindowsで試すなら...
Pyaudioのインストールに苦労する
https://qiita.com/sugi-juku/items/c92f8f170a6b455e15f2
プリンタ
基本的にここの方法でOK
$ sudo pip install python-escpos $ sudo pip install Pillow
おこられた
$ python print_test.py >>> import pillow Traceback (most recent call last): File "print_test.py", line 1, in <module> import print.py File "/home/pi/BookProj/print.py", line 1, in <module> from escpos.printer import Usb File "/usr/local/lib/python3.7/dist-packages/escpos/printer.py", line 21, in <module> from .escpos import Escpos File "/usr/local/lib/python3.7/dist-packages/escpos/escpos.py", line 25, in <module> from escpos.image import EscposImage File "/usr/local/lib/python3.7/dist-packages/escpos/image.py", line 17, in <module> from PIL import Image, ImageOps File "/usr/local/lib/python3.7/dist-packages/PIL/Image.py", line 109, in <module> from . import _imaging as core ImportError: libopenjp2.so.7: cannot open shared object file: No such file or directory
追加でやったのはこれ
sudo apt-get install libopenjp2-7
プログラムを動かす
プログラムの詳細までは書かなくてもいいかな...?(汚いから書きたくない)
気が向いたら載せるかも
上記の流れでPython 3.xが普通にpythonで呼び出せるようになってるのでコードは3.xの文法で書けばいい
まあ、その結果がmain.pyという名前だとして、起動は sudo python main.py
上述の通り、sudoで実行する
なんでかと言うと、USBマイク、USBサーマルプリンタを使うのにroot権限がほしいから
その辺適切に設定すれば回避できそうな気もしつつ、まあいいかということで