Skip to main content

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-supervisorS91sscma-node の両方のフォルダを /home/recamera/ または他の場所にバックアップ用にコピーし、メモリ消費とプログラムの占有を防ぐため、元の S93sscma-supervisorS91sscma-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リポジトリをご参照ください。


技術サポート & 製品ディスカッション

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

Loading Comments...