Intel Edison YoctoへのOpenCV 3.0.0-rc1のインストール(IPPとTBBを使用)。 OpenCVのUSBカメラ

Intel Edisonには十分な処理能力があるため、すべての機能を使用するのが論理的です。 要求の厳しいタスクの1つはコンピュータービジョンです。

この記事では、OpenCVライブラリをアセンブルしてIntel Edisonボードにインストールし、USBカメラを接続する方法について説明します。 IPPTBBを有効にしてOpenCVを構築します。これにより、ライブラリが両方のIntel Edisonコアを完全に使用できるようになります。



翻訳者からのメモ



元の記事では、Yocto Intel Edisonイメージの以前のバージョンでの作業について説明しています。 これで、必要なパッケージのほとんどが既にインストールされているため、新しいバージョンのイメージ(edison-image-ww05-15.zip)が利用可能になり、作業がはるかに簡単になりました。 新しいイメージには既にcmake、UVC、およびパーティションが適切なサイズであるため、これらの手順の説明は省略できます。 さらに、OpenCVとOpenCVのUSBカメラを操作するための2つの簡単な例のソースコードが翻訳に追加されました。



Intel EdisonでOpenCVを構築するには、少なくとも2 GBの追加メモリが必要になるため、必要なサイズのmicroSDカードをボードのスロットにインストールする必要があります。



イメージの準備(古いイメージ)



Board Support Package and Startup Guideを使用して、標準(またはオプションパッケージで特別な)Edisonイメージを準備します 。 元のイメージを使用するか、追加のパッケージで独自のイメージをカスタマイズできます。



LinuxカーネルでUVC(USBビデオデバイスクラス)を有効にする(古いイメージ)



通常のUSBカメラを使用する場合は、LinuxカーネルでUVCを有効にする必要があります。 独自のイメージの作成が完了したら(「bitbake edison-image」を作成)、Linuxカーネルを構成する準備が整いました。 ホストマシンに入力します。



~/edison-src> bitbake virtual/kernel -c menuconfig
      
      





次に、デバイスドライバー->マルチメディアサポート->メディアUSBアダプターを見つけてアクティブにします。 構成が完了したら、defconfigを変更したばかりの.configの内容に置き換えます。 以下を入力してください:



 ~/edison-src> cp /build/tmp/work/edison-poky-linux/linuxyocto/3.10.17+gitAUTOINC+6ad20f049a_c03195ed6e-r0/linux-edison-standardbuild/.config build/tmp/work/edison-poky-linux/linuxyocto/3.10.17+gitAUTOINC+6ad20f049a_c03195ed6er0/defconfig
      
      





最後に、もう一度bitbakeを実行します。



 ~/edison-src> bitbake virtual/kernel -c configure -f –v ~/edison-src> bitbake edison-image
      
      





パーティションの変更(古いイメージ)



古いイメージがある場合、ルートファイルシステムのサイズは512 MBであり、そのほとんどがすぐに占有されるため、標準パーティションを変更することをお勧めします。 '/ home'-指定されたパーティションを結合した後に残るすべてを占有します。通常は2 GB以上です。 したがって、1.3 GBの両方のセクションを作成する方が合理的です。



新しいソースリリースのファイル「edison-src / device-software / meta-」を見てください。これはファイル「edison-src / device-software / meta- edison / recipes-bsp / u-boot / files / edison.env ')Rootfsのサイズを512 MBから1312 MBに変更します。 その結果、/ homeのサイズは自動的に縮小されます。 画像を再記録する前に、別の変更を行う必要があります。 これはrootfsのサイズであり、「edison-src / device-software / meta-edison-distro / recipes-core / images / edison-image.bb」に設定されており、512 MBです。 rootfsのサイズを再度変更し、「bitbake edison-image」を実行してイメージを再構築します。 bitbakeが完了したら、次を実行します。



 ~/edison-src> /device-software/utils/flash/postBuild.sh
      
      





「dfu-util」があるかどうかを確認します。 そうでない場合は、インストールします:



 ~/edison-src> sudo apt-get install dfu-util
      
      





ここで、パーティション設定を適用するためにイメージを2回書き込む必要があります。 最初に、次を行います。



 ~/edison-src> /build/toFlash/flashall.sh –recovery
      
      





そして、「-recovery」なしで記録する



 ~/edison-src> /build/toFlash/flashall.sh
      
      





