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]—使用摄像头;不传值取 0,可显式指定 --webcam 1
--source STR—直接覆盖 video.source(数字串被当作摄像头索引,路径字符串被当作文件)
--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关闭关闭实时预览窗口,适合无图形界面的服务器
--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蛋框内被裂纹 mask 覆盖的比例
    iou计数框与裂纹框的 IoU
    sourceinspector(匹配成功)或 unknown(无重叠)
  • logs/summary.json:总数 + 各颜色计数 + 不合格率。

  • --save-video output/annotated.mp4(可选):带越线、检测框、裂纹 mask、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;若出现明显误匹配,则上调此值。