William Zhang2026-09-20

reComputer RK3576 による卵のカウントとひび検出

reComputer RK3576 に基づく卵カウントとひび検出システムは、コンベアライン上で卵のカウントと ひび/汚れ検出を同時に実行します。Conveyor オーケストレーションと IoU 関連付けにより、 各卵の位置、数、損傷状況を出力します。

YOLODamage DetectionEgg CountingGitHub

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. リポジトリのクローン

bash
git clone https://github.com/doublelf/Egg_Counting_and_Damage_Detection
cd Egg_Counting_and_Damage_Detection

2. 仮想環境の作成と依存関係のインストール

bash
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

3. 推論の実行

カウントしきい値はライン通過統計を安定させるために非常に高く(--conf-counter 0.99)設定されています。ひびしきい値はデフォルト(--conf-inspector 0.25)のままです。モデル間の関連付けしきい値は、両モデルのバウンディングボックスの微妙な位置ずれを許容するため、--associate-iou 0.1 に緩めています。

bash
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-modeclassicalauto / yolo / classical; デフォルトは古典 CV パイプラインで追加の重みは不要
--conf-counter FLOAT0.35カウントモデルの信頼度しきい値
--conf-inspector FLOAT0.25ひびモデルの信頼度しきい値
--associate-iou FLOAT0.3カウントボックスとひびボックスを関連付ける最小 IoU。これ未満の場合は卵を unknown として記録
--line-start X Y[100, 240]ライン通過開始点(ピクセル座標)
--line-end X Y[540, 240]ライン通過終点(ピクセル座標)
--line-directiondowndown / up / any; 通過判定で考慮する方向
--no-displayオフライブプレビューウィンドウを無効化(GUI なしのサーバー向け)
--save-video PATH—注釈付きフレームを mp4 ファイルに書き出す
--frames-csv PATHlogs/frames.csvフレーム単位の統計出力
--crossings-csv PATHlogs/crossings.csv各卵の通過判定(卵単位)
--summary PATHlogs/summary.jsonジョブ単位のサマリー
--loopオフ動画再生終了後に先頭からループ再生
--config PATHconfig.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 dirty
    mask_area_ratio卵のボックスに対するひびマスクの被覆率
    iouカウントボックスとひびボックスの IoU
    sourceinspector(関連付け成功)または unknown(重なりなし)
  • logs/summary.json: 総数 + 色別カウント + 不合格率。

  • --save-video output/annotated.mp4(任意): 通過ライン、検出ボックス、ひびマスク、HUD を含む注釈付き動画。

ターミナル出力例:

Code
[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 フラグは対応するキーを上書きします:

yaml
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 を下げてください。明らかな誤対応が見られる場合はこの値を上げてください。