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 yolooverschakelen 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
git clone https://github.com/doublelf/Egg_Counting_and_Damage_Detection
cd Egg_Counting_and_Damage_Detection2. Virtuele omgeving aanmaken en afhankelijkheden installeren
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt3. 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.
cd Conveyor
python run.py --video ./video2.mp4 --conf-counter 0.99 --conf-inspector 0.25 --associate-iou 0.1U moet eerst
cd Conveyoruitvoeren:run.pyleest standaard modellen uitconfig.yaml, en relatieve paden worden opgelost ten opzichte vanConveyor/.
Parameteroverzicht
| Parameter | Standaard | Beschrijving |
|---|---|---|
--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 PATH | idem teller | Pad naar de gewichten van het barstmodel; wordt genegeerd bij mode=classical |
--inspector-mode | classical | auto / yolo / classical; standaard de klassieke CV-pipeline, geen extra gewichten nodig |
--conf-counter FLOAT | 0.35 | Betrouwbaarheidsdrempel van het telmodel |
--conf-inspector FLOAT | 0.25 | Betrouwbaarheidsdrempel van het barstmodel |
--associate-iou FLOAT | 0.3 | Minimale 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-direction | down | down / up / any; richting die wordt meegewogen bij de passagebeoordeling |
--no-display | uit | Live voorbeeldvenster uitschakelen, geschikt voor servers zonder grafische interface |
--save-video PATH | — | Schrijf de geannoteerde frames naar een mp4-bestand |
--frames-csv PATH | logs/frames.csv | Per-frame statistieken |
--crossings-csv PATH | logs/crossings.csv | Per-ei-oordeel voor elke lijnpassage |
--summary PATH | logs/summary.json | Samenvatting op jobniveau |
--loop | uit | Na afloop van de video opnieuw vanaf het begin afspelen |
--config PATH | config.yaml | Aangepast 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:Kolom Betekenis 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-crackcracked,dirty,intactAfgeleide booleaanse velden is_defectivecracked or dirtymask_area_ratioFractie van de eibox die door het barstmasker wordt bedekt iouIoU tussen telbox en barstbox sourceinspector(succesvolle koppeling) ofunknown(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:
[conveyor] Done. crossings=42 defective=3 frames=1280
[conveyor] Artifacts: frames=logs/frames.csv crossings=logs/crossings.csv summary=logs/summary.jsonConfiguratiebestand
Alle standaardwaarden zijn gecentraliseerd in Conveyor/config.yaml; CLI-vlaggen overschrijven de corresponderende sleutels:
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: falseAls 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.