ブログ

Armadillo-IoT G4/X2:OpenCV+Pythonの開発環境を構築する

at_takuma.fukuda
2023年5月9日 17時38分

Armadillo-IoT G4およびArmadillo-X2はVPUによる高速エンコード・デコードや、
MIPI・UVC・GigE等のカメラとの接続が可能で、画像処理機能を持ったエッジ機器としてご利用いただけます。
近年では、画像処理アプリケーションを構築する際にOpenCVとPythonを使われる事例をよく目にします。
この記事ではArmadillo-IoT G4およびArmadillo-X2でOpenCV+Pythonの開発環境を構築するための方法をご案内します。

前提事項

Armadillo-IoT G4およびArmadillo-X2はArmadillo Base OSで動作しています。
Armadillo Base OSはコンテナ形式でのアプリケーション開発を基本としています。
そのため、今回の記事でもアプリケーションを開発・動作させるためのコンテナの作成を行います。

ベースとなるコンテナの作成

Armadillo-IoT G4およびArmadillo-X2の画像処理性能を最大限に活用するため、アットマークテクノが配布しているDebianイメージを使用してコンテナを作成します。
あらかじめ、下記を参考にat-debian-imageが組み込まれた状態としておいてください。
9.4.3. アットマークテクノが提供するイメージを使う

[armadillo ~]# vi /etc/atmark/containers/opencv_example.conf

set_image at-debian-image
set_command sleep infinity
add_devices /dev/dri /dev/galcore
add_devices /dev/mxc_hantro /dev/mxc_hantro_vc8000e
add_devices /dev/ion
add_devices /dev/input 
add_volumes /run/udev:/run/udev:ro
add_volumes /opt/firmware:/opt/firmware:ro
add_volumes /tmp/xdg_home:/run/xdg_home
add_args --env=XDG_RUNTIME_DIR=/run/xdg_home
add_device /dev/video2 *USBカメラのデバイスファイル名がvideo2であるという想定で記載しています。適宜読み替えてください。

confファイル保存
[armadillo ~]# persist_file /etc/atmark/containers/opencv_example.conf

コンテナ起動
[armadillo ~]# podman_start opencv_example

パッケージインストール

コンテナ内にアプリケーション開発・実行に必要なパッケージをインストールします。
PythonとOpenCV以外に、下記をインストールします。

  • GStreamer:マルチメディアフレームワーク
  • v4l-utils:Linuxでメディアデバイスを扱うためのユーティリティー及びライブラリ
  • viエディタ:テキストエディタ(nano等でも代替可能
コンテナ内に入る
[armadillo ~]# podman exec -it opencv_example bash

インストール
[container ~]# apt -y update && apt -y upgrade
[container ~]# apt -y install gstreamer1.0-imx gstreamer1.0-imx-tools \
gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \
v4l-utils python3 python3-pip python3-opencv libopencv-dev vim

インストール確認

インストールされたOpenCVのバージョンと、OpenCVのビデオソースにGStreamerが使用可能であることを確認します。

[container ~]# python3
>>> import cv2

バージョン確認
>>> cv2.__version__
ビデオソースの確認
>>> print(cv2.getBuildInformation())

以下のように表示されることを確認する
Video I/O:
    GStreamer:                   YES (1.18.4)

コンテナイメージの保存

このままだと再起動後インストールした内容が全て消えてしまうので、コンテナへの変更を全て保存します。

イメージの保存
[armadillo ~]# podman commit opencv_example opencv_example

コンテナ自動起動時の参照先イメージの変更

[armadillo ~]# vi /etc/atmark/containers/opencv_example.conf
冒頭の部分を下記のように書き換えます。
set_image opencv_example

confファイル永続化
[armadillo ~]# persist_file /etc/atmark/containers/opencv_example.conf

動作確認

保存したイメージから想定通りにコンテナが作成されることを確認します。
コンテナを起動後に、OpenCVがインストールされていることを確認します。

[armadillo ~]# podman_start opencv_example
[armadillo ~]# podman exec -ti opencv_example bash

[container ~]# python3
>>> import cv2
>>> cv2.__version__