Noeies commited on
Commit
57d13b4
·
verified ·
1 Parent(s): bab302b

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +108 -0
app.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from transformers import pipeline
3
+ from PIL import Image, ImageDraw
4
+ from gtts import gTTS
5
+ from io import BytesIO
6
+
7
+ # โมเดลตรวจจับหลายอวัยวะ
8
+ model = pipeline("object-detection", model="facebook/detr-resnet-50")
9
+
10
+ # ฐานข้อมูลอวัยวะ 50 ชนิด + คำอธิบายไทย
11
+ organs = {
12
+ "heart": "หัวใจ ❤️ สูบฉีดเลือดไปทั่วร่างกาย",
13
+ "lungs": "ปอด 💨 แลกเปลี่ยนก๊าซในร่างกาย",
14
+ "liver": "ตับ 🍷 กำจัดสารพิษและสร้างน้ำดี",
15
+ "brain": "สมอง 🧠 ควบคุมการทำงานของร่างกาย",
16
+ "stomach": "กระเพาะอาหาร 🍽️ ย่อยอาหาร",
17
+ "kidney": "ไต 💧 กรองของเสียออกจากเลือด",
18
+ "intestine": "ลำไส้ 🌀 ดูดซึมสารอาหาร",
19
+ "pancreas": "ตับอ่อน 💊 สร้างอินซูลิน",
20
+ "spleen": "ม้าม 💉 ทำลายเม็ดเลือดแดงเก่า",
21
+ "bladder": "กระเพาะปัสสาวะ 🚰 เก็บน้ำปัสสาวะ",
22
+ "esophagus": "หลอดอาหาร 🍴 ส่งอาหารจากปากสู่กระเพาะ",
23
+ "trachea": "หลอดลม 🌬️ ส่งอากาศเข้าสู่ปอด",
24
+ "gallbladder": "ถุงน้ำดี 💚 เก็บน้ำดีจากตับ",
25
+ "skin": "ผิวหนัง 🧴 ปกป้องร่างกายและควบคุมอุณหภูมิ",
26
+ "eyes": "ดวงตา 👁️ รับภาพและแสง",
27
+ "ear": "หู 👂 รับเสียงและรักษาสมดุล",
28
+ "nose": "จมูก 👃 รับกลิ่นและช่วยหายใจ",
29
+ "tongue": "ลิ้น 👅 รับรสและช่วยพูด",
30
+ "muscle": "กล้ามเนื้อ 💪 ช่วยเคลื่อนไหวร่างกาย",
31
+ "bone": "กระดูก 🦴 ค้ำจุนและป้องกันอวัยวะภายใน",
32
+ "teeth": "ฟัน 🦷 เคี้ยวอาหารและช่วยพูด",
33
+ "hair": "เส้นผม 💇 ปกป้องหนังศีรษะ",
34
+ "nail": "เล็บ 💅 ปกป้องปลายนิ้ว",
35
+ "thyroid": "ต่อมไทรอยด์ 🧬 ควบคุมการเผาผลาญพลังงาน",
36
+ "adrenal": "ต่อมหมวกไต 🧫 ควบคุมฮอร์โมนความเครียด",
37
+ "pituitary": "ต่อมใต้สมอง 🧩 ควบคุมฮอร์โมนทั่วร่างกาย",
38
+ "hypothalamus": "ไฮโปทาลามัส 🧠 ควบคุมอุณหภูมิและการหิว",
39
+ "small intestine": "ลำไส้เล็ก 🌀 ดูดซึมอาหาร",
40
+ "large intestine": "ลำไส้ใหญ่ 💩 ดูดซึมน้ำและขับของเสีย",
41
+ "rectum": "ทวารหนัก 🚻 ขับของเสียออกจากร่างกาย",
42
+ "ureter": "ท่อไต 🚰 นำน้ำปัสสาวะจากไตไปกระเพาะปัสสาวะ",
43
+ "urethra": "ท่อปัสสาวะ 🚾 ขับปัสสาวะออกจากร่างกาย",
44
+ "ovary": "รังไข่ ⚪ สร้างไข่และฮอร์โมนเพศหญิง",
45
+ "uterus": "มดลูก 🤰 ที่อยู่ของทารกระหว่างตั้งครรภ์",
46
+ "testis": "อัณฑะ ⚽ ผลิตอสุจิและฮอร์โมนเพศชาย",
47
+ "penis": "อวัยวะเพศชาย 🚹",
48
+ "vagina": "ช่องคลอด 🚺",
49
+ "diaphragm": "กะบังลม 💨 ช่วยในการหายใจ",
50
+ "spinal cord": "ไขสันหลัง 🧬 ส่งสัญญาณประสาท",
51
+ "ribs": "กระดูกซี่โครง 🦴 ปกป้องหัวใจและปอด",
52
+ "shoulder": "ไหล่ 💪 ช่วยเคลื่อนไหวแขน",
53
+ "hand": "มือ ✋ ใช้จับและสัมผัสสิ่งของ",
54
+ "foot": "เท้า 🦶 รับน้ำหนักและเคลื่อนไหว",
55
+ "knee": "เข่า 🦵 ช่วยพับขาและเคลื่อนไหว",
56
+ "hip": "สะโพก 🍑 รองรับน้ำหนักส่วนล่าง",
57
+ "appendix": "ไส้ติ่ง 🩺 ส่วนต่อของลำไส้ใหญ่",
58
+ "cornea": "กระจกตา 👁️ ช่วยให้มองเห็นชัด",
59
+ "retina": "จอประสาทตา 🧠 แปลงแสงเป็นสัญญาณภาพ",
60
+ "lungs bronchi": "หลอดลมฝอย 🌬️ ส่งอากาศเข้าสู่ถุงลม"
61
+ }
62
+
63
+ # ฟังก์ชันตรวจจับและสร้างเสียงทีละอวัยวะ
64
+ def detect_click_speak(image):
65
+ img = Image.open(image).convert("RGB")
66
+ draw = ImageDraw.Draw(img)
67
+
68
+ results = model(image)
69
+ info_list = []
70
+ audio_list = []
71
+
72
+ for r in results:
73
+ label = r["label"].lower()
74
+ score = round(r["score"] * 100, 1)
75
+ box = r["box"]
76
+
77
+ draw.rectangle(
78
+ [(box["xmin"], box["ymin"]), (box["xmax"], box["ymax"])],
79
+ outline="red", width=3
80
+ )
81
+ draw.text((box["xmin"], box["ymin"] - 10), label, fill="red")
82
+
83
+ desc = organs.get(label, "ไม่พบในฐานข้อมูลอวัยวะ")
84
+ info_list.append(f"{label} → {desc} ({score}%)")
85
+
86
+ # สร้างเสียงทีละอวัยวะ
87
+ tts = gTTS(text=desc, lang="th")
88
+ audio_bytes = BytesIO()
89
+ tts.write_to_fp(audio_bytes)
90
+ audio_bytes.seek(0)
91
+ audio_list.append(audio_bytes)
92
+
93
+ return img, "\n".join(info_list), audio_list
94
+
95
+ # Gradio Interface
96
+ demo = gr.Interface(
97
+ fn=detect_click_speak,
98
+ inputs=gr.Image(type="filepath", label="📸 อัปโหลดภาพร่างกาย/โมเดลอวัยวะ"),
99
+ outputs=[
100
+ gr.Image(label="ภาพพร้อมกรอบอวัยวะ"),
101
+ gr.Textbox(label="คำอธิบายอวัยวะ"),
102
+ gr.Audio(label="คลิกเพื่อฟังเสียงอวัยวะแต่ละชิ้น", type="file", source="upload", interactive=True, optional=True)
103
+ ],
104
+ title="🔬 ระบบเรียนรู้อวัยวะ Interactive 50 อวัยวะ + พูดไทยทีละชิ้น",
105
+ description="คลิกกรอบอวัยวะเพื่อฟังชื่อและดูคำอธิบายภาษาไทยทีละอวัยวะ"
106
+ )
107
+
108
+ demo.launch()