みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

raspberrypi2 Qt5+EGLFSでOpenCVのhighguiを使う

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を動かしたところ。

f:id:mickey_happygolucky:20150219020600j:plain

highguiのウィンドウが表示できた。

EGLFSでは最初のウィンドウがフルスクリーンになるという決まり事があるため、 このような感じになっている。