OpenCVのカレントバージョンは2.4系でこれはすでにレシピがある。 作業環境は以前作ったQt5のものをベースに行う。
OpenCVには簡単にウィンドウが扱えるhighguiというモジュールがあり、 そのバックエンドにQtを選択できる。 今回はEGLFSがバックエンドになっているQtをhighguiのバックエンドとして 動作させることができるかという試みでもある。
open2.4の取得
meta-oeに収録されているので以下のコマンドで取得する。
$ cd ~/rpi2/poky $ git clone git://github.com/openembedded/meta-oe.git
meta-qt5-rpi-eglfsの更新
opencvのhighguiをRPi+Qt5+EGLFS環境で動作させるために対応したので 以下のコマンドでmeta-qt5-rpi-eglfsを更新する。
ただ、今回新規に取得した場合は更新の必要はない。
$ cd ~/rpi2/poky/meta-qt5-rpi-eglfs $ git pull
meta-local
作業用のレイヤとしてmeta-localを準備する。
ファイルの作成
必要なディレクトリおよびファイルを作成する。
$ cd ~/rpi2/poky $ mkdir -p meta-local/conf $ touch meta-local/conf/layer.conf
layer.confの作成
meta-local/conf/layer.confを下記の内容で作成する。
# We have a conf and classes directory, add to BBPATH BBPATH .= ":${LAYERDIR}" # We have recipes-* directories, add to BBFILES BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes*/*/*.bbappend" BBFILE_COLLECTIONS += "local" BBFILE_PATTERN_local = "^${LAYERDIR}/" BBFILE_PRIORITY_local = "7"
パッケージの追加
qt5-dev-imageにパッケージを追加する。
bbappend
qt5-dev-image.bbappendを作成する。
$ cd ~/rpi2/poky $ mkdir -p meta-local/recipes-qt/images $ touch meta-local/recipes-qt/images/qt5-dev-image.bbappend
qt5-dev-image.bbappendの内容を以下のようにする。
IMAGE_INSTALL_append = " \ opencv \ opencv-samples \ "
ビルド
以下のコマンドでビルドディレクトリに移動する。 この処理にはbitbakeに必要な環境変数の設定が含まれているので、 必ず1度は実行しなければならない。
$ cd ~/rpi2 $ source poky/oe-init-build-env build_qt5
今回はQt5を作った時のディレクトリで作業する。
conf/local.conf
今回はパッケージのビルド時にX Windows関連のフラグが入り込まないように DISTRO_FEATURESから"x11"を削除する。
X Windows:を使わないことがわかっている場合は、これを削除しておくことでトラブルを回避できる。
以下をlocal.confに追加する。
DISTRO_FEATURES_remove = " x11"
" x11"最初の空白文字は重要なので気をつけること。 これを入れないと謎のエラーメッセージに悩まされることになる。
conf/bblayers.conf
BBLAYERSにmeta-oeとmeta-localを追加する。
BBLAYERS ?= " \ /home/mickey/rpi2/poky/meta \ /home/mickey/rpi2/poky/meta-yocto \ /home/mickey/rpi2/poky/meta-yocto-bsp \ /home/mickey/rpi2/poky/meta-raspberrypi \ /home/mickey/rpi2/poky/meta-qt5 \ /home/mickey/rpi2/poky/meta-qt5-rpi-eglfs \ /home/mickey/rpi2/poky/meta-oe/meta-oe \ /home/mickey/rpi2/poky/meta-local \ "
ビルド及びSDの書き込み
以下のコマンドでbitbakeの実行とSDカードの作成を行う。
$ bitbake qt5-dev-image $ sudo dd if=./tmp/deploy/images/raspberrypi2/qt5-dev-image-raspberrypi2.rpi-sdimg of=/dev/sdb bs=40M
以下はopencv-sampleに含まれるfind_objを動かしたところ。
highguiのウィンドウが表示できた。
EGLFSでは最初のウィンドウがフルスクリーンになるという決まり事があるため、 このような感じになっている。