Spaces:
Build error
Build error
| import gradio as gr | |
| from ultralytics import YOLO | |
| from collections import Counter | |
| import os | |
| import uuid | |
| # Model yükle | |
| model = YOLO("best.pt") | |
| # Sınıf eşlemesi | |
| id2name = { | |
| 0: "Silah", 1: "Tank", 2: "Helikopter", 3: "Savaş Uçağı", 4: "Asker", | |
| 5: "Top", 6: "Füze", 7: "Savaş Gemisi", 8: "Askeri Araç", 9: "Bayrak", | |
| 10: "Sivil Araç", 11: "Ağaç" | |
| } | |
| PRED_DIR = "yolo_outputs" | |
| def save_and_predict(image): | |
| os.makedirs("inputs", exist_ok=True) | |
| image_id = str(uuid.uuid4())[:8] | |
| image_path = f"inputs/{image_id}.jpg" | |
| image.save(image_path) | |
| model.predict(source=image_path, save_txt=True, conf=0.25, project=PRED_DIR, name=image_id, exist_ok=True) | |
| txt_path = f"{PRED_DIR}/{image_id}/labels/{image_id}.txt" | |
| if not os.path.exists(txt_path): | |
| return {}, "Hiçbir nesne tespit edilemedi." | |
| with open(txt_path, "r") as f: | |
| class_ids = [int(line.strip().split()[0]) for line in f] | |
| counts = Counter(class_ids) | |
| detected_names = {id2name[i] for i in counts if i in id2name} | |
| data = { | |
| "counts": counts, | |
| "names": detected_names | |
| } | |
| return data, "Tahmin başarıyla yüklendi. Sağdaki kutulardan bir soruya tıklayın." | |
| def cevapla(soru_id, data, chat_history): | |
| if not data: | |
| return chat_history + [("❓ " + soru_id, "Önce bir görsel yükleyin ve tahmin yapın.")] | |
| counts = data["counts"] | |
| names = data["names"] | |
| if soru_id == "1️⃣ Kaç nesne ve kaçar adet?": | |
| detaylar = [f"{counts[i]} adet {id2name[i]}" for i in counts] | |
| cevap = f"{len(counts)} farklı sınıf tespit edildi:\n" + "\n".join(detaylar) | |
| elif soru_id == "2️⃣ Savunma sistemleri var mı?": | |
| savunma = {"Tank", "Füze", "Top", "Helikopter"} | |
| bulunan = savunma & names | |
| cevap = f"Bulunan savunma sistemleri: {', '.join(bulunan)}" if bulunan else "Savunma sistemi tespit edilmedi." | |
| elif soru_id == "3️⃣ Askeri birlik tespiti?": | |
| cevap = "Askeri birlik olabilir." if {"Asker", "Askeri Araç"} & names else "Askeri birlik tespit edilmedi." | |
| elif soru_id == "4️⃣ Hava unsurları var mı?": | |
| hava = {"Helikopter", "Savaş Uçağı"} | |
| bulunan = hava & names | |
| cevap = f"Hava unsurları tespit edildi: {', '.join(bulunan)}" if bulunan else "Hava unsuru tespit edilmedi." | |
| elif soru_id == "5️⃣ Tehdit seviyesi nedir?": | |
| yüksek = {"Tank", "Füze", "Savaş Uçağı", "Top", "Savaş Gemisi"} | |
| if yüksek & names: | |
| cevap = "Yüksek tehdit içeriyor." | |
| elif "Asker" in names: | |
| cevap = "Orta seviye tehdit." | |
| else: | |
| cevap = "Düşük tehdit seviyesi." | |
| else: | |
| cevap = "Geçersiz soru." | |
| return chat_history + [(soru_id, cevap)] | |
| # Gradio Blocks yapısı | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## 🪖 YOLO Görselden Nesne Tespiti + Soru-Cevap Arayüzü") | |
| with gr.Row(): | |
| with gr.Column(): | |
| image_input = gr.Image(type="pil", label="Görsel Yükle") | |
| tahmin_bilgisi = gr.Textbox(label="Tahmin Durumu") | |
| hidden_data = gr.State() | |
| upload_button = gr.Button("📤 Tahmin Yap") | |
| with gr.Column(): | |
| chatbot = gr.Chatbot(label="📡 Soru-Cevap Paneli") | |
| with gr.Row(): | |
| b1 = gr.Button("1️⃣ Kaç nesne ve kaçar adet?") | |
| b2 = gr.Button("2️⃣ Savunma sistemleri var mı?") | |
| with gr.Row(): | |
| b3 = gr.Button("3️⃣ Askeri birlik tespiti?") | |
| b4 = gr.Button("4️⃣ Hava unsurları var mı?") | |
| b5 = gr.Button("5️⃣ Tehdit seviyesi nedir?") | |
| # Buton olayları | |
| # Buton olayları – dikkat: soru_id doğrudan lambda ile veriliyor | |
| upload_button.click( | |
| save_and_predict, inputs=image_input, outputs=[hidden_data, tahmin_bilgisi] | |
| ) | |
| b1.click(lambda data, chat: cevapla("1️⃣ Kaç nesne ve kaçar adet?", data, chat), inputs=[hidden_data, chatbot], outputs=chatbot) | |
| b2.click(lambda data, chat: cevapla("2️⃣ Savunma sistemleri var mı?", data, chat), inputs=[hidden_data, chatbot], outputs=chatbot) | |
| b3.click(lambda data, chat: cevapla("3️⃣ Askeri birlik tespiti?", data, chat), inputs=[hidden_data, chatbot], outputs=chatbot) | |
| b4.click(lambda data, chat: cevapla("4️⃣ Hava unsurları var mı?", data, chat), inputs=[hidden_data, chatbot], outputs=chatbot) | |
| b5.click(lambda data, chat: cevapla("5️⃣ Tehdit seviyesi nedir?", data, chat), inputs=[hidden_data, chatbot], outputs=chatbot) | |
| demo.launch() | |