YOLO Object Detection API


In diesem Projekt zeige ich, wie man moderne Computer Vision Modelle (YOLOv8) in eine Webanwendung integriert. Das Ziel: Ein Benutzer lädt ein Bild hoch, der Server erkennt Objekte darauf und sendet das Bild mit eingezeichneten Markierungen zurück.

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 Umgebungen mit begrenzten Ressourcen (wie mein VPS).

  • 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