USB ウェブカメラとじゃんけん¶
このチュートリアルを終えると、OV5640 カメラを取り付けた IPRO7AI Reef EVK が、USB-C ポート経由でコンピューターに USB ウェブカメラ(UVC、MJPEG)として認識されます。ドライバーのインストールは不要で、任意のカメラアプリで 1280×720 または 640×360 の映像を見られます。続いて defconfig_reef_rps 構成に切り替えると、ボードが NPU で手の形を認識してあなたとじゃんけんを行い、送信する映像にゲームを描画します。どちらも apps/multimedia/ipro7_uvc_cam アプリケーションの Reef 構成です。
前提条件¶
- IPRO7AI Reef EVK、OV5640 FLEX-24 カメラモジュール、コンピューターと接続する USB-C データケーブル(ボードへの給電と映像の伝送を兼ねます)。
- 書き込みとコンソール用に、U6 に接続した IPRO Debug Probe または 3.3 V USB-UART ケーブル(115200 8N1。配線は IPRO7AI Reef EVK を参照)。
- 最初の FreeRTOS アプリケーションを完了し、開発環境の準備に従って IntelProCube 0.7.0.1 のコマンドライン書き込みツールをインストールしていること。
- USB カメラを開けるアプリ:macOS の QuickTime Player、Windows の「カメラ」アプリ、または Linux の
ffplayなどの V4L2 プログラム。ホストはオペレーティングシステム内蔵の UVC ドライバーを使います。INTELPRO は macOS で動作を確認しています。
手順¶
-
カメラを接続します。 まず USB-C を抜きます。OV5640 モジュールのフレキシブルケーブルを FPC1 に挿し、SW7 が CAM(カメラのピンを IPRO7AI に接続し、カメラの電源をオン)、SW8 が PWR になっていることを確認します。U6 を接続し、最後に USB-C をコンピューターに接続します。
-
ウェブカメラ構成をビルドします。 SDK のルートから次を実行します。
出力は
apps/multimedia/ipro7_uvc_cam/build_reef_ov5640/build_out/ipro7_uvc_cam_IPRO7.binです。DEFCONFIG=を付けずにmakeだけを実行すると別のボード(IPRO7 EVB)向けにビルドされ、Reef では動作しません。 -
書き込みます。 SW1(BOOT)を押したまま SW2(RESET)を短く押し、SW1 を離してダウンロードモードに入ってから、IntelProCube のディレクトリから標準の 2 MB テーブルで書き込みます。
出力に
[All Success]があることを確認してください(このツールは失敗しても終了コード 0 で終了します)。この 2 つの構成はmfgパーティションを使いません。 -
コンソールを開いてリセットします。 U6 のポートを 115200 ボーで開き、SW2 を短く押します。コンソールに次のように表示されます。
-
コンピューターがカメラを認識していることを確認します。 ボードは USB VID/PID
0x3896/0x0701のIPRO7 UVC Camとして現れます。 -
コンピューターで映像を見ます。
- macOS:QuickTime Player を開き、「ファイル」>「新規ムービー収録」を選び、録画ボタンの横のメニューで
IPRO7 UVC Camを選びます。 - Windows:「カメラ」アプリを開き、
IPRO7 UVC Camに切り替えます。 -
Linux:
映像には 2 つのサイズがあり、コンピューター上のアプリがどちらかを選びます。1280×720(情報量の多いシーンでは約 15 fps。USB Full-Speed の帯域による制限)と 640×360(30 fps)です。
- macOS:QuickTime Player を開き、「ファイル」>「新規ムービー収録」を選び、録画ボタンの横のメニューで
-
センサーを調整します(任意)。 コンソールの
camコマンドは、OV5640 のレジスターを直接読み書きでき(レジスターアドレスとデータは 16 進数)、フレームをグリッドに分けた統計も表示できます。300aと300bには OV5640 のチップ ID(0x56、0x40)が入っています。cam wr <reg> <hexbytes>はレジスターに書き込み、cam grid [cols rows]は各セルの Y、U、V の平均をGRIDとGRIDENDの間に表示します。書き込んだ値は、リセット後にデフォルトに戻ります。 -
じゃんけん構成に切り替えます。
defconfig_reef_rpsをビルドし、手順 3 と同じように書き込みます(パスはbuild_reef_rpsにします)。出力は
apps/multimedia/ipro7_uvc_cam/build_reef_rps/build_out/ipro7_uvc_cam_IPRO7.binです。手の形を認識するモデルはファームウェアにリンクされているため、別途書き込むモデルはありません。 -
遊びます。 リセット後、コンピューターで
IPRO7 UVC Camを 640×360 で開きます。上部にスコアバー、下部にメッセージバーがあり、中央の枠が NPU の見ている領域で、認識中の手の形がリアルタイムでラベル表示されます。手を枠の中で静止させると、映像に 3、2、1 とカウントダウンが表示され、ボードがあなたの手を取り込み、自分の手をランダムに選んで、両者の手とスコアを表示します。手が枠から出ると、次のラウンドが始まります。コンソールで
rpsと入力すると、モデルとゲームの状態が表示されます。model : ready, <バイト数> B from <ソース>, loaded in <ミリ秒> ms, <残り> KB heap left npu : <フレーム数> frames, 0 errors, <毎秒の推論回数> fps, last <ミリ秒> ms now : <現在の手> <信頼度>% (r <%> p <%> s <%> n <%>) game : round <ラウンド数>, you <勝ち数> me <負け数> draw <引き分け数>, conf >= 60%, mirror onコマンド 効果 rps go枠内に手が入るのを待たずに、すぐにラウンドを開始します rps resetスコアをリセットします rps mirror on\|off映像を左右反転します(デフォルトはオンで、鏡と同じ向き)。ビューアー側がプレビューを反転する場合(Photo Booth、FaceTime)は offを使いますrps print on\|off分類器の結果をすべてコンソールに表示します rps conf <パーセント>手の形として認める信頼度(デフォルトは 60) rps dumpNPU が見ている 128×128 のフレームを 1 枚、 CAPBEGINとCAPENDの間に base64 で表示します(115200 ボーで約 8 秒)
動作確認¶
- コンソールに
[UVC] Streaming pipeline startedと表示され、コンピューターにIPRO7 UVC Cam(3896:0701)が表示されます。 - ウェブカメラ構成:カメラアプリにライブ映像が表示され、1280×720 と 640×360 を切り替えられます。
- じゃんけん構成:映像にスコアバー、枠、リアルタイムの手の形のラベルが表示されます。枠に手を入れるとカウントダウンが始まり、
rpsのnpu行のフレーム数が増え続けます。
トラブルシューティング¶
| 症状 | 原因 | 対処 |
|---|---|---|
コンピューターに IPRO7 UVC Cam が表示されない |
充電専用の USB-C ケーブルを使っている、または Reef 用ではないビルドを書き込んだ | データ通信対応のケーブルを使います。build_reef_ov5640 または build_reef_rps のファイルを書き込んだことを確認します |
コンソールが Bringing up … で止まる、または映像が黒い |
カメラが正しく挿さっていない、または SW7 が CAM になっていない | USB-C を抜き、カメラケーブルを挿し直し、SW7 を CAM にしてから再度電源を入れます |
| 1280×720 でフレームレートが低い | USB Full-Speed の帯域による。情報量の多いシーンほど MJPEG フレームが大きくなる | 640×360(30 fps)を使います |
| じゃんけんの映像の左右が逆になる | ビューアー側でも映像を反転している | rps mirror off と入力します |
| 枠に手を入れてもカウントダウンが始まらない | 信頼度がしきい値を下回っている、または手が中央からずれている | rps print on で結果を確認します。照明と距離を改善します。rps conf 50 を試します |
書き込みツールで [All Success] が表示されない |
ダウンロードモードになっていない、または --chip-variant IPRO7AI がない |
再度ダウンロードモードに入ります。コマンドを確認します |
次のステップ¶
- IPRO AI Teach:自分の画像で分類器を学習させ、Reef にデプロイします(
ipro_reef_teachの画像モードは同じカメラパイプラインを使います)。 - カメラと画像処理:画像パイプライン、ISP チャネル、対応センサー。
- AI と NPU:NPU 推論とモデル。
- Wi-Fi と RTSP カメラストリーミング:代わりに、カメラ映像を Wi-Fi 経由の RTSP で送信します。