William Zhang2026-09-20

Ei-Zählung und Risserkennung basierend auf reComputer RK3576

Das Ei-Zähl- und Risserkennungssystem basierend auf reComputer RK3576 führt gleichzeitig Ei-Zählung sowie Riss- und Schmutzerkennung an einer Fließbandlinie durch. Durch die Conveyor-Orchestrierung und IoU-Zuordnung werden Position, Anzahl und Beschädigungszustand jedes Eis ausgegeben.

YOLODamage DetectionEgg CountingGitHub

Ein Ei-Zähl- und Risserkennungssystem basierend auf RK3576 / RKNN / YOLO

Quellcode: https://github.com/doublelf/Egg_Counting_and_Damage_Detection


Die Ei-Zählung und Risserkennung basierend auf dem reComputer RK3576 werden durch den Conveyor/-Orchestrator in eine einheitliche Fließband-Qualitätsprüfungs-Pipeline integriert: Jeder Frame führt gleichzeitig das Zählmodell und das Rissmodell aus; über einen IoU-Assoziator werden "Linienüberquerungs-Ereignisse" mit "Risserkennungen" verknüpft, sodass am Ende jedes Ei eine Bewertung als cracked / dirty / intact erhält.

  • Zählung: aus Automated-Egg-Counting-System/, Einklassen-Objekterkennung + Schwerpunkt-Tracking + Linienüberquerungs-Zählung.
  • Risserkennung: aus crack_inspect/, standardmäßig klassische CV-Pipeline (CLAHE → Black-Hat → adaptive Schwellenwertbildung → zusammenhängende Komponenten), ohne zusätzliche Gewichte auszukommen; kann via --inspector-mode yolo auch auf ein YOLOv8-seg-Modell umgeschaltet werden.
  • Orchestrierung: Conveyor/src/egg_pipeline/ verknüpft die beiden und schreibt CSV / JSON / optionales annotiertes Video.

Schnellstart

1. Code klonen

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

2. Virtuelle Umgebung anlegen und Abhängigkeiten installieren

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

3. Inferenz ausführen

Der Zählschwellenwert ist sehr hoch angesetzt (--conf-counter 0.99), um stabile Linienüberquerungs-Statistiken zu gewährleisten; der Riss-Schwellenwert bleibt auf dem Standardwert (--conf-inspector 0.25); der modellübergreifende Zuordnungsschwellenwert ist auf --associate-iou 0.1 gelockert, um leichte Verschiebungen der Bounding Boxes zwischen den beiden Modellen zu tolerieren.

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

Sie müssen zuerst cd Conveyor ausführen: run.py liest Modelle standardmäßig aus config.yaml, und relative Pfade werden gegen Conveyor/ aufgelöst.


Parameter-Übersicht

ParameterStandardBeschreibung
--video PATH—Pfad zu einer lokalen Videodatei (schließt sich gegenseitig mit --webcam aus)
--webcam [INDEX]—Webcam verwenden; ohne Wert wird 0 verwendet; mit --webcam 1 explizit Index 1 wählen
--source STR—Überschreibt direkt video.source (Ziffernfolge wird als Webcam-Index behandelt, jeder andere String als Dateipfad)
--counter-weights PATH—Pfad zu den Gewichten des Zählmodells (YOLOv5)
--inspector-weights PATHwie ZählerPfad zu den Gewichten des Rissmodells; wird bei mode=classical ignoriert
--inspector-modeclassicalauto / yolo / classical; standardmäßig klassische CV-Pipeline, keine zusätzlichen Gewichte erforderlich
--conf-counter FLOAT0.35Konfidenzschwellenwert des Zählmodells
--conf-inspector FLOAT0.25Konfidenzschwellenwert des Rissmodells
--associate-iou FLOAT0.3Minimaler IoU, um eine Zählbox mit einer Rissbox zu verknüpfen; darunter wird das Ei als unknown vermerkt
--line-start X Y[100, 240]Startpunkt der Linienüberquerung (Pixelkoordinaten)
--line-end X Y[540, 240]Endpunkt der Linienüberquerung (Pixelkoordinaten)
--line-directiondowndown / up / any; Richtung, die bei der Überquerungsbewertung berücksichtigt wird
--no-displayausLive-Vorschaufenster deaktivieren, geeignet für Server ohne grafische Oberfläche
--save-video PATH—Annotierte Frames in eine mp4-Datei schreiben
--frames-csv PATHlogs/frames.csvStatistik pro Frame
--crossings-csv PATHlogs/crossings.csvPro-Ei-Bewertung für jede Linienüberquerung
--summary PATHlogs/summary.jsonJob-Ebenen-Zusammenfassung
--loopausNach dem Ende des Videos vom Anfang an fortsetzen
--config PATHconfig.yamlBenutzerdefinierte YAML-Konfigurationsdatei

Die vollständige Liste finden Sie unter python run.py --help.


Ausgabe-Artefakte

Nach der Ausführung werden folgende Dateien unter Conveyor/logs/ erzeugt (Pfade können über die CLI umgeleitet werden):

  • logs/frames.csv: Statistiken pro Frame (Frame-Index, Zeitstempel, Eierzahl im aktuellen Frame, kumulierte Überquerungsanzahl usw.).

  • logs/crossings.csv: Pro-Ei-Linienüberquerungs-Bewertungen. Bedeutung der Spalten:

    SpalteBedeutung
    frame_idx, timestamp, directionÜberquerungszeitpunkt und -richtung
    track_idVom Zählmodell zugewiesene stabile ID
    colorwhite / brown / unknown (Klassifikation über den Lab-a*-Kanal)
    clsVom Rissmodell zurückgegebener Klassenname, z. B. brown-egg-crack
    cracked, dirty, intactAbgeleitete boolesche Felder
    is_defectivecracked or dirty
    mask_area_ratioAnteil der Eibox, die von der Rissmaske bedeckt ist
    iouIoU zwischen Zählbox und Rissbox
    sourceinspector (erfolgreiche Zuordnung) oder unknown (keine Überlappung)
  • logs/summary.json: Gesamtanzahl + Anzahl pro Farbe + Ausschussrate.

  • --save-video output/annotated.mp4 (optional): annotiertes Video mit Überquerungslinie, Erkennungsboxen, Rissmasken und HUD.

Beispielhafte Terminalausgabe:

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

Konfigurationsdatei

Alle Standardwerte sind in Conveyor/config.yaml zentralisiert; CLI-Flags überschreiben die entsprechenden Schlüssel:

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

association:
  min_iou: 0.3            # entspricht --associate-iou

video:
  source: "0"             # entspricht --source / --video / --webcam
  loop: false

Wenn die Boxen der beiden Modelle systematisch versetzt sind (sodass Zählbox und Rissbox kaum überlappen), können Sie cfg.association.min_iou verringern; erhöhen Sie diesen Wert, wenn deutliche Fehlzuordnungen auftreten.