Luckfox Pico Maxでのカメラ動作テストとストリーミング方法

Luckfox Pico MaxはSC3336 3MPカメラ(A)に対応しています。このカメラは思特威SC3336センサーチップを採用し、300万画素をサポートしています。高感度、高S/N比、低照度性能を備え、より繊細で色彩がリアルな夜間カラー撮影を可能にし、環境光の変化に適応します。現在のストリーミング機能はBuildrootシステムでのみ利用可能です。

1. カメラの確認

  1. まずカメラを接続し、接続が正常であることを確認してから電源を投入してください。システムは自動的にカメラを認識します。配線は逆接続しないように注意してください。
  2. LuckFox PicoMax開発ボードにカメラを接続する際は、カメラのフレキシブルケーブルの金属面が開発ボードのチップに向かうようにしてください。

  3. カメラを確認します。カメラが正常に認識されると、rkipc.iniファイルが生成されます。
  4. デバイスのIPアドレスを取得します。
  5. Luckfox Pico MaxのデフォルトIPアドレスは172.32.0.93、イーサネットポートのIPアドレスは10.230.149.130です。

2. RNDIS仮想ネットワークインターフェースの設定

RNDISはRemote Network Driver Interface Specificationの略で、実際の機能はTCP/IP over USB、つまりUSBデバイス(例:スマートフォン)をネットワークカードとして扱うことです。USB経由でRNDISを実現することは、実質的にTCP/IP over USBであり、WindowsがUSBデバイスを経由してネットワークに接続できるようにします。

TCP/IPプロトコルスイートは、その名の通り、その最初の二つの主要なプロトコルであるTCP(Transmission Control Protocol、伝送制御プロトコル)とIP(Internet Protocol、インターネットプロトコル)に由来します。デバイスがネットワークに接続する方法とデータが伝送される標準を規定しています。

RV1106プラットフォームはRNDIS機能をサポートしており、デフォルトで有効になっています。モジュールがネットワークに接続できる限り、通常はモジュールをコンピュータ(Windows、Linux)に接続するだけで、コンピュータはネットワークカードとして認識し、pppダイヤルのような複雑なプロセスを経ることなくネットワークにアクセスできます。

  1. Windowsのセキュリティセンター→ファイアウォールとネットワーク保護→ファイアウォールを無効にします。
  2. RNDISネットワークカードの静的IPを設定します。設定→高度なネットワーク設定→アダプターのオプションの変更。
  3. ネットワークカードは通常「Remote NDIS based Internet Sharing Device」のような名前です。右クリックしてプロパティを開きます。
  4. 「インターネット プロトコル バージョン4 (TCP/IPv4)」をダブルクリックし、IPv4アドレスを172.32.0.100に設定して、デバイスとの競合を避けます。

3. VLCメディアプレーヤーでのストリーミング

  1. VLCメディアプレーヤーをダウンロードしてインストールします。
  2. VLCメディアプレーヤーを開き、メディア→ネットワークストリームを開く。
  3. デフォルトのIPアドレスを入力します:rtsp://172.32.0.93/live/0
  4. eth0のIPアドレスを使用してストリーミングすることもできます:rtsp://10.230.149.130/live/0
  5. 再生をクリックすると、カメラの映像が表示されます。レンズを回転させてフォーカスを調整できます。

4. V4L2-utilsツールのインストール

V4L2-utilsは、V4L2デバイスをテストおよび設定するためのユーティリティセットです。これらはコマンドラインインターフェースを通じてV4L2インターフェースへのアクセスを提供します。Luckfox SDKのBuildrootパッケージにはすでにv4l2-utilsソフトウェアパッケージが含まれていますが、手動で有効にする必要があります。/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6に移動し、make menuconfigと入力してBuildrootのグラフィカルメニューオプションに入ります(**注意:ダウンロードしたソースコードを一度コンパイルしないと/buildroot-2023.02.6は作成されません**)。

BuildrootディレクトリにV4L2を追加し、「libv4l2」で検索します。

以下のパスに従ってV4L2-utilsツールを有効にします。

libv4lとv4l-utils toolsの両方を選択し、必ず保存してから終了し、続行してください。

make ARCH=arm savedefconfig
cp .config ./configs/luckfox_pico_defconfig

その後、再コンパイルします。コンパイルが完了すると、/luckfox-pico/outputにコンパイルされた成果物が生成されます。

output/
├── image
│   ├── download.bin ---------------- デバイス側プログラムをアップグレードするためのツール、ボードのメモリにのみダウンロード
│   ├── env.img --------------------- パーティションテーブルとブートパラメータを含む
│   ├── uboot.img ------------------- u-bootイメージ
│   ├── idblock.img ----------------- loaderイメージ
│   ├── boot.img -------------------- カーネルイメージ
│   ├── rootfs.img ------------------ ルートファイルシステムイメージ
│   └── userdata.img ---------------- userdataイメージ
└── out
    ├── app_out --------------------- 参考アプリケーションのコンパイル後ファイル
    ├── media_out ------------------- メディア関連のコンパイル後ファイル
    ├── rootfs_xxx ------------------ ファイルシステムのパッケージディレクトリ
    ├── S20linkmount ---------------- パーティションマウントスクリプト
    ├── sysdrv_out ------------------ sysdrvのコンパイル後ファイル
    └── userdata -------------------- userdata

システムイメージを開発ボードに書き込みます。

