【小ネタ】 Jetson NanoでAruco「AR(Augmented Reality)マーカー検出機能」を使用する

2020.07.30

1 はじめに

CX事業本部の平内(SIN)です。

Jetson Nanoでは、JETSON NANO DEVELOPER KITが公開されており、イメージは、通常これを利用します。

OpenCVは、最新のJetPack 4.4でVer4.1.1がセットアップされており、そのまま利用可能です。

しかし、opencv_contribのaruco「AR(Augmented Reality)マーカー検出機能」https://github.com/opencv/opencv_contrib/tree/3.3.0/modules/arucoについては、含まれておらず、利用できません。

nvidia@nvidia-desktop:~$ python3
Python 3.6.9 (default, Jul 17 2020, 12:50:27)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.__version__)
4.1.1
>>> cv2.aruco
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'cv2' has no attribute 'aruco'
>>>

本記事は、Jetson Nanoで、arucoモジュールを組み込んで、再コンパイルした際のメモです。

2 OpenCV 4.1.1のコンパイル

作業については、以下のページを参考にさせて頂きました。

https://qiita.com/daisuzu_/items/f17d365a895a599f832f

opencv本体と、opencv_contribのコードをダウンロードし、本体のコードにmodules/arucoを追加してコンパイルしました。

$ wget https://github.com/opencv/opencv/archive/4.1.1.zip -O opencv-4.1.1.zip
$ wget https://github.com/opencv/opencv_contrib/archive/4.1.1.zip -O opencv_contrib-4.1.1.zip
$ unzip opencv-4.1.1.zip 
$ unzip opencv_contrib-4.1.1.zip 
$ cp -r ./opencv_contrib-4.1.1/modules/aruco ./opencv-4.1.1/modules/
$ cp -r ./opencv_contrib-4.1.1/modules/cudev ./opencv-4.1.1/modules/
$ cd opencv-4.1.1/
$ mkdir build
$ cd build

cmakeのスイッチは、以下のとおりです。

$ cmake -D CUDA_HOST_COMPILER=/usr/bin/gcc-7 -D CUDA_NVCC_FLAGS="--expt-relaxed-constexpr" -D CUDA_VERSION="10000" -DWITH_NVCUVID=OFF -DENABLE_CCACHE=OFF -DEIGEN_INCLUDE_PATH=/usr/include/eigen3 -D HAVE_CUDA=1 -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3" -D CUDA_ARCH_PTX="" -DWITH_FAST_MATH=OFF -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -DPYTHON3_EXECUTABLE=/usr/bin/python3 -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/ -D WITH_CUBLAS=ON -D LAPACK_CBLAS_H=/usr/include/aarch64-linux-gnu/cblas.h ..

cmakeの出力で、arucoモジュールが有効になっていることが確認できます。

--   OpenCV modules:
--     To be built:                 aruco calib3d core cudev dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo python3 stitching video videoio

makeとinstall

$ make -j4
$ sudo make install

3 確認

getBuildInformation()で、組み込まれたモジュールに、arucoが確認できます。

$ python3
Python 3.6.9 (default, Jul 17 2020, 12:50:27)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> print(cv2.getBuildInformation())

General configuration for OpenCV 4.1.1 =====================================

・・・(略)

  OpenCV modules:
    To be built:                 aruco calib3d core cudev dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo python3 stitching video videoio

また、以下のように、エラー無く利用できている事が確認できます。

>>> aruco = cv2.aruco
>>> dictionary = aruco.getPredefinedDictionary(aruco.DICT_4X4_50)
>>>

4 最後に

JetPackにセットアップされているOPenCVで、opencv_contribのモジュールを利用する際のメモとして、記録させて頂きました。