DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

備忘録:OpenCVでUSBカメラの画像を取得してTkinterで表示させてGUI起動時にアプリを自動起動させるためのメモ

※カメラ画像を使った組み込みシステムを作るのに迷ったので自分用の備忘録として残します。

環境:OSは新規Raspbianをインストールして、piユーザーで立ち上がり時にデスクトップ自動ログイン出来る状態であること。(2019/11/19の時点で最新のRaspbian)

組み込み用途でSSH接続やアップデートする予定が無いので情報の多いpython2.7を使いました。

f:id:DreamerDream:20191119113355p:plain

 

OpenCVのインストール

pipでインストールするとか色々情報があるけど、raspbianの場合はaptでインストールするのがすごく簡単!

sudo apt-get install python-opencv

だけ。なんやらかんやらOpenCVに関するもの一式インストールされます。

 

Tkinterのインストール

python2.7用のTkinterは下記コマンドで一発インストールできます。

sudo apt-get install python-tk

python3の場合、インポートは

import tkinter

とするけど、python2.7用のインポートは

import Tkinter 

だそうです。

 

Canvasに画像を表示させるために

TkinterCanvasを使って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の起動に次いでアプリが立ち上がるので組み込みとしての用途では最適です。

kampa.me