12. ホストプロトコル

すべてのOpenMVカメラには、カメラを名前付きデータチャネルの集合としてホストプログラムに公開するプロトコルスタックが搭載されています。ホストプログラムは、開発者のノートPC上のPythonスクリプト、デスクトップGUI、UARTの反対側にある別のカメラ、あるいはカメラ群を監視するワークステーション上のサービスなど、さまざまなものが考えられます。カメラはどれであるかを気にしません -- 同じフレーミング、同じ信頼性の仕組み、同じチャネルの抽象化が、これらすべてに対して機能します。

これは、カメラプロジェクトがIDEを離れると絶えず浮上する2つの問いに対する答えです。

  • 「カメラが見ているもののライブビューを、自分のノートPC上のカスタムGUIに取り込むにはどうすればよいか?」

  • 「再フラッシュせずに、実行時にオペレーターがしきい値を変更したり関心領域を選択したりできるようにするにはどうすればよいか?」

カメラ側の protocol モジュールと、ホスト側の openmv-python パッケージが、その両方の問いに答えます。カメラ上のPythonクラスがチャネルを公開し、ホスト上のPythonクラスがそこからの読み取り、書き込み、イベントへの反応を、すべて単一のUSBまたはシリアル接続を通じて行えるようにすることで実現します。

ホストPCがUSBでカメラに接続します。カメラは3つの チャネル -- 画像データ用のフレームチャネル、制御値用の コンフィグチャネル、そしてprint用の組み込みstdout チャネル -- を公開し、ホストスクリプトがそれぞれを 読み書きします。

この章では両側を解説します。カメラ側のコードはチャネルの登録と供給の方法を示し、ホスト側のコードは接続、チャネルの一覧表示、データの取得、コマンドの送り返しの方法を示します。openmv-projects/tools/ ディレクトリに含まれる実際のツールは、ここで示すパターンをそのまま使っています。

まとめ