C++ベースのreCameraを使用したリアルタイムYOLOオブジェクト検出
このドキュメントでは、reCameraターミナルでクロスコンパイルに基づいてC++を使用し、リアルタイム写真撮影、YOLOオブジェクト検出、およびHTTPによる結果アクセスを実装する方法を説明します。このアプローチにより、reCameraでNode-REDを使用する際に発生する過熱問題を回避できます。このドキュメントを参考にして、カスタマイズされたコンピュータビジョンアプリケーション用にC++コードを変更することができます。
環境準備
プリコンパイル
まず、「C/C++での開発」ドキュメントを参照して、Linuxでクロスコンパイル環境を設定する必要があります。 注意: 各起動後にパスを再設定してください:
export SG200X_SDK_PATH=$HOME/recamera/sg2002_recamera_emmc/
export PATH=$HOME/recamera/host-tools/gcc/riscv64-linux-musl-x86_64/bin:$PATH
その後、Realtime_detection_http プロジェクトをダウンロードし、コンパイルしてください。
cd Realtime_detection_http/
mkdir build && cd build
cmake ..
make
ビルドディレクトリに緑色の実行可能ファイル Realtime_detection_http が存在することは、コンパイルが成功したことを示しています:

次に、reCameraターミナルを開き、実行可能ファイルをreCameraターミナルディレクトリにコピーします。
sudo scp Realtime_detection_http [email protected]:/home/recamera/
reCamera の準備
1.On Device Models からデプロイされた YOLOv11 をダウンロードし、モデルの .cvimodel ファイルを reCamera ターミナルの /home/recamera/ にコピーします。 2.コードを実行する前に、メモリ消費を防ぐため、reCamera workspace にアクセスしてプロセスを終了してください(Develop with c/c++ を参照)。 3.次に /etc/init.d/ に移動し、S93sscma-supervisor と S91sscma-node の両方のフォルダを /home/recamera/ または他の場所にバックアップ用にコピーし、メモリ消費とプログラムの占有を防ぐため、元の S93sscma-supervisor と S91sscma-node フォルダを削除します。
cd /etc/init.d/
sudo scp S93sscma-supervisor /home/recamera/
sudo scp S91sscma-node /home/recamera/
sudo rm -r S93sscma-supervisor
sudo rm -r S91sscma-node
プログラムの実行
reCamera ターミナルの /home/recamera/ で管理者としてプログラムを実行します:
sudo ./Realtime_detection_http
結果
ターミナルには以下が表示され、プログラムが正常に動作していることを示しています:

WebブラウザまたはPostmanを使用してhttp://192.168.42.1/modeldetectorにアクセスできます。reCameraは即座に写真を撮影し、YOLOv11によって検出されたオブジェクトを返します。 ブラウザ:

Postman:

返される情報には以下のデータが含まれます:
- Code:1(実行中)
- Msg:エラーメッセージ
- Initialize_camera_duration:カメラ初期化時間は初回アクセス時のみ表示されます。
- Initialize_model_duration:モデル初期化時間は初回アクセス時のみ表示されます。
- Data:
- Score:検出信頼度スコア(0-1)
- Target:検出されたオブジェクトの名前
- Box:[x1, y1, x2, y2]:検出ボックス座標([左、上、右、下]の端を表すピクセル)
- Center:[x, y]:検出ボックスの正規化された中心位置(画像の幅/高さに対する比率)
- Size:[w, h]:検出ボックスの正規化された幅と高さ(画像寸法に対する比率)
- Release_duration:カメラキャッシュをクリアするのにかかった時間(ms)
- Capture_duration:画像取得時間(ms)
- Image_preprocessing_duration:推論前の画像準備時間(ms)
- Detection_duration:モデル検出時間(ms)(前処理、推論、後処理を含む)
- Duration:プログラム全体の実行時間(ms)
- Timestamp:Unixタイムスタンプ
ターミナルには以下が表示されます:
- カメラ初期化パラメータ:
- 解像度:1920×1080
- フレームレート:5 fps
- キャプチャチャンネル:チャンネル2
- キャプチャされた画像サイズ(例:Jpeg size: 216149 (pixels))
- 異なるステップでのメモリ使用量(MB):
- キャプチャ前(Memory usage)
- 解放中(Memory usage_during_)
- キャプチャ後(Memory usage_after)
- 画像前処理後(Memory usage_before_model)
- モデル検出後(Memory usage_after_model)
- モデル検出時間(ms)
- 前処理(例:pre: 9ms)
- 推論(例:infer: 40ms)
- 後処理(例:post:395ms)


reCameraターミナルでは、検出された画像を自動的に保存できます:

デバイスで継続的にアクセスして、インテリジェントセキュリティや監視などのアプリケーション向けのリアルタイム検出結果を取得できます。
registerModelDetector()(Realtime_detection_http/src/http.cpp)とmodel_detector()(Realtime_detection_http/src/model_detector.cpp)で返されるメッセージの形式を変更できます。 **registerModelDetector()でinitialize_model(const std::string& model_path)**を呼び出す際に独自にデプロイしたモデルを使用することもでき、initialize_camera()(Realtime_detection_http/src/model_detector.cpp)でカメラ初期化設定を変更できます:

検出後、Ctrl+Cを押して操作を終了できます。プログラムはカメラを停止します。

詳細については、GitHubリポジトリをご参照ください。
技術サポート & 製品ディスカッション
弊社製品をお選びいただき、ありがとうございます!お客様の製品体験を可能な限りスムーズにするため、さまざまなサポートを提供いたします。異なる好みやニーズに対応するため、複数のコミュニケーションチャネルをご用意しています。