5. v4l2-ctlの使用

  1. カメラデバイスを一覧表示します。
  2. # v4l2-ctl --list-devices
    rkisp-statistics (platform: rkisp):
            /dev/video19
            /dev/video20
    
    rkcif-mipi-lvds (platform:rkcif):
            /dev/media0
    
    rkcif (platform:rkcif-mipi-lvds):
            /dev/video0
            /dev/video1
            /dev/video2
            /dev/video3
            /dev/video4
            /dev/video5
            /dev/video6
            /dev/video7
            /dev/video8
            /dev/video9
            /dev/video10
    
    rkisp_mainpath (platform:rkisp-vir0):
            /dev/video11
            /dev/video12
            /dev/video13
            /dev/video14
            /dev/video15
            /dev/video16
            /dev/video17
            /dev/video18
            /dev/media1
    

    - rkisp_mainpath:CSIカメラ

  3. カメラがサポートするフォーマットを一覧表示します。
  4. # v4l2-ctl --device=/dev/video88 --list-formats-ext
    ioctl: VIDIOC_ENUM_FMT
            Type: Video Capture Multiplanar
    
            [0]: 'UYVY' (UYVY 4:2:2)
                    Size: Stepwise 32x16 - 2304x1296 with step 8/8
            [1]: 'NV16' (Y/CbCr 4:2:2)
                    Size: Stepwise 32x16 - 2304x1296 with step 8/8
            [2]: 'NV61' (Y/CrCb 4:2:2)
                    Size: Stepwise 32x16 - 2304x1296 with step 8/8
            [3]: 'NV21' (Y/CrCb 4:2:0)
                    Size: Stepwise 32x16 - 2304x1296 with step 8/8
            [4]: 'NV12' (Y/CbCr 4:2:0)
                    Size: Stepwise 32x16 - 2304x1296 with step 8/8
            [5]: 'NM21' (Y/CrCb 4:2:0 (N-C))
                    Size: Stepwise 32x16 - 2304x1296 with step 8/8
            [6]: 'NM12' (Y/CbCr 4:2:0 (N-C))
                    Size: Stepwise 32x16 - 2304x1296 with step 8/8
    
  5. カメラのパラメータを表示します。
  6. # v4l2-ctl --device=/dev/video88 --list-ctrls
    
    Image Processing Controls
    
                         pixel_rate 0x009f0902 (int64)  : min=0 max=1000000000 step=1 default=1000000000 value=101250000 flags=read-only, volatile
    
  7. 動画を録画します。
  8. # RKIPCを停止(事前に組み込みのRKIPCを終了する必要があります)
    killall rkipc
    v4l2-ctl --device=/dev/video88 --set-fmt-video=width=1920,height=1080,pixelformat=NV12 --stream-mmap --stream-to=capture.yuv --stream-count=100
    

    - --device:カメラに対応するデバイスファイル

    - --set-fmt-video:幅、高さ、およびピクセルフォーマットを指定します。

    - --stream-mmap:バッファタイプをmmap(カーネルによって割り当てられた物理的に連続した、またはiommuによってマッピングされたバッファ)に指定します。

    - --stream-to:フレームデータを保存するファイルパスを指定します。

    - --stream-count:キャプチャするフレーム数を指定します(--stream-skipで破棄された数は含みません)。

  9. 「The pixelformat 'UYVY' is invalid」と表示された場合は、カメラがこのフォーマットをサポートしていないことを意味します。2番目の方法を使用して、カメラがサポートするフォーマットを確認してください。
  10. 「<<<<<<<<<<<<<<<<<<<<<<<<<<<< 25.00 fps」と表示されれば、動画の録画に成功したことを意味し、capture.yuvという動画ファイルが正常に生成されます。
  11. # killall rkipc
    # v4l2-ctl --device=/dev/video88 --set-fmt-video=width=1920,height=1080,pixelformat=NV12 --stream-mmap --stream-to=capture.yuv --stream-count=100
    <<<<<<<<<<<<<<<<<<<<<<<<<< 25.00 fps
    <<<<<<<<<<<<<<<<<<<<<<<<<< 25.00 fps
    <<<<<<<<
    # ls
    bin            lib32          oem            run            usr
    data           lib64          opt            sbin           var
    dev            linuxrc        proc           sys            capture.yuv
    etc            media          rockchip_test  tmp
    lib            mnt            root           userdata
    

6. 動画の表示

上記でキャプチャした画像や動画は、Ubuntuにコピーしてffplayツールで表示できます。ffplayはFFmpegツールセットのうちのコマンドラインツールで、オーディオとビデオファイルを再生するために使用されます。FFmpegライブラリに基づいており、広範な音声・動画フォーマットをサポートし、コマンドラインでリアルタイムに再生またはプレビューすることができます。

まず、仮想マシンと開発ボードを同じネットワークセグメントに接続する必要があります。

筆者の仮想マシンのIPアドレスは192.168.10.100であるため、開発ボードのIPアドレスは192.168.10.x(例:192.168.10.200)に設定します。

rootディレクトリに入り、仮想マシンのディレクトリとNFSマウントするためのフォルダを作成し、生成されたcapture.yuvファイルを仮想マシンのマウントディレクトリにコピーします。

  1. 動画を再生します。
  2. ffplay -video_size 1920x1080 -pixel_format nv12 -framerate 30 -i capture.yuv
    

    - -video_size size:フレームサイズを設定します。

    - -pixel_format format:ピクセルフォーマットを設定します。

    - -framerate 30:動画のフレームレートを30フレーム/秒に設定します。

  3. 動画フォーマットを変換します。
  4. ffmpeg -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -framerate 30 -i capture.yuv -c:v libx264 output.mp4
    

    MP4形式を生成し、mpvコマンドで再生します。

    mpv output.mp4
    

タグ: Luckfox Pico Max SC3336 v4l2 RNDIS RTSP

6月26日 21:11 投稿