Luckfox Pico MaxはSC3336 3MPカメラ(A)に対応しています。このカメラは思特威SC3336センサーチップを採用し、300万画素をサポートしています。高感度、高S/N比、低照度性能を備え、より繊細で色彩がリアルな夜間カラー撮影を可能にし、環境光の変化に適応します。現在のストリーミング機能はBuildrootシステムでのみ利用可能です。
1. カメラの確認
- まずカメラを接続し、接続が正常であることを確認してから電源を投入してください。システムは自動的にカメラを認識します。配線は逆接続しないように注意してください。
- カメラを確認します。カメラが正常に認識されると、
rkipc.iniファイルが生成されます。 - デバイスのIPアドレスを取得します。
LuckFox PicoMax開発ボードにカメラを接続する際は、カメラのフレキシブルケーブルの金属面が開発ボードのチップに向かうようにしてください。
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ダイヤルのような複雑なプロセスを経ることなくネットワークにアクセスできます。
- Windowsのセキュリティセンター→ファイアウォールとネットワーク保護→ファイアウォールを無効にします。
- RNDISネットワークカードの静的IPを設定します。設定→高度なネットワーク設定→アダプターのオプションの変更。
- ネットワークカードは通常「Remote NDIS based Internet Sharing Device」のような名前です。右クリックしてプロパティを開きます。
- 「インターネット プロトコル バージョン4 (TCP/IPv4)」をダブルクリックし、IPv4アドレスを172.32.0.100に設定して、デバイスとの競合を避けます。
3. VLCメディアプレーヤーでのストリーミング
- VLCメディアプレーヤーをダウンロードしてインストールします。
- VLCメディアプレーヤーを開き、メディア→ネットワークストリームを開く。
- デフォルトのIPアドレスを入力します:rtsp://172.32.0.93/live/0
- eth0のIPアドレスを使用してストリーミングすることもできます:rtsp://10.230.149.130/live/0
- 再生をクリックすると、カメラの映像が表示されます。レンズを回転させてフォーカスを調整できます。
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の使用
- カメラデバイスを一覧表示します。
- カメラがサポートするフォーマットを一覧表示します。
- カメラのパラメータを表示します。
- 動画を録画します。
- 「The pixelformat 'UYVY' is invalid」と表示された場合は、カメラがこのフォーマットをサポートしていないことを意味します。2番目の方法を使用して、カメラがサポートするフォーマットを確認してください。
- 「<<<<<<<<<<<<<<<<<<<<<<<<<<<< 25.00 fps」と表示されれば、動画の録画に成功したことを意味し、
capture.yuvという動画ファイルが正常に生成されます。
# 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カメラ
# 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
# 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
# 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で破棄された数は含みません)。
# 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ファイルを仮想マシンのマウントディレクトリにコピーします。
- 動画を再生します。
- 動画フォーマットを変換します。
ffplay -video_size 1920x1080 -pixel_format nv12 -framerate 30 -i capture.yuv
- -video_size size:フレームサイズを設定します。
- -pixel_format format:ピクセルフォーマットを設定します。
- -framerate 30:動画のフレームレートを30フレーム/秒に設定します。
ffmpeg -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -framerate 30 -i capture.yuv -c:v libx264 output.mp4
MP4形式を生成し、mpvコマンドで再生します。
mpv output.mp4