import gradio as gr import numpy as np from PIL import Image import cv2 from ultralytics import YOLO from transformers import pipeline # Modelle laden yolo_model = YOLO("./best.pt") dino_model = pipeline("zero-shot-object-detection", model="IDEA-Research/grounding-dino-tiny", tokenizer_kwargs={"padding": True, "truncation": True}) # YOLOv8-Erkennung def detect_with_yolo(image: Image.Image): try: results = yolo_model(np.array(image))[0] return Image.fromarray(results.plot()) except Exception as e: logging.error(f"YOLOv8 Fehler: {e}") return image # Grounding DINO-Erkennung def detect_with_grounding_dino(image: Image.Image, prompt=["license plate.", "number plate.", "car plate.", "vehicle registration plate."]): try: results = dino_model(image, candidate_labels=prompt) image_np = np.array(image).copy() if not results: return image # Keine Erkennung = Originalbild results = [result for result in results if result["score"] > 0.4] if not results: return image for result in results: box = result["box"] score = result["score"] label = "license plate" x1, y1, x2, y2 = int(box["xmin"]), int(box["ymin"]), int(box["xmax"]), int(box["ymax"]) image_np = cv2.rectangle(image_np, (x1, y1), (x2, y2), (0, 255, 0), 2) image_np = cv2.putText(image_np, f"{label} ({score:.2f})", (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1) return Image.fromarray(image_np) except Exception as e: logging.error(f"Grounding DINO Fehler: {e}") return image # Verarbeitung der Bilder def process_image(image): yolo_out = detect_with_yolo(image) dino_out = detect_with_grounding_dino(image) return yolo_out, dino_out # Beispielbilder definieren example_images = [ ["example_images/image1.jpg"], ["example_images/image2.jpg"], ["example_images/image3.jpg"], ["example_images/image4.jpg"], ["example_images/image5.jpg"], ["example_images/image6.jpg"], ["example_images/image7.jpg"] ] # Gradio-Interface app = gr.Interface( fn=process_image, inputs=gr.Image(type="pil"), outputs=[ gr.Image(label="YOLOv8 Detection"), gr.Image(label="Grounding DINO (Zero-Shot) Detection") ], examples=example_images, cache_examples=False, title="Kennzeichenerkennung", description="Lade ein Bild hoch oder wähle ein Beispielbild und vergleiche die Ergebnisse." ) if __name__ == "__main__": app.launch()