William Zhang2026-09-20

Comptage d'œufs et détection de fissures basé sur reComputer RK3576

Le système de comptage d'œufs et de détection de fissures basé sur le reComputer RK3576 effectue simultanément le comptage des œufs et la détection de fissures/salissures sur une ligne de convoyeur. Grâce à l'orchestration Conveyor et à l'association IoU, il restitue la position, le nombre et l'état d'endommagement de chaque œuf.

YOLODamage DetectionEgg CountingGitHub

Un système de comptage d'œufs et de détection de fissures basé sur RK3576 / RKNN / YOLO

Code source : https://github.com/doublelf/Egg_Counting_and_Damage_Detection


Le comptage d'œufs et la détection de fissures basés sur le reComputer RK3576 sont intégrés par l'orchestrateur Conveyor/ dans une pipeline unifiée de contrôle qualité sur convoyeur : chaque image exécute simultanément le modèle de comptage et le modèle de fissures ; grâce à un associateur IoU, les "événements de franchissement de ligne" sont appariés aux "détections de fissures", attribuant finalement à chaque œuf un statut cracked / dirty / intact.

  • Comptage : issu de Automated-Egg-Counting-System/, détection d'objets à classe unique + suivi par centroïde + comptage par franchissement de ligne.
  • Détection de fissures : issue de crack_inspect/ ; utilise par défaut une pipeline CV classique (CLAHE → top-hat noir → seuillage adaptatif → composantes connexes), sans dépendre de poids supplémentaires ; peut également basculer sur un modèle YOLOv8-seg via --inspector-mode yolo.
  • Orchestration : Conveyor/src/egg_pipeline/ relie les deux et écrit du CSV / JSON / vidéo annotée optionnelle.

Démarrage rapide

1. Cloner le dépôt

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

2. Créer un environnement virtuel et installer les dépendances

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

3. Lancer l'inférence

Le seuil de comptage est fixé très haut (--conf-counter 0.99) pour garantir la stabilité des statistiques de franchissement ; le seuil de fissures conserve sa valeur par défaut (--conf-inspector 0.25) ; le seuil d'association inter-modèles est relâché à --associate-iou 0.1 pour tolérer de légers décalages de boîtes entre les deux modèles.

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

Vous devez d'abord faire cd Conveyor : run.py lit par défaut les modèles depuis config.yaml, et les chemins relatifs sont résolus par rapport à Conveyor/.


Tableau des paramètres

ParamètrePar défautDescription
--video PATH—Chemin d'un fichier vidéo local (mutuellement exclusif avec --webcam)
--webcam [INDEX]—Utiliser une webcam ; sans paramètre cela correspond à 0 ; préciser --webcam 1 pour utiliser l'index 1
--source STR—Remplace directement video.source (une chaîne numérique est traitée comme un index de webcam, toute autre chaîne comme un chemin de fichier)
--counter-weights PATH—Chemin des poids du modèle de comptage (YOLOv5)
--inspector-weights PATHidem compteurChemin des poids du modèle de fissures ; ignoré lorsque mode=classical
--inspector-modeclassicalauto / yolo / classical ; par défaut la pipeline CV classique, aucun poids supplémentaire requis
--conf-counter FLOAT0.35Seuil de confiance du modèle de comptage
--conf-inspector FLOAT0.25Seuil de confiance du modèle de fissures
--associate-iou FLOAT0.3IoU minimale requise pour associer une boîte de comptage à une boîte de fissures ; en dessous, l'œuf est enregistré comme unknown
--line-start X Y[100, 240]Point de départ du franchissement (coordonnées en pixels)
--line-end X Y[540, 240]Point d'arrivée du franchissement (coordonnées en pixels)
--line-directiondowndown / up / any ; direction prise en compte lors du jugement de franchissement
--no-displaydésactivéDésactive la fenêtre de prévisualisation en direct, adapté aux serveurs sans interface graphique
--save-video PATH—Écrit les images annotées dans un fichier mp4
--frames-csv PATHlogs/frames.csvStatistiques par image
--crossings-csv PATHlogs/crossings.csvVerdict par œuf pour chaque franchissement
--summary PATHlogs/summary.jsonRésumé au niveau du job
--loopdésactivéUne fois la vidéo terminée, revenir au début en boucle
--config PATHconfig.yamlFichier de configuration YAML personnalisé

Pour la liste complète, consultez python run.py --help.


Artefacts produits

Après exécution, les fichiers suivants sont produits sous Conveyor/logs/ (les chemins peuvent être redirigés via la CLI) :

  • logs/frames.csv : statistiques par image (indice d'image, timestamp, nombre d'œufs de l'image courante, cumul des franchissements, etc.).

  • logs/crossings.csv : verdicts de franchissement par œuf. Signification des colonnes :

    ColonneSignification
    frame_idx, timestamp, directionMoment et direction du franchissement
    track_idID stable attribué par le modèle de comptage
    colorwhite / brown / unknown (classé via le canal a* de Lab)
    clsNom de classe renvoyé par le modèle de fissures, par ex. brown-egg-crack
    cracked, dirty, intactChamps booléens dérivés
    is_defectivecracked or dirty
    mask_area_ratioFraction de la boîte de l'œuf couverte par le masque de fissure
    iouIoU entre la boîte de comptage et la boîte de fissures
    sourceinspector (association réussie) ou unknown (aucun chevauchement)
  • logs/summary.json : nombre total + effectif par couleur + taux de défauts.

  • --save-video output/annotated.mp4 (optionnel) : vidéo annotée avec la ligne de franchissement, les boîtes de détection, les masques de fissures et le HUD.

Exemple de sortie terminal :

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

Fichier de configuration

Toutes les valeurs par défaut sont centralisées dans Conveyor/config.yaml ; les flags CLI surchargent les clés correspondantes :

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

association:
  min_iou: 0.3            # correspond à --associate-iou

video:
  source: "0"             # correspond à --source / --video / --webcam
  loop: false

Si les boîtes des deux modèles sont systématiquement décalées (de sorte que la boîte de comptage et la boîte de fissures ne se chevauchent quasiment pas), vous pouvez abaisser cfg.association.min_iou ; augmentez-le si vous constatez des erreurs d'appariement manifestes.