※カメラ画像を使った組み込みシステムを作るのに迷ったので自分用の備忘録として残します。
環境:OSは新規Raspbianをインストールして、piユーザーで立ち上がり時にデスクトップ自動ログイン出来る状態であること。(2019/11/19の時点で最新のRaspbian)
組み込み用途でSSH接続やアップデートする予定が無いので情報の多いpython2.7を使いました。
OpenCVのインストール
pipでインストールするとか色々情報があるけど、raspbianの場合はaptでインストールするのがすごく簡単!
だけ。なんやらかんやらOpenCVに関するもの一式インストールされます。
Tkinterのインストール
python2.7用のTkinterは下記コマンドで一発インストールできます。
sudo apt-get install python-tk
python3の場合、インポートは
import tkinter
とするけど、python2.7用のインポートは
import Tkinter
だそうです。
Canvasに画像を表示させるために
TkinterのCanvasを使ってOpenCVの画像を表示させるには、Tkinter用の画像データに変換して表示する必用があるのだそうで、そのためにPILとImageモジュールが必用なようです。
Tkinterをインストールするだけでは駄目で、
sudo apt-get install python-pil.imagetk
としてImageTKというものをインストールすることで利用できるようになります。
GUIアプリを自動起動する設定
systemdで自動起動の設定をすると、起動しているデスクトップ環境とは別のセッションでGUIアプリが動こうとしてしまうので「ディスプレイが無いですよ!!」とエラーで終了してしまいます。(ここでかなり躓いた)
元のデスクトップ環境が存在しているところに立ち上げるなら、デスクトップ環境へ自動ログインしているユーザーの(ここではpiユーザー)lxsessionを編集する必用があるそうです。
下記ファイルを作って
/home/pi/.config/lxsession/LXDE-pi/autostart
※ディレクトリが無ければ作成すること
autostartに
@sudo python [application.py]
と、@に続く起動コマンドを記述して保存、その後rebootで完了。
上記の設定だと、Raspbianの初期デスクトップ環境(Raspberry Pi Desktop)では無く、LXDEというデスクトップ環境が立ち上がります(真っ黒画面でマウス右クリックでメニューやらが出るヤツ)。
LXDEの起動に次いでアプリが立ち上がるので組み込みとしての用途では最適です。