This service is available only in Japanese-language.
YoctoでビルドしたLinux上にてOpenCVのプログラムを動作させようとしています。
c++で作成したプログラムを起動すると以下のようなエラーが発生してしまいます。
terminate called after throwing a[ 29.143897] audit: type=1701 audit(1627454408.479:3): auid=4294967295 uid=0 gid=0 ses=4294967295 pid=3621 comm="opencvtest" exe="/home/root/opencvtest" sig=6 res=1
n instance of 'cv::Exception'
what(): OpenCV(3.4.2) /usr/src/debug/opencv/3.4.2+gitAUTOINC+9e1b1e5389_d4e0286945_a62e20676a_34e4206aef_fccf7cd6a4-r0/git/modules/highgui/src/window.cpp:615: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvNamedWindow'
libgtk2.0-devが必要らしいということで、ルートファイルシステム内にlibgtk2.0-devを含ませたいのですが、追加させる方法が解りません。
どのように追加すればよいか教えていただけませんでしょうか。
yakuhito
2021/8/4 (水) 15:34
DISTRO_FEATURES に x11 は含まれていますか?
出力されているメッセージですが、
opencv/modules/highgui/src/window.cpp 内で定義されているもので
#define CV_NO_GUI_ERROR(funcname) \
cv::errorNoReturn(cv::Error::StsError, \
"The function is not implemented. " \
"Rebuild the library with Windows, GTK+ 2.x or Carbon support. "\
"If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script", \
funcname, __FILE__, __LINE__)
Ubutu や Debian の場合の対応例となります。こちらではlibgtk2.0-dev 及び pkg-config をインストールした上で
cmake 又は configureを実行する方法が紹介されています。
バージョン情報や、gitのリビジョンよりimx-4.14.78 をお使いと推測していますが、当該レシピでは
80 PACKAGECONFIG ??= "python3 eigen jpeg png tiff v4l libv4l gstreamer samples tbb gphoto2 \
81 ${@bb.utils.contains("DISTRO_FEATURES", "x11", "gtk", "", d)} \
82 ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "libav", "", d)}"
より、DISTRO_FEATURES にx11が含まれていれば以下の
91 PACKAGECONFIG[gtk] = "-DWITH_GTK=ON,-DWITH_GTK=OFF,gtk+3,"
が有効となり、CV_NO_GUI_ERROR のメッセージの表示はなくなるかと。
fsl-imx-xwayland 若しくは fsl-imx-x11 で有ればDISTRO_FEATURES にx11は含まれます。
pn87
2021/8/4 (水) 16:02
回答ありがとうございます。
conf/local.confの内容(一部抜粋)ですが、以下のように設定しています。
---これより上はデフォルトのまま---
DL_DIR ?= "${BSPDIR}/downloads/"
ACCEPT_FSL_EULA = "1"
DISTRO_FEATURES_append = " x11"
#CORE_IMAGE_EXTRA_INSTALL += " libgtk2-0-dev"
CORE_IMAGE_EXTRA_INSTALL += " opencv opencv-samples libopencv-core libopencv-imgproc"
CORE_IMAGE_EXTRA_INSTALL += " libopencv-core-dev libopencv-highgui-dev libopencv-imgproc-dev libopencv-objdetect-dev libopencv-ml-dev"
IMAGE_INSTALL_append = " gtk+ gtk+-dev"
IMAGE_INSTALL_append = " packagegroup-core-buildessential"
LICENSE_FLAGS_WHITELIST = "commercial"
---- eof(local.confファイルここまで) ------
上記のlocal.confの状態で、
bitbake fsl-image-validation-imx
としておりますが、先に投稿したエラーとなっております。
DISTRO_FEATURES_appendの記述が悪いのでしょうか。
それとも何か余計に記述している箇所がありますでしょうか。
ご教授お願いします。
yakuhito
2021/8/4 (水) 17:09
local.conf で追記しても、DISTROで指定されたコンフィグレーションファイルで削除される場合があります。
bitbake は local.conf を読み込んだ 後に DISTRO で指定されたディストリビューションの設定ファイルを読み込みます。
meta-fsl-bsp-release/imx/meta-sdk/conf/distro/fsl-imx-wayland.conf
では
8 # Remove conflicting backends
9 DISTRO_FEATURES_remove = "directfb x11 "
10 DISTRO_FEATURES_append = " wayland pam systemd"
とグラフィックバックエンドを再定義しているため、local.conf 内でDISTRO_FEATURES_append でx11を追記しても、その後で読み込まれるDISTROの定義ファイルで無効化されてます。
現状 x11 が有効になっているディストリビューションは、先にも記載しましたfsl-imx-x11.conf fsl-imx-xwayland.conf
となっています。
pn87
2021/8/4 (水) 17:38
回答ありがとうございます。
DISTROの設定は以下で実行しました。
DISTRO=fsl-imx-xwayland MACHINE=imx8mqevk source fsl-setup-release.sh -b build-xwayland
この設定で、bitbake fsl-image-validation-imxを実行しているのですがDISTRO_FEATURES に x11は含まれていないと
いうことなのでしょうか。
yakuhito
2021/8/4 (水) 18:17
mx8に該当する場合gtk除外されています
meta-fsl-bsp-release/imx/meta-bsp/recipes-graphics/opencv/opencv_3.4.2.bbappend では
18 PACKAGECONFIG_remove_mx8 = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland x11', 'gtk', '', d)}"
となっており、
opencv_3.4.2.bb で定義されている
91 PACKAGECONFIG[gtk] = "-DWITH_GTK=ON,-DWITH_GTK=OFF,gtk+3,"
が効かない状況となっていますね。
何らかの方法で、bbappendの18行目の記述を無効化できれば graphic サポート付きのopencvが構築できそうなんですが。
pn87
2021/8/5 (木) 08:46
回答ありがとうございます。
opencv_3.4.2.bbappendの内容確認いたしました。
i.mx8では、OpenCV 3.4.2ではgtkが無効にされるということ、また、i.MX_Yocto_Project_User's_Guide.pdfに記載されている
「・fsl-imx-x11 - X11 graphics are not supported on i.MX 8.」との記載からOpenCVをプログラミングして
映像を画面に表示させることは不可能と判断させていただきました。
調べていただきましてありがとうございました。
失礼いたします。
yakuhito
2021/8/5 (木) 09:49
xwayland であればDISTRO_FEATUREにx11は含まれます
xwaylandでは、x11のプロトコルを使用したプログラムは実行可能です。
またgtk3は(正確にはgdk3)、グラフィックバックエンドをx11/wayland に対応しています。
imx6やimx7であれば、x11/xwayland双方ともcmake で指定するオプションで-DWITH_GTK=ONとなっています。
試しに、bbappendの該当部分をコメントにしたところ、-DWITH_GTK=OFF だったオプションが -DWITH_GTK=ON
に変わるところ、構築が通るところまでは確認できています。
何らかの制約事項によってimx8でのopencvのグラフィック出力を非サポートとした可能性がありますが
この状態でプログラムが動作するか否か、試してみることは可能かと。
pn87
2021/8/5 (木) 13:35
回答ありがとうございます。
提案していただいた方法(該当行をコメント)にて実施し、
OpenCVのプログラムで画像表示されることが確認できました。
このまま進めるかは検討したいと思います。
ありがとうございました。