#目次
1.目的
2.基本情報
3.ここでハマった
4.opencvビルドと実行
5.おわりに
1. 目的
- 手持ちのTinker Board 2SでMIPIカメラビデオキャプチャする
- MIPIカメラはメーカ非公認だけど動くと言えば動く
- お仕事がらみで情報収集をする
- TinkerOSの基本的な使い方
- カメラを用いたソリューション事例をつくってみる
- 社内向けでもあるが一般情報なのでこちらで公開します
- せっかく与えられたので動かしたい
2. 基本情報
TinkerBoardについて簡単に確認
-
開封の儀のあとざっくり見てみました
- Jetson Nanoや Raspberry Piのようなシングルボードコンピュータ
- ArmコアCPUにArmのGPU Mali-T860搭載
- ラズパイ互換のIOとかついていて使えるものが結構ありそう
- USB 3.2 Gen 1搭載
- Tinker用ですがAndroid11が使用可能
- TinkerOS(Debian系)も準備されています
-
簡単に手持ち競合製品を比べてみました
- 各製品のCPUなどは各製品のサイトを参照下さい(スイマセン)
- Tinker Board 2 DebianはここではTinkerOSとします(名前が長い)
- 簡易表示はターミナルからコマンドを実行した場合になります
項目/製品 | Tinker Board 2S | Raspberry Pi 4B | Jetson Nano |
---|---|---|---|
OS | TinkerOS | Raspberry Pi OS | JetPack(Ubuntu) |
メモリ | 2GB/4GB | 4GB/8GB | 2GB/4GB |
CSIコネクタ | 有り | 有り | 有り |
ラズパイMIPIカメラ | 表示可能 | 表示可能 | 表示可能 |
Python3 | 3.7.3 | 3.9.2 | 3.6.9 |
V4L | 可能 | 可能 | 可能 |
GStreamer | 可能 | 可能 | 可能 |
簡易表示1 | gst-launch | gst-launch | gst-launch |
簡易表示2 | - | libcamera-〇〇 | nvgstcapture |
補足
-
共通
- テストに使用したMIPIカメラはTinker Boardはカメラメーカとしては非対応です
- カメラはラズパイ、Jetsonで標準で動くIMX219センサのものを使用しました
-
Raspberry Pi 4B
- OSはbullseyeを使用しています
- ターミナルコマンドは拙作のページまたは公式・上級者のいいサイトをご覧ください
-
Jetson Nano
- OSはJetPack4.6を使用しています
- ターミナルコマンドは拙作のページまたは公式・上級者のいいサイトをご覧ください
3. ここでハマった
- pythonで簡単なコードを実行・・・?動かない
失敗の原因と模索
-
opencv-pythonをインストール
- 開発用のUbuntuは基本的にこのコマンドでやっていました
- PCなので、そこまで深く考えていませんでした…
-
24時間ダイヤルに電話(中国)
- 購入証明をといわれて準備していなかった・・・ので話にならず
-
テクニカルサポートのアドバイス
- GStreamerのパイプラインの間違い指摘がありました (autovideosink-->appsink)
- その後、追加のアドバイスが無かったので、自己解決した旨伝えようと思います
-
テクニカルサポートに提供したコード
import cv2
src = "gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! videoconvert ! autovideosink"
# autovideosinkがpythonコードないではappsink
cap=cv2.VideoCapture(src, cv2.CAP_GSTREAMER)
while cap.isOpened():
ret, frame_read = cap.read()
cv2.imshow('Read',frame_read)
cv2.waitKey(30)
cap.release()
インフォメーション
- 上記項目では3コアまでで、4コア指定だと落ちると書きましたが、どうも尼のマーケットプレイスから来たこの製品のACが容量不足(12V2A)だった製の模様。
- 公式では19Vの45Wまで対応なので口の合うノートPCのアダプタ接続でまともに使える様になりました。
関連ライブラリインストール(22/12/23追記)
ターミナル
sudo apt install gstreamer1.0-omx gstreamer1.0-tools gstreamer1.0-plugins-*
sudo apt install libatlas-base-dev
sudo apt install libjasper-dev
- V4lがなければ・・・
ターミナル
sudo apt install v4l-utils
4. opencvビルドと実行
- GStreamerのインストール(インストールしていない場合)
ターミナル
sudo apt-get install libx264-dev libjpeg-dev
sudo apt-get install libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer-plugins-bad1.0-dev \
gstreamer1.0-plugins-ugly \
gstreamer1.0-tools \
gstreamer1.0-gl \
gstreamer1.0-gtk3
sudo apt-get install gstreamer1.0-qt5
sudo apt-get install gstreamer1.0-pulseaudio
-
インストール済みのopencv-pythonの情報を確認
- GStreamer の項目がみごとにNOでした。
ターミナルpython3 import cv2 print(cv2.getBuildInformation())
-
opencv-pythonをアンインストールします
pip3 uninstall opencv-python
-
opencv をGitHubよりクローンして、ビルドしていきます
ターミナル#解凍するフォルダを選んでおくなどしておきます #私はDownloadフォルダで実行しました git clone https://github.com/opencv/opencv.git #ダウンロード方法によってはフォルダ名が異なる場合もあります cd opencv mkdir build && cd build #設定項目は一例です。必要な記載をしてください cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D WITH_GTK=ON -D WITH_GSTREAMER=ON -D WITH_FFMPEG=OFF -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON .. #4コア以上で実行するとどうしても途中で落ちてしまうので以下の設定で行いました make -j3 #2時間以上放置・・・ #完了後にインストール sudo make install
-
今度は確認するとGStreamerがYESになっていました
-
実行してみます
- ようやく目的のビデオキャプチャができました
5. おわりに
- Jetsonやラズパイではこのような苦労をした記憶がなかったのですが、ビルドすればきちんと動作することは分かりました
- Android11ではMIPIカメラでも難なくアイコンクリックで表示されました
- 手を加えるスキルが無かったので、深追いはしていません
- これからTinker Boardを利用される方のお役に立てれば幸いです
2022/9/2 追加
- ほとんどの方には必要ないかと思いますが、テスト用の簡単なコードをGithubに載せました。
- 何はともあれ、IMX219以外の動作はちょっと難しいかなぁとは思います。