Edisonが正常に起動した後、USBケーブルをシリアルポートに接続します。 Linuxコンピューターに接続するときにEdisonが受け取ったUSBデバイス番号を確認します。 次に、「screen」経由で接続します(「X」の代わりに対応する番号を入力します(例:ttyUSBX-> ttyUSB0))



 > sudo screen /dev/ttyUSBX 115200
      
      





Edisonが正常に起動したことが確認できたら、「root」としてログインし、以下を実行して使用可能なスペースを確認します。



 root@edison:~# df –h
      
      





WiFi、sshおよびFTPのパスワードを構成する



ホストコンピューターがシリアルポート経由でEdisonに接続したら、次の操作を行います。



 root@edison:~# configure_edison –setup
      
      





指示に従い、パスワードとWiFiをセットアップします。 パスワードがない場合、sshを介したアクセスは拒否されます。 ホストコンピューターとEdisonを同じアクセスポイントに接続します。 FTPまたはSCPを介した任意の接続方法を使用して、ファイルを転送できます。



IPPを自動的にインストールするときに必要になるため、Edisonボードがインターネットにアクセスできることを確認してください。



CMakeをインストールする(古いイメージ)



古いEdisonイメージには「cmake」は付属していませんが、OpenCVをビルドするために必要です。 手動でインストールする必要があります。 1つの方法は、「opkg」を使用することです。 IntelフォーラムのAlexTユーザーが、スレッドで説明されているリポジトリを作成しました。



AlexTは、「opkg」を使用してリポジトリをアタッチする方法を示します。 Edisonがリポジトリーからパッケージを受け取るために、/ etc / opkg / base-feeds.confにあるすべてのものを次のものに置き換えます(他のopkg構成ファイルを変更する必要はありません):



 ===/etc/opkg/base-feeds.conf contents below=== src/gz all http://repo.opkg.net/edison/repo/all src/gz edison http://repo.opkg.net/edison/repo/edison src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32 ===end of /etc/opkg/base-feeds.conf contents===
      
      





「opkg update」と入力します。 リポジトリに正常に接続されたことを示す次の行が表示されます。



 root@edison:~# opkg update Downloading http://repo.opkg.net/edison/repo/all/Packages.gz. Inflating http://repo.opkg.net/edison/repo/all/Packages.gz. Updated list of available packages in /var/lib/opkg/all. Downloading http://repo.opkg.net/edison/repo/edison/Packages.gz. Inflating http://repo.opkg.net/edison/repo/edison/Packages.gz. Updated list of available packages in /var/lib/opkg/edison. Downloading http://repo.opkg.net/edison/repo/core2-32/Packages.gz. Inflating http://repo.opkg.net/edison/repo/core2-32/Packages.gz. Updated list of available packages in /var/lib/opkg/core2-32.
      
      





これでCMakeをインストールする準備ができました。 以下を入力してください:



 root@edison:~# opkg install cmake-dev
      
      





「cmake」と入力すると、ヘルプページが表示されます。



OpenCV 3.0.0



OpenCV自体に到達する前に、Edisonで構築するために多くの空きスペースが必要です。 したがって、少なくとも2 GBの追加の外部メモリが必要です。 micro SDカードをフォーマットし、Edisonにマウントします。 カードは、ボード上とLinuxホストマシンの両方で直接フォーマットできます。 Linuxコンピューターでカードをフォーマットするには、次のように入力します(block_deviceをデバイスで置き換えます(例:/ dev / mmcblk1))



 > mkfs.ext4 block_device
      
      





または:



 > mke4fs -t ext4 block_device
      
      





セクションをマークしましょう:



 > e4label <block_device> new_label
      
      





SDカードをEdisonに挿入してマウントします。



 root@edison:~# mkdir <Desired_DIR> root@edison:~# mount block_device <Desired_DIR>
      
      





「df -h」を使用して、問題なくマウントされたことを確認します。 便宜上、自動マウント「自動マウント」を構成できます。 / dev / block_device <your folder> 'を/ etc / fstabに追加します。



 root@edison:~# vi /etc/fstab
      
      





「/ dev / mmcblk1 / home / ext」を追加します







公式OpenCVページからOpenCV for Linux 3.0をダウンロードします 。 結果のzipファイルをFTPまたはSCPを介してEdisonにコピーします。 OpenCVが構築されると1 GB以上かかるため、すぐに外部SDカードにコピーすることをお勧めします。 「unzip opencv-3.0.0-rc1.zip」コマンドを使用してダウンロードしたファイルを解凍し、opencv-3.0.0-rc1フォルダーが作成されたことを確認します。 <OpenCV_DIR>フォルダーに移動し、「cmake」と入力します。 そこにどんなオプションがあるかを見てください。



