73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
from ultralytics import YOLO
|
|
import random
|
|
|
|
# Lädt das Modell (Nano-Version ist schnell & reicht für Tassen/Teller)
|
|
model = YOLO("models/yolo11n.pt")
|
|
|
|
# Deutsch-Übersetzung für gängige Objekte
|
|
label_map = {
|
|
"cup": "eine Tasse",
|
|
"bottle": "eine Flasche",
|
|
"cell phone": "ein Handy",
|
|
"person": "einen Menschen (vermutlich Matthias, der schon wieder nichts tut)",
|
|
"laptop": "einen Laptop",
|
|
"chair": "einen Stuhl",
|
|
"remote": "eine Fernbedienung",
|
|
"keyboard": "eine Tastatur",
|
|
"mouse": "eine Maus",
|
|
"bicycle": "ein Fahrrad"
|
|
}
|
|
|
|
def analyze_image_with_yolo(image_path):
|
|
results = model.predict(source=image_path, conf=0.45)
|
|
|
|
found_items = []
|
|
for result in results:
|
|
for box in result.boxes:
|
|
label = result.names[int(box.cls)]
|
|
found_items.append(label)
|
|
|
|
description = generate_description(found_items)
|
|
insult = generate_insult(found_items)
|
|
|
|
return f"{description} {insult}"
|
|
|
|
def generate_description(items):
|
|
if not items:
|
|
return "Ich sehe absolut gar nichts."
|
|
|
|
translated_items = [label_map.get(item, f"ein {item}") for item in set(items)]
|
|
|
|
if len(translated_items) == 1:
|
|
return f"Ich sehe {translated_items[0]}."
|
|
|
|
last_item = translated_items.pop()
|
|
return f"Ich sehe {', '.join(translated_items)} und {last_item}."
|
|
|
|
def generate_insult(items):
|
|
# Mapping von Objekten zu nervigen Kommentaren
|
|
insults = {
|
|
"cup": [
|
|
"Matthias, die Tasse auf dem Tisch hat mittlerweile ein eigenes Ökosystem. Räum sie weg!",
|
|
"Ist das Kunst oder kann das weg? Ich meine die Tasse, Matthias.",
|
|
"Noch eine Tasse? Willst du ein Café eröffnen oder bist du einfach nur faul?"
|
|
],
|
|
"bottle": [
|
|
"Leergut gehört in die Kiste, nicht in mein Sichtfeld.",
|
|
"Flasche leer, Kopf leer? Bring das Ding weg."
|
|
],
|
|
"cell phone": [
|
|
"Schon wieder am Handy? Kein Wunder, dass hier nichts vorangeht.",
|
|
"Digital Detox würde dir gut tun, Matthias. Leg das Ding weg."
|
|
]
|
|
}
|
|
|
|
# Schauen, ob wir was zum Meckern finden
|
|
for item, phrases in insults.items():
|
|
if item in items:
|
|
return random.choice(phrases)
|
|
|
|
if not items:
|
|
return "Ich bin mir aber sicher, du hast irgendwo Dreck versteckt."
|
|
|
|
return "Eigentlich sieht alles okay aus... Das macht mich erst recht misstrauisch." |