RK3576 / RKNN / YOLO に基づく卵カウントとひび検出システム

ソースコード: https://github.com/doublelf/Egg_Counting_and_Damage_Detection
reComputer RK3576 に基づく卵カウントとひび検出は、Conveyor/ オーケストレーターによってコンベア品質検査パイプラインに統合されます: 各フレームでカウントモデルとひびモデルが同時に実行され、IoU アソシエーターが「ライン通過イベント」と「ひび検出」を対応付け、最終的に各卵に対して cracked / dirty / intact の判定を下します。
- カウント:
Automated-Egg-Counting-System/由来、シングルクラス物体検出 + セントロイドトラッキング + ライン通過カウント。 - ひび検出:
crack_inspect/由来。デフォルトでは古典的な CV パイプライン(CLAHE → ブラックハット → 適応的しきい値処理 → 連結成分)を採用し、追加の重みを必要としません。--inspector-mode yoloで YOLOv8-seg モデルに切り替え可能。 - オーケストレーション:
Conveyor/src/egg_pipeline/が両者を連結し、CSV / JSON / 任意の注釈動画を出力します。
クイックスタート
1. リポジトリのクローン
git clone https://github.com/doublelf/Egg_Counting_and_Damage_Detection
cd Egg_Counting_and_Damage_Detection2. 仮想環境の作成と依存関係のインストール
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt3. 推論の実行
カウントしきい値はライン通過統計を安定させるために非常に高く(--conf-counter 0.99)設定されています。ひびしきい値はデフォルト(--conf-inspector 0.25)のままです。モデル間の関連付けしきい値は、両モデルのバウンディングボックスの微妙な位置ずれを許容するため、--associate-iou 0.1 に緩めています。
cd Conveyor
python run.py --video ./video2.mp4 --conf-counter 0.99 --conf-inspector 0.25 --associate-iou 0.1まず
cd Conveyorを行う必要があります:run.pyはデフォルトでconfig.yamlからモデルを読み込み、相対パスはConveyor/を基準に解決されます。
パラメータ一覧
| パラメータ | デフォルト | 説明 |
|---|---|---|
--video PATH | — | ローカル動画ファイルのパス(--webcam と相互排他) |
--webcam [INDEX] | — | Web カメラを使用。値を指定しない場合は 0 に解決。--webcam 1 で明示的にインデックス 1 を指定 |
--source STR | — | video.source を直接上書き(数字文字列は Web カメラインデックス、それ以外の文字列はファイルパスとして扱う) |
--counter-weights PATH | — | カウントモデルの重みパス(YOLOv5) |
--inspector-weights PATH | カウントと同じ | ひびモデルの重みパス。mode=classical の場合は無視 |
--inspector-mode | classical | auto / yolo / classical; デフォルトは古典 CV パイプラインで追加の重みは不要 |
--conf-counter FLOAT | 0.35 | カウントモデルの信頼度しきい値 |
--conf-inspector FLOAT | 0.25 | ひびモデルの信頼度しきい値 |
--associate-iou FLOAT | 0.3 | カウントボックスとひびボックスを関連付ける最小 IoU。これ未満の場合は卵を unknown として記録 |
--line-start X Y | [100, 240] | ライン通過開始点(ピクセル座標) |
--line-end X Y | [540, 240] | ライン通過終点(ピクセル座標) |
--line-direction | down | down / up / any; 通過判定で考慮する方向 |
--no-display | オフ | ライブプレビューウィンドウを無効化(GUI なしのサーバー向け) |
--save-video PATH | — | 注釈付きフレームを mp4 ファイルに書き出す |
--frames-csv PATH | logs/frames.csv | フレーム単位の統計出力 |
--crossings-csv PATH | logs/crossings.csv | 各卵の通過判定(卵単位) |
--summary PATH | logs/summary.json | ジョブ単位のサマリー |
--loop | オフ | 動画再生終了後に先頭からループ再生 |
--config PATH | config.yaml | カスタム YAML 設定ファイル |
完全なリストは python run.py --help を参照してください。
出力成果物
実行後、Conveyor/logs/ 配下に次のファイルが生成されます(パスは CLI でリダイレクト可能):
-
logs/frames.csv: フレーム単位の統計(フレームインデックス、タイムスタンプ、現フレームの卵数、累積通過数など)。 -
logs/crossings.csv: 卵単位のライン通過判定。列の意味:列 意味 frame_idx,timestamp,direction通過時刻と方向 track_idカウントモデルが割り当てた安定 ID colorwhite/brown/unknown(Lab のa*チャンネルで判別)clsひびモデルが返すクラス名(例: brown-egg-crack)cracked,dirty,intact派生ブールフィールド is_defectivecracked or dirtymask_area_ratio卵のボックスに対するひびマスクの被覆率 iouカウントボックスとひびボックスの IoU sourceinspector(関連付け成功)またはunknown(重なりなし) -
logs/summary.json: 総数 + 色別カウント + 不合格率。 -
--save-video output/annotated.mp4(任意): 通過ライン、検出ボックス、ひびマスク、HUD を含む注釈付き動画。
ターミナル出力例:
[conveyor] Done. crossings=42 defective=3 frames=1280
[conveyor] Artifacts: frames=logs/frames.csv crossings=logs/crossings.csv summary=logs/summary.json設定ファイル
すべてのデフォルト値は Conveyor/config.yaml にまとめられています。CLI フラグは対応するキーを上書きします:
counter:
model:
weights: ../Automated-Egg-Counting-System/best.pt
device: auto
img_size: 640
conf_threshold: 0.35 # --conf-counter に対応
iou_threshold: 0.45
line:
start: [100, 240] # --line-start に対応
end: [540, 240] # --line-end に対応
direction: down # --line-direction に対応
min_track_length: 3
tracker:
max_lost_frames: 30
iou_match_threshold: 0.2
inspector:
model:
weights: ../Automated-Egg-Counting-System/best.pt
mode: classical # --inspector-mode に対応
conf_threshold: 0.25 # --conf-inspector に対応
filter:
crack_only: false
min_mask_pixels: 0
min_bbox_area: 16
association:
min_iou: 0.3 # --associate-iou に対応
video:
source: "0" # --source / --video / --webcam に対応
loop: false両モデルのボックス位置がずれている場合(カウントボックスとひびボックスがほとんど重ならない場合)は、cfg.association.min_iou を下げてください。明らかな誤対応が見られる場合はこの値を上げてください。