Nonabzbssbbsbs commited on
Commit
24f094e
·
verified ·
1 Parent(s): 856368e

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +99 -0
app.py ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from transformers import pipeline
3
+ from PIL import Image
4
+ import torch
5
+
6
+ # GPU болса қолдану, болмаса CPU.
7
+ device = "cuda:0" if torch.cuda.is_available() else "cpu"
8
+
9
+ # Модельдерді жүктеу үшін орын дайындау
10
+ waste_classifier = None
11
+ plant_classifier = None
12
+
13
+ # --- Қазақшаға аударуға арналған сөздіктер ---
14
+ # ⭐️ Жаңа қоқыс моделінің жауаптарына сәйкестендірілген сөздік
15
+ WASTE_LABELS_KZ = {
16
+ "cardboard": {"name": "📦 Картон", "recyclable": True, "description": "Бұл материал қайта өңдеуге жарамды. Таза және құрғақ күйінде арнайы қоқыс жәшігіне салыңыз."},
17
+ "glass": {"name": "🍾 Шыны", "recyclable": True, "description": "Шыны бөтелкелер мен банкалар қайта өңделеді. Қағаз жапсырмасын алып тастаудың қажеті жоқ."},
18
+ "metal": {"name": "🔩 Металл", "recyclable": True, "description": "Алюминий және қаңылтыр банкалар сияқты металл заттар қайта өңдеуге жатады."},
19
+ "paper": {"name": "📄 Қағаз", "recyclable": True, "description": "Газеттер, журналдар және кеңсе қағаздары қайта өңделеді. Ластанған немесе майланған қағазды тастамаңыз."},
20
+ "plastic": {"name": "🧴 Пластик", "recyclable": True, "description": "Көптеген пластик бөтелкелер мен контейнерлер қайта өңделеді. Таңбасына (♻️) назар аударыңыз."},
21
+ "trash": {"name": "🗑️ Басқа қоқыс", "recyclable": False, "description": "Бұл зат қайта өңдеуге жарамсыз. Жалпы қоқыс жәшігіне тастаңыз."}
22
+ }
23
+
24
+ # ⭐️ Жаңа өсімдік моделінің жауаптарына сәйкестендірілген сөздік
25
+ PLANT_LABELS_KZ = {
26
+ "Apple__Apple_scab": {"name": "🍎 Алманың қотыр ауруы", "description": "Жапырақтар мен жемістерде қара дақтар пайда болады. Фунгицидтермен өңдеу және түскен жапырақтарды жинау қажет."},
27
+ "Apple__healthy": {"name": "🍏 Сау алма ағашы", "description": "Ауру белгілері байқалмайды. Өсімдік сау."},
28
+ "Tomato__Bacterial_spot": {"name": "🍅 Қызанақтың бактериялық дағы", "description": "Жапырақтарда, сабақтарда және жемістерде ұсақ, сулы дақтар пайда болады. Мыс негізіндегі спрейлер көмектесе алады."},
29
+ "Tomato__healthy": {"name": "🍅 Сау қызанақ", "description": "Ауру белгілері жоқ. Өсімдік жақсы өсіп жатыр."},
30
+ "Potato__Early_blight": {"name": "🥔 Картоптың ерте фитофторозы", "description": "Жапырақтарда сары жиектері бар қара концентрлі дақтар пайда болады. Ауруға төзімді сорттарды отырғызып, фунгицидтер қолданыңыз."},
31
+ "Potato__healthy": {"name": "🥔 Сау картоп", "description": "Өсімдікте ауру белгілері жоқ. Жағдайы жақсы."}
32
+ }
33
+
34
+ # Суретті талдау функциясы
35
+ def analyze_image(mode, image):
36
+ global waste_classifier, plant_classifier
37
+ try:
38
+ if mode == "♻️ Қоқыс":
39
+ if waste_classifier is None:
40
+ print("Жаңа қоқыс тану моделін жүктеу...")
41
+ # ⭐️ ҚАТЕНІ ЖӨНДЕУ: Жаңа, жұмыс істейтін модельге ауыстыру
42
+ waste_classifier = pipeline("image-classification", model="yangy50/garbage-classification", device=device)
43
+
44
+ predictions = waste_classifier(image)
45
+ top_prediction = predictions[0]
46
+ label_en = top_prediction['label']
47
+
48
+ result_kz = WASTE_LABELS_KZ.get(label_en, {"name": "❓ Белгісіз зат", "recyclable": False, "description": "Бұл заттың түрін анықтай алмадым."})
49
+ status = "✅ Қайта өңделеді" if result_kz['recyclable'] else "❌ Өңделмейді"
50
+ score_percent = top_prediction['score'] * 100
51
+
52
+ return (f"**Нәтиже:** {result_kz['name']}\n\n"
53
+ f"**Статус:** {status}\n\n"
54
+ f"**Сипаттама:** {result_kz['description']}\n\n"
55
+ f"_(Сенімділік: {score_percent:.2f}%)_")
56
+
57
+ elif mode == "🌿 Өсімдік":
58
+ if plant_classifier is None:
59
+ print("Жаңа өсімдік ауруларын тану моделін жүктеу...")
60
+ # ⭐️ ЖАҢАРТУ: Бұрынғы модель жақсы, бірақ одан да танымал баламасын қолданамыз
61
+ plant_classifier = pipeline("image-classification", model="nicksttn/plant-disease-detector", device=device)
62
+
63
+ predictions = plant_classifier(image)
64
+ top_prediction = predictions[0]
65
+ label_en = top_prediction['label']
66
+
67
+ result_kz = PLANT_LABELS_KZ.get(label_en, {"name": "❓ Белгісіз ауру", "description": "Ауру түрін анықтай алмадым немесе сөздікте жоқ."})
68
+ score_percent = top_prediction['score'] * 100
69
+
70
+ return (f"**Диагноз:** {result_kz['name']}\n\n"
71
+ f"**Сипаттама:** {result_kz['description']}\n\n"
72
+ f"_(Сенімділік: {score_percent:.2f}%)_")
73
+
74
+ except Exception as e:
75
+ return f"Қате: {str(e)}"
76
+
77
+ # --- Ықшамдалған Gradio интерфейсі (өзгеріссіз) ---
78
+ with gr.Blocks(theme=gr.themes.Soft(), title="AI Assistant") as demo:
79
+ gr.Markdown("## 🌌 AI Көмекші")
80
+
81
+ with gr.Row():
82
+ mode = gr.Radio(
83
+ ["♻️ Қоқыс", "🌿 Өсімдік"],
84
+ label="Режим",
85
+ value="♻️ Қоқыс"
86
+ )
87
+
88
+ image_input = gr.Image(type="pil", label="Сурет")
89
+
90
+ btn = gr.Button("🔍 Талдау", variant="primary")
91
+
92
+ output_text = gr.Markdown(label="Нәтиже")
93
+
94
+ btn.click(analyze_image, inputs=[mode, image_input], outputs=output_text)
95
+
96
+ # Мысалдарды уақытша алып тастауға болады, егер examples папкасы жоқ болса
97
+ # gr.Examples(...)
98
+
99
+ demo.launch()