physicalai-runtime-adding-a-camera-backend について
physicalai にカメラバックエンドを追加するための開発スキルです。実装、ファクトリーへの登録、デバイス検出、オプション依存関係、テストの手順を案内します。
主な機能
- 01Camera インターフェースの実装
- 02ファクトリーへの登録
- 03デバイス検出の設定
- 04ベンダー SDK の任意依存化
- 05ユニットテストの手順
活用シーン
- 01新しいカメラハードウェアへの対応
- 02physicalai へのバックエンド登録
- 03実機なしでのカメラコードのテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ openvinotoolkit/ physicalai --skill physicalai-runtime-adding-a-camera-backendインストール後、Claude Code で/physicalai-runtime-adding-a-camera-backendを入力して読み込まれたか確認します。
詳細
カメラバックエンドの追加
カメラは、src/physicalai/capture/camera.py の Camera インターフェースを実装します。ファクトリーのエントリーポイントである src/physicalai/capture/factory.py の create_camera() は、小文字のタイプ名(uvc、realsense、basler、…)を各実装に対応付けます。参考となる構成は、src/physicalai/capture/cameras/uvc/、src/physicalai/capture/cameras/realsense/、src/physicalai/capture/cameras/basler/ です。
ワークフロー
- 参考にするバックエンドを選ぶ:新しいハードウェアに最も近いものを選びます(USB ビデオなら UVC、RGB-D なら RealSense、GenICam 産業用なら Basler)。
- 完了条件:参考にするモジュール(
_camera.py、_discover.py、__init__.pyのエクスポート)を一覧にできます。
- 完了条件:参考にするモジュール(
Cameraを実装する:connect()、disconnect()、read()/read_latest()、コンテキストマネージャーのサポート、Frameの単調増加タイムスタンプ(src/physicalai/capture/frame.py)を実装します。- 完了条件:フェイクまたはモックしたデバイスのテストで、ハードウェアなしに接続と読み取りを実行できます。
- デバイスを列挙できる場合は、検出機能を接続します。
src/physicalai/capture/discovery.pyまたはバックエンド固有の_discover.pyにヘルパーを追加します。 src/physicalai/capture/factory.pyにタイプを登録し、ユーザー向けの場合は公開クラスをsrc/physicalai/capture/__init__.pyからエクスポートします。- ベンダー SDK を使う場合は、
pyproject.tomlにオプションの追加依存関係を設定します。pip install physicalaiのインストールを軽量に保つため、カメラモジュール内で遅延インポートします。- 完了条件:追加依存関係なしで
import physicalai.captureが動作し、追加依存関係が不足している場合にカメラクラスをインポートすると、明確なメッセージが表示されます。
- 完了条件:追加依存関係なしで
- 既存のフェイクを使って、
tests/unit/capture/にテストを追加します(tests/unit/capture/fake.py、conftest.pyのパターンを参照)。- 完了条件:
uv run pytest tests/unit/capture -k <backend>が成功します。
- 完了条件:
共有トランスポート
複数プロセスからアクセスする場合、create_camera(..., shared=True) は SharedCamera(physicalai[capture] / transport 追加依存関係、iceoryx2)でラップします。共有モードについて記載するのは、transport 追加依存関係がインストールされている場合に限ります。
必須のチェック
- ユーザー向けの場合、
CameraTypeまたはファクトリー文字列がdocs/reference/camera-api.mdに記載されていること。 - フレームの形状と dtype が README の例(RGB
(H, W, 3))と一致していること。 - インポート時にブロッキングを伴う検出処理が行われないこと。
検証
uv run pytest tests/unit/capture -q
prek run --all-files
コメント
Markdown 対応