13.3.1.1. openmv CLI

パッケージをインストールすると、USB経由でカメラに接続する pygame ビューアを開く openmv 実行ファイルが追加されます。シリアルポート以降に引数を渡さない場合、小さな組み込みテストスクリプトを実行し、得られたフレームバッファをストリーミングで返し、スケーリングして現在のフレームレートを注記したうえで表示します:

openmv --port /dev/ttyACM0

ポートのパスはホストのプラットフォームによって異なります。Linux では USB CDC が /dev/ttyACMx、USB-UART ブリッジが /dev/ttyUSBx です。macOS では /dev/tty.usbmodem... または /dev/cu.usbmodem... です。Windows では COMx です。

このビューアは、パッケージがインストールされているか、カメラに到達できるか、プロトコルが動作しているかを確認するための最も手早い方法です。また、スクリプト開発中の便利なデモ環境にもなります。組み込みテストスクリプトを --script で任意の MicroPython ファイルに差し替えれば、ターミナルから離れることなく結果を確認できます。

ターミナルでの EscCtrl+C、またはビューアウィンドウを閉じる操作のいずれでも、クリーンに終了します。

13.3.1.1.1. カスタムスクリプトの実行

--script は、ディスク上の MicroPython ソースファイルを CLI に指定します。そのファイルがカメラにアップロードされ、組み込みテストスクリプトの代わりに実行され、生成されたフレームがビューアにストリーミングで返されます:

openmv --port /dev/ttyACM0 --script my_script.py

スクリプトが stdout に出力する内容はすべて、リアルタイムでホストのターミナルにミラーリングされます。これを抑制するには --quiet を、詳細なプロトコルログを出力するには --debug を渡します。

13.3.1.1.2. カスタムチャンネルのプレビュー

--channel NAME は、実行中のカメラ側スクリプトが登録したカスタムデータチャンネルをポーリングし、各更新の先頭10バイトをターミナルに出力します:

openmv --port /dev/ttyACM0 --channel ticks

--script を指定しない場合に実行される組み込みテストスクリプトは、カメラのミリ秒単位の稼働時間を返す ticks チャンネルを登録します。そのため --channel ticks は、カスタムチャンネル で詳しく説明している双方向チャンネルの仕組みを、ホスト側でもカメラ側でも自分でコードを書くことなく実演します。

13.3.1.1.3. ベンチマークモード

--bench は、標準のテストスクリプトを JPEG 圧縮スループットのベンチマークに差し替えます:

openmv --port /dev/ttyACM0 --bench

カメラは RGB565 QVGA フレームを1枚キャプチャし、それを JPEG に圧縮したうえで、同じ圧縮済みバッファをタイトなループで送り出し続けます。ビューアはライブでデコードされたフレームではなく、生の USB データレートを報告するため、画面に表示される数値はそのホストに対してリンクが維持できる上限値です。実際にキャプチャしている内容を変えることによる変動なしに、カメラ同士やホスト同士を比較するのに役立ちます。

13.3.1.1.4. プロファイリング

CLI はストリーミングされるフレーム上にライブのプロファイラデータをオーバーレイできます。このオーバーレイは、カメラが profile チャンネルを登録した PROFILE_ENABLE=1 のファームウェアビルドを実行している場合にのみ有用です。標準ファームウェアではプロファイリングの操作は効果がありません。

  • --firmware PATH -- カメラが実行しているファームウェアの ELF を読み込み、オーバーレイがプロファイルレコード内の関数アドレスを人間が読める名前に解決できるようにします。これがない場合、オーバーレイは生のアドレスを表示します。

ビューア内の3つのキーボードショートカットがプロファイラを操作します。

キー

動作

P

プロファイラオーバーレイを切り替えます。オフ、パフォーマンス、イベントの順です。

M

プロファイラのモードを inclusive(包括)と exclusive(排他)の間で切り替えます。包括的タイミングは呼び出された側の時間を呼び出し元に計上します。排他的タイミングは計上しません。

R

プロファイラのカウンタをリセットします。

13.3.1.1.5. プロトコル調整フラグ

以下のフラグは openmv.Camera のコンストラクタパラメータに対応しています。デフォルト値は出荷されるすべてのカメラで動作します。カスタムファームウェアビルドのデバッグや、不利なリンク条件のシミュレーションを行う場合にのみ上書きしてください。

  • --baudrate N -- デフォルトは 921600 です(USB を OpenMV プロトコルに切り替えるマジックナンバー)。UART リンクの場合にのみ上書きしてください。

  • --timeout SEC -- 操作ごとのタイムアウトを秒単位で指定します(デフォルトは 1.0)。

  • --max-retry N -- リンクが切断されたと判断されるまでのリトライ回数です(デフォルトは 3)。

  • --max-payload N -- 最大ペイロードサイズをバイト単位で指定します(デフォルトは 4096)。カメラがそれだけのサイズを処理できない場合は、ネゴシエーションで下方修正されます。

  • --crc BOOL -- すべてのパケットで CRC 検証を有効にします(デフォルトは true)。

  • --seq BOOL -- シーケンス番号の検証を有効にします(デフォルトは true)。

  • --ack BOOL -- パケットごとの確認応答を有効にします(デフォルトは true)。

  • --events BOOL -- カメラからのイベント通知を有効にします(デフォルトは true)。

  • --drop-rate FLOAT -- [0.0, 1.0] の範囲でパケットドロップのシミュレーションレートを指定します(デフォルトは 0.0)。テスト専用です。

CLI 固有の調整ノブが1つあります。

  • --poll MS -- ビューアのメインループのポーリングレートをミリ秒単位で指定します(デフォルトは 4)。

13.3.1.1.6. その他のフラグ

2つのフラグは、カメラ側の動作を変えることなく、ビューアがストリームを表示する方法を調整します。

  • --scale N -- 表示のズーム倍率です(デフォルトは 4)。QVGA フレームが 4K ディスプレイで小さすぎて読み取れない場合に役立ちます。

  • --raw -- カメラに対し、JPEG 圧縮ではなく非圧縮のピクセルバッファを送るよう要求します。ハードウェア JPEG 対応のないカメラで役立ちます。トレードオフについては フレームのストリーミング で説明しています。

13.3.1.1.7. ビューアが行っていること

CLI 自体が openmv.Camera を使ったプログラムです。接続し、stop() を呼び出して実行中のスクリプトをクリアし、exec() でスクリプトをアップロードし、streaming() でストリーミングを有効にしたうえで、read_frame()(表示の更新)、read_stdout()(スクリプトの出力のミラーリング)、read_status()(登録された他のすべてのチャンネルのアクティビティの監視)を呼び出すループを回します。ソースは cli.py にあり、カメラをエンドツーエンドで駆動するアプリケーションの実用的なリファレンスになっています。