3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Tinker Board でOpenCV+GStreamer

Last updated at Posted at 2022-06-27

#目次
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ビルドと実行

  1. 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


  1. インストール済みのopencv-pythonの情報を確認

    • GStreamer の項目がみごとにNOでした。
    ターミナル
    python3
    
    import cv2
    
    print(cv2.getBuildInformation())
    
    
  2. opencv-pythonをアンインストールします

    
    pip3 uninstall opencv-python
    
    
  3. 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
        
    
  4. 今度は確認するとGStreamerがYESになっていました

  5. 実行してみます

sample.jpg

  • ようやく目的のビデオキャプチャができました

5. おわりに

  • Jetsonやラズパイではこのような苦労をした記憶がなかったのですが、ビルドすればきちんと動作することは分かりました
  • Android11ではMIPIカメラでも難なくアイコンクリックで表示されました
    • 手を加えるスキルが無かったので、深追いはしていません
  • これからTinker Boardを利用される方のお役に立てれば幸いです

2022/9/2 追加

  • ほとんどの方には必要ないかと思いますが、テスト用の簡単なコードをGithubに載せました。
  • 何はともあれ、IMX219以外の動作はちょっと難しいかなぁとは思います。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?