Automated Visual Quality Control & Logistics


Im modernen E-Commerce ist die manuelle Prüfung von Waren (z.B. im Wareneingang oder bei Retouren) ein massiver Zeitfresser. Mitarbeiter müssen prüfen: “Ist das der richtige Artikel?”, “Ist das Etikett vorhanden?”, “Ist die Verpackung beschädigt?”.

Dieses Projekt demonstriert eine automatisierte Visuelle Qualitätskontrolle mittels KI. Durch den Einsatz von YOLOv8 (You Only Look Once) können Bilder in Millisekunden analysiert werden, um Objekte zu erkennen, zu zählen und zu verifizieren.

Business Use-Cases

Obwohl dieses Projekt technisch auf einer Objekterkennungs-API basiert, sind die Anwendungsmöglichkeiten im Handel vielfältig:

  1. Retouren-Prüfung: Automatischer Abgleich, ob der zurückgesendete Artikel optisch der Beschreibung entspricht (z.B. “Roter Schuh” vs. “Blauer Schuh”).
  2. Etiketten-Verifikation: Prüfung, ob Versandlabel oder Barcodes korrekt auf Paketen angebracht sind, bevor sie das Lager verlassen.
  3. Bestandsinventur: Automatische Zählung von Kartons auf Paletten durch Kameras, statt manuellem Zählen.

Die Technologie: YOLOv8 Nano

Ich verwende das YOLOv8 Nano Modell (yolov8n.pt). Es ist die kleinste und schnellste Version der YOLO-Familie, optimiert für Edge-Devices (wie Handscanner oder Raspberry Pis im Lager).

  • Größe: Nur ca. 6 MB
  • Geschwindigkeit: Inferenz in < 500ms auf CPU
  • RAM-Verbrauch: < 200 MB

Das Backend: FastAPI & Ultralytics

Der Python-Code nutzt FastAPI für den Upload und ultralytics für die KI.

# main.py (Erweiterung)
from fastapi import UploadFile, File
from fastapi.responses import StreamingResponse
from ultralytics import YOLO
from PIL import Image
import io

# Modell laden (wird beim ersten Start heruntergeladen)
model = YOLO("yolov8n.pt") 

@app.post("/detect-objects")
async def detect_objects(file: UploadFile = File(...)):
    # 1. Bild aus dem Upload lesen
    image_data = await file.read()
    image = Image.open(io.BytesIO(image_data))

    # 2. YOLO Inferenz durchführen
    results = model(image)

    # 3. Ergebnis-Bild rendern (mit Boxen)
    # plot() gibt ein numpy array zurück (BGR), wir müssen es zu RGB konvertieren
    res_plotted = results[0].plot() 
    res_image = Image.fromarray(res_plotted[..., ::-1]) # BGR zu RGB

    # 4. Bild zurücksenden
    img_byte_arr = io.BytesIO()
    res_image.save(img_byte_arr, format='JPEG')
    img_byte_arr.seek(0)
    
    return StreamingResponse(img_byte_arr, media_type="image/jpeg" )

Live-Demo: Der KI-Detektiv

Laden Sie ein Bild hoch (z.B. ein Foto von einer Straße, einem Büro oder Tieren). Der Server wird versuchen, Objekte zu erkennen und zu markieren.

Objekterkennung testen

Original:
Ergebnis:
Noch kein Ergebnis