William Zhang2026-09-20

Eiertelling en barstdetectie op basis van reComputer RK3576

Het eiertelling- en barstdetectiesysteem op basis van reComputer RK3576 voert gelijktijdig eiertelling en barst-/vlekdetectie uit op een transportbandlijn. Via Conveyor-orchestratie en IoU-koppeling levert het de positie, telling en beschadigingsstatus van elk ei.

YOLODamage DetectionEgg CountingGitHub

Een eiertelling- en barstdetectiesysteem gebaseerd op RK3576 / RKNN / YOLO

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


Eiertelling en barstdetectie op basis van de reComputer RK3576 worden door de Conveyor/-orchestrator geïntegreerd tot één uniforme kwaliteitsinspectie-pipeline op de transportband: elk frame voert tegelijkertijd het telmodel en het barstmodel uit; een IoU-associator koppelt "lijnpassage-events" aan "barstdetecties", waarna elk ei uiteindelijk een oordeel cracked / dirty / intact krijgt.

  • Telling: afkomstig van Automated-Egg-Counting-System/, objectdetectie met één klasse + centroïde-tracking + telling via lijnpassage.
  • Barstdetectie: afkomstig van crack_inspect/; standaard wordt een klassieke CV-pipeline gebruikt (CLAHE → black-hat → adaptieve drempelwaarde → samenhangende componenten), zonder extra gewichten; kan ook via --inspector-mode yolo overschakelen naar een YOLOv8-seg-model.
  • Orchestratie: Conveyor/src/egg_pipeline/ koppelt de twee en schrijft CSV / JSON / optionele geannoteerde video.

Snel starten

1. Repo klonen

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

2. Virtuele omgeving aanmaken en afhankelijkheden installeren

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

3. Inferentie uitvoeren

De telsdrempel is zeer hoog gezet (--conf-counter 0.99) om stabiele lijnpassage-statistieken te garanderen; de barstdrempel blijft op de standaardwaarde (--conf-inspector 0.25); de koppelingsdrempel tussen modellen is versoepeld naar --associate-iou 0.1 om kleine afwijkingen in bounding boxes tussen de twee modellen te tolereren.

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

U moet eerst cd Conveyor uitvoeren: run.py leest standaard modellen uit config.yaml, en relatieve paden worden opgelost ten opzichte van Conveyor/.


Parameteroverzicht

ParameterStandaardBeschrijving
--video PATH—Pad naar een lokaal videobestand (wederzijds uitsluitend met --webcam)
--webcam [INDEX]—Webcam gebruiken; zonder waarde wordt 0 gebruikt; geef --webcam 1 op om expliciet index 1 te kiezen
--source STR—Overschrijft direct video.source (een numerieke string wordt beschouwd als webcam-index, elke andere string als bestandspad)
--counter-weights PATH—Pad naar de gewichten van het telmodel (YOLOv5)
--inspector-weights PATHidem tellerPad naar de gewichten van het barstmodel; wordt genegeerd bij mode=classical
--inspector-modeclassicalauto / yolo / classical; standaard de klassieke CV-pipeline, geen extra gewichten nodig
--conf-counter FLOAT0.35Betrouwbaarheidsdrempel van het telmodel
--conf-inspector FLOAT0.25Betrouwbaarheidsdrempel van het barstmodel
--associate-iou FLOAT0.3Minimale IoU om een telbox aan een barstbox te koppelen; onder deze waarde wordt het ei als unknown geregistreerd
--line-start X Y[100, 240]Startpunt van de lijnpassage (pixelcoördinaten)
--line-end X Y[540, 240]Eindpunt van de lijnpassage (pixelcoördinaten)
--line-directiondowndown / up / any; richting die wordt meegewogen bij de passagebeoordeling
--no-displayuitLive voorbeeldvenster uitschakelen, geschikt voor servers zonder grafische interface
--save-video PATH—Schrijf de geannoteerde frames naar een mp4-bestand
--frames-csv PATHlogs/frames.csvPer-frame statistieken
--crossings-csv PATHlogs/crossings.csvPer-ei-oordeel voor elke lijnpassage
--summary PATHlogs/summary.jsonSamenvatting op jobniveau
--loopuitNa afloop van de video opnieuw vanaf het begin afspelen
--config PATHconfig.yamlAangepast YAML-configuratiebestand

Voor de volledige lijst, zie python run.py --help.


Uitvoerartefacten

Na uitvoering worden de volgende bestanden aangemaakt in Conveyor/logs/ (paden kunnen via de CLI worden omgeleid):

  • logs/frames.csv: per-frame statistieken (frame-index, timestamp, ei-aantal in het huidige frame, cumulatief aantal passages, enz.).

  • logs/crossings.csv: per-ei-lijnpassage-oordeel. Betekenis van de kolommen:

    KolomBetekenis
    frame_idx, timestamp, directionPassagemoment en -richting
    track_idStabiel ID toegewezen door het telmodel
    colorwhite / brown / unknown (geclassificeerd via het Lab-a*-kanaal)
    clsKlassenaam teruggegeven door het barstmodel, bijv. brown-egg-crack
    cracked, dirty, intactAfgeleide booleaanse velden
    is_defectivecracked or dirty
    mask_area_ratioFractie van de eibox die door het barstmasker wordt bedekt
    iouIoU tussen telbox en barstbox
    sourceinspector (succesvolle koppeling) of unknown (geen overlap)
  • logs/summary.json: totaal aantal + tellingen per kleur + defectpercentage.

  • --save-video output/annotated.mp4 (optioneel): geannoteerde video met de doorgangslijn, detectie-boxen, barstmaskers en HUD.

Voorbeeld van terminaluitvoer:

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

Configuratiebestand

Alle standaardwaarden zijn gecentraliseerd in Conveyor/config.yaml; CLI-vlaggen overschrijven de corresponderende sleutels:

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

association:
  min_iou: 0.3            # komt overeen met --associate-iou

video:
  source: "0"             # komt overeen met --source / --video / --webcam
  loop: false

Als de boxen van de twee modellen systematisch verschoven zijn (zodat de telbox en de barstbox nauwelijks overlappen), kunt u cfg.association.min_iou verlagen; verhoog deze waarde als u duidelijke verkeerde koppelingen ziet.