パフォーマンスを向上させるために、IPPとTBBを含めます。 WITH_IPPフラグが有効な場合、IPPライブラリは自動的にロードされます。 これは、TBBライブラリには当てはまりません。 手動でインストールする必要があります。 したがって、ホストコンピューターにTBBパッケージをインストールし、適切なファイルをEdisonにコピーします。 Linuxホストコンピューターが64ビットの場合、apt-getを介してダウンロードするタイミングをi386に通知する必要があります。 ホストコンピューターで次のように入力します。



 > sudo apt-get install libtbb-dev:i386
      
      





そして、同じ名前でEdisonの/ usr / include / tbbフォルダーにファイルをコピーします。 また、次のファイルをEdisonにコピーする必要があります。



 /usr/lib/libtbb.so, /usr/lib/libtbbmalloc.so, /usr/lib/libtbbmalloc_proxy.so /usr/lib/pkgconfig/tbb.pc
      
      





このページでは、tbbライブラリファイルの完全なリストを見ることができます。

Edisonの<OpenCV_DIR>タイプ(コマンドラインの最後にある「。」ドットを忘れずに)



 root@edison:<OpenCV DIR># cmake -D WITH_IPP=ON -D WITH_TBB=ON -D WITH_CUDA=OFF -D WITH_OPENCL=OFF -D BUILD_SHARED_LIBS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF .
      
      





このコマンドは、IPPとTBBをオンにし、不要なものをすべてオフにします。 オプション 'BUILD_SHARED_LIBS = OFF'を使用すると、OpenCVをインストールせずに実行する実行可能プログラムを作成できます。 これは、たとえば、アプリケーションを配布するときに役立ちます。 (IPPとTBBが必要ない場合は、WITH_TBB = OFFとWITH_IPP = OFFを使用してください)。 設定の結果、IPPとTBBが有効になっていることがわかります。







問題がなければ、次を入力します。



 root@edison:<OpenCV DIR># make -j2
      
      





完全な組み立てには30分から1時間かかります。 エラーが発生した場合



 'undefined reference to symbol 'v4l2_munmap' ... libv4l2.so.0 : error adding symbols: DSO missing from command line'
      
      





OpenCVまたはOpenCVの例を作成する場合、適切な構成ファイルに「-lv4l1」の後に「-lv4l2」を追加する必要があります。 同様のエラーが50を超えるファイルに表示される場合があるため、次のコマンドでこの置換を行うことをお勧めします。



 root@edison:<OpenCV_DIR># grep -rl -- -lv4l1 samples/* modules/* | xargs sed -i 's/-lv4l1/-lv4l1 -lv4l2/g'
      
      





アセンブリが完了したら、構築したものをインストールします。



 root@edison:<OpenCV_DIR># make install
      
      





LinuxコンピューターなしでTBBをインストールする



Linuxマシンが使用できない場合があります。 このようなTBBインストールの実施形態をここで説明します。

www.threadingbuildingblocks.orgからTBBをダウンロードします。これはtgzアーカイブです。 解凍します。 Edisonにコピーする必要がある2つのフォルダーが必要になります。



 <DIR>/include/tbb
      
      





その内容はすべて、/ usr / include / tbbのEdisonボードにコピーする必要があります。



 <DIR>/lib/ia32/gcc4.4/
      
      





また、ライブラリのsoファイルへのリンクを正しく設定して、その内容を/ usr / libのEdisonボードにコピーする必要があります。



OpenCV 3.0.0-rc1を使用したアプリケーションの構築



簡単なOpenCVアプリケーションを作成する最も簡単な方法は、ライブラリに付属の例を使用することです。

「/ samples」フォルダーに移動して、次のように入力します。



 root@edison:<OpenCV DIR>/samples# cmake .
      
      





すべてが構成され、サンプルをコンパイルする準備が整います。 これで、「samples / cpp」のサンプルファイルの1つを置き換えて、cmakeを使用してビルドできます。 たとえば、「image.cpp」を独自のコードに置き換えることができます。 最初に元のファイルをバックアップします。



 root@edison:<OpenCV DIR>/samples/cpp# cp image.cpp image_orig.cpp
      
      





