インドカレーファンクラブ

パソコン、カメラ

Raspberry Pie久しぶりに触って音声認識・レシート出力した備忘

RaspberryPie久しぶりに触った 多少は変わったり不便したことがあるので雑多にメモ

本当に書き散らすような記述

基本的にここを参考にしてく話

fabcross.jp

あとこれ

raspida.com

前提

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

https://qiita.com/yukky-k/items/0d18ec22420e8b35d0ac#pyaudio%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

$ 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権限がほしいから
その辺適切に設定すれば回避できそうな気もしつつ、まあいいかということで