William Zhang2026-09-20

Conteo de huevos y detección de grietas con reComputer RK3576

El sistema de conteo de huevos y detección de grietas basado en reComputer RK3576 realiza de forma simultánea el conteo y la detección de grietas y suciedad en una línea de cinta transportadora. Mediante la orquestación de Conveyor y la asociación por IoU, emite la posición, el conteo y el estado de daños de cada huevo.

YOLODamage DetectionEgg CountingGitHub

Un sistema de conteo de huevos y detección de grietas basado en RK3576 / RKNN / YOLO

Código fuente: https://github.com/doublelf/Egg_Counting_and_Damage_Detection


El conteo de huevos y la detección de grietas basados en el reComputer RK3576 se integran mediante el orquestador Conveyor/ en una pipeline unificada de control de calidad en cinta transportadora: cada fotograma ejecuta simultáneamente el modelo de conteo y el modelo de grietas; mediante un asociador por IoU se emparejan los "sucesos de cruce de línea" con las "detecciones de grietas", asignando finalmente a cada huevo un veredicto de cracked / dirty / intact.

  • Conteo: proviene de Automated-Egg-Counting-System/, detección de objetos de una sola clase + seguimiento por centroide + conteo por cruce de línea.
  • Detección de grietas: proviene de crack_inspect/; por defecto utiliza una pipeline clásica de CV (CLAHE → top-hat negro → umbralización adaptativa → componentes conectados), sin depender de pesos adicionales; también puede cambiar a un modelo YOLOv8-seg mediante --inspector-mode yolo.
  • Orquestación: Conveyor/src/egg_pipeline/ enlaza ambos y escribe CSV / JSON / vídeo anotado opcional.

Inicio rápido

1. Clonar el repositorio

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

2. Crear un entorno virtual e instalar las dependencias

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

3. Ejecutar la inferencia

El umbral de conteo se establece muy alto (--conf-counter 0.99) para asegurar estadísticas de cruce de línea estables; el umbral de grietas se mantiene en el valor por defecto (--conf-inspector 0.25); el umbral de asociación entre modelos se relaja a --associate-iou 0.1 para tolerar leves desplazamientos de las bounding boxes entre ambos modelos.

bash
cd Conveyor
python run.py --video ./video2.mp4 --conf-counter 0.99 --conf-inspector 0.25 --associate-iou 0.1

Primero debes ejecutar cd Conveyor: run.py lee por defecto los modelos desde config.yaml, y las rutas relativas se resuelven respecto a Conveyor/.


Tabla de parámetros

ParámetroPor defectoDescripción
--video PATH—Ruta a un archivo de vídeo local (mutuamente excluyente con --webcam)
--webcam [INDEX]—Usa una webcam; sin valor resuelve a 0; especifica --webcam 1 para usar el índice 1
--source STR—Sobrescribe directamente video.source (una cadena numérica se trata como índice de webcam; cualquier otra cadena, como ruta de archivo)
--counter-weights PATH—Ruta a los pesos del modelo de conteo (YOLOv5)
--inspector-weights PATHigual que contadorRuta a los pesos del modelo de grietas; se ignora cuando mode=classical
--inspector-modeclassicalauto / yolo / classical; por defecto la pipeline clásica de CV, sin pesos extra
--conf-counter FLOAT0.35Umbral de confianza del modelo de conteo
--conf-inspector FLOAT0.25Umbral de confianza del modelo de grietas
--associate-iou FLOAT0.3IoU mínima para asociar una bounding box de conteo con una de grietas; por debajo de este valor el huevo se registra como unknown
--line-start X Y[100, 240]Punto inicial del cruce de línea (coordenadas en píxeles)
--line-end X Y[540, 240]Punto final del cruce de línea (coordenadas en píxeles)
--line-directiondowndown / up / any; dirección considerada al evaluar el cruce
--no-displaydesactivadoDesactiva la ventana de previsualización en directo, adecuado para servidores sin interfaz gráfica
--save-video PATH—Escribe los fotogramas anotados en un archivo mp4
--frames-csv PATHlogs/frames.csvEstadísticas por fotograma
--crossings-csv PATHlogs/crossings.csvVeredicto por huevo para cada cruce de línea
--summary PATHlogs/summary.jsonResumen a nivel de trabajo
--loopdesactivadoAl terminar el vídeo, vuelve a comenzar desde el principio
--config PATHconfig.yamlArchivo de configuración YAML personalizado

Para la lista completa, consulta python run.py --help.


Artefactos de salida

Tras la ejecución, se generan los siguientes archivos bajo Conveyor/logs/ (las rutas pueden redirigirse mediante la CLI):

  • logs/frames.csv: estadísticas por fotograma (índice de fotograma, marca de tiempo, conteo de huevos del fotograma actual, conteo acumulado de cruces, etc.).

  • logs/crossings.csv: veredictos de cruce de línea por huevo. Significado de las columnas:

    ColumnaSignificado
    frame_idx, timestamp, directionMomento y dirección del cruce
    track_idID estable asignado por el modelo de conteo
    colorwhite / brown / unknown (clasificado por el canal a* de Lab)
    clsNombre de clase devuelto por el modelo de grietas, p. ej. brown-egg-crack
    cracked, dirty, intactCampos booleanos derivados
    is_defectivecracked or dirty
    mask_area_ratioFracción de la caja del huevo cubierta por la máscara de grietas
    iouIoU entre la caja de conteo y la caja de grietas
    sourceinspector (asociación exitosa) o unknown (sin solapamiento)
  • logs/summary.json: conteo total + conteos por color + tasa de defectos.

  • --save-video output/annotated.mp4 (opcional): vídeo anotado con la línea de cruce, las bounding boxes, las máscaras de grietas y un HUD.

Salida de terminal de ejemplo:

Code
[conveyor] Done. crossings=42 defective=3 frames=1280
[conveyor] Artifacts: frames=logs/frames.csv crossings=logs/crossings.csv summary=logs/summary.json

Archivo de configuración

Todos los valores por defecto están centralizados en Conveyor/config.yaml; los flags de la CLI sobrescriben las claves correspondientes:

yaml
counter:
  model:
    weights: ../Automated-Egg-Counting-System/best.pt
    device: auto
    img_size: 640
    conf_threshold: 0.35   # corresponde a --conf-counter
    iou_threshold: 0.45
  line:
    start: [100, 240]     # corresponde a --line-start
    end:   [540, 240]     # corresponde a --line-end
    direction: down       # corresponde a --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       # corresponde a --inspector-mode
    conf_threshold: 0.25  # corresponde a --conf-inspector
  filter:
    crack_only: false
    min_mask_pixels: 0
    min_bbox_area: 16

association:
  min_iou: 0.3            # corresponde a --associate-iou

video:
  source: "0"             # corresponde a --source / --video / --webcam
  loop: false

Si las cajas de los dos modelos están sistemáticamente desalineadas (de modo que la caja de conteo y la caja de grietas apenas se solapan), puedes bajar cfg.association.min_iou; súbelo cuando observes emparejamientos claramente incorrectos.