image.cppを次のコードに置き換えます。
 #include <iostream> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; using namespace std; int main( int argc, char** argv ) { const char* imagename = "../data/lena.jpg"; Mat img = imread(imagename); if(img.empty()) { cout<<"Can't load image "<<imagename<<endl; return -1; } cout<<"Image read ok"<<endl; Mat gray_image; cvtColor( img, gray_image, CV_BGR2GRAY ); if( ! imwrite( "../data/test_gray_Image.jpg", gray_image ) ) { cout<<"Can't write image"<<endl; return -1; } cout<<"Write image ok"<<endl; return 0; }
      
      







この例では、ファイル「lena.jpg」から画像が読み取られ、グレースケールモードになり、ファイル「test_gray_Image.jpg」に書き込まれます。 1つ上のレベルに進み、例をコンパイルします。



 root@edison:<OpenCV DIR>/samples/cpp# cd .. root@edison:<OpenCV DIR>/samples# make example_image
      
      





エラーが発生した場合:



 'undefined reference to symbol 'v4l2_munmap' ... libv4l2.so.0 : error adding symbols: DSO missing from command line'
      
      





OpenCVまたはOpenCVの例をビルドする際、適切な構成ファイルに-lv4l1の後に-lv4l2を追加する必要があります。 同様のエラーが50を超えるファイルに表示される場合があるため、次のコマンドでこの置換を行うことをお勧めします。



 root@edison:<OpenCV_DIR># grep -rl -- -lv4l1 samples/* modules/* | xargs sed -i 's/-lv4l1/-lv4l1 -lv4l2/g'
      
      





実行:



 root@edison:<OpenCV DIR>/samples# cd cpp root@edison:<OpenCV DIR>/samples/cpp#./cpp-example-image
      
      





すべてが正常な場合、次の画面が表示されます。



 Write image ok
      
      





そして、フォルダー内:



 <OPENCV_DIR>/samples/data
      
      





ファイルが表示されます:



 test_gray_Image.jpg
      
      





ホストコンピューターにコピーして確認します。 そして、誰かが写真から私たちを見ているか、古いマントの王子が見ているのを見るなら...しかし、それが白黒のレナであれば、それはOpenCVが働いていることを意味します。



それでも、Edisonにはビデオ出力がないため、コードがグラフィック画面に表示されるとエラーが発生します。 たとえば、イメージまたはビデオを作成して表示する「imshow」は使用できません。



世界を見てみましょう



カメラでOpenCVの動作を確認します。 最も簡単な方法は、Linuxで実行され、UVCと互換性のあるカメラを使用することです。

カメラをUSB経由で接続するには、ボード上のスイッチSW1を移動して、カメラが接続されるフルサイズUSBポートの側面に配置する必要があります。







カメラを接続すると、すべてのUSBデバイスに関する情報を表示できます。



 root@Edison:/# lsusb Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 005: ID 1871:0141 Aveo Technology Corp.
      
      





最後の行はカメラです。 UVCで機能することを確認します。



 root@Edison:/# lsusb -d 1871:0141 -v | grep "14 Video" bFunctionClass 14 Video bInterfaceClass 14 Video bInterfaceClass 14 Video bInterfaceClass 14 Video bInterfaceClass 14 Video bInterfaceClass 14 Video bInterfaceClass 14 Video bInterfaceClass 14 Video
      
      





そのような線が見つかった場合、カメラはUVCをサポートし、OpenCVで使用できます。 次のコードを入力してください。



image.cppを次のコードに置き換えます。
 #include <iostream> #include "opencv2/opencv.hpp" using namespace cv; using namespace std; int main(int, char**) { VideoCapture cap(0); // open the default camera if(!cap.isOpened()) // check if we succeeded { cout<<"Can't open camera"<<endl; return -1; } cout<<"Camare init ok"<<endl; Mat img,frame; cap >> frame; cvtColor(frame, img, CV_BGR2GRAY); if( ! imwrite( "../data/test_camera_Image.jpg", img) ) { cout<<"Can't write image"<<endl; return -1; } cout<<"Camera image write OK"<<endl; return 0; }
      
      







この例では、カメラが初期化され、カメラから1つの画像が取得され、白黒バージョンに変換されてファイルに書き込まれます。

すべてが機能する場合、OpenCVでカメラを使用できます。



追加リンク:



facedetect.zip(13.81 MB)

mjpg-streamer-for-Edison.zip(957.36 KB)

VTune-Result-Edison.zip(1.07 MB)



以前の出版物:



Advanced Audio Distribution Profile(A2DP)を使用して、Bluetooth経由でIntel Edisonでオーディオを再生します

ワークショップ「Intel IoT」。 エジソン-強大な「赤ちゃん」



All Articles