Noeies commited on
Commit
f7aeb9c
·
verified ·
1 Parent(s): cbe13ef

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +95 -0
app.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from PIL import Image, ImageDraw
3
+
4
+ # -----------------------------
5
+ # 1️⃣ ใส่ไฟล์ภาพของคุณ
6
+ # -----------------------------
7
+ img_path = "body.png" # <-- ใส่ชื่อไฟล์ภาพของคุณ
8
+ img = Image.open(img_path)
9
+
10
+ # -----------------------------
11
+ # 2️⃣ กำหนด list ของอวัยวะ 50 ชิ้น + กรอบ + คำอธิบาย
12
+ # -----------------------------
13
+ # รูปแบบ: "ชื่ออวัยวะ": [(x1,y1,x2,y2), "คำอธิบาย"]
14
+ organs = {
15
+ "สมอง": [(180,10,270,80), "ควบคุมความคิด 🧠"],
16
+ "ต่อมไทรอยด์": [(210,90,270,120), "ควบคุมเมตาบอลิซึม 🧬"],
17
+ "ตาซ้าย": [(150,40,180,70), "การมองเห็น 👁️"],
18
+ "ตาขวา": [(270,40,300,70), "การมองเห็น 👁️"],
19
+ "หูซ้าย": [(120,40,150,80), "การได้ยิน 👂"],
20
+ "หูขวา": [(300,40,330,80), "การได้ยิน 👂"],
21
+ "จมูก": [(210,70,240,100), "ดมกลิ่น 👃"],
22
+ "ปาก": [(200,100,250,130), "รับอาหารและสื่อสาร 👄"],
23
+ "ฟัน": [(200,105,250,115), "บดเคี้ยวอาหาร 🦷"],
24
+ "ลิ้น": [(210,120,240,130), "รับรส 👅"],
25
+ "คอหอย": [(200,140,250,160), "ทางเดินอาหารและหายใจ"],
26
+ "หัวใจ": [(220,300,280,400), "สูบฉีดเลือด ❤️"],
27
+ "ปอดซ้าย": [(180,400,250,550), "แลกเปลี่ยนก๊าซ 💨"],
28
+ "ปอดขวา": [(250,400,320,550), "แลกเปลี่ยนก๊าซ 💨"],
29
+ "ตับ": [(200,550,300,650), "กรองของเสีย 🍷"],
30
+ "ไตซ้าย": [(150,650,220,720), "กรองของเสีย 💧"],
31
+ "ไตขวา": [(280,650,350,720), "กรองของเสีย 💧"],
32
+ "กระเพาะอาหาร": [(200,580,300,620), "ย่อยอาหาร 🍽️"],
33
+ "ลำไส้เล็ก": [(180,720,320,820), "ดูดซึมอาหาร 🌀"],
34
+ "ลำไส้ใหญ่": [(180,820,320,900), "ขับของเสีย 💩"],
35
+ "ม้าม": [(150,500,200,550), "ทำลายเม็ดเลือดเก่า 💉"],
36
+ "ตับอ่อน": [(300,500,350,550), "สร้างอินซูลิน 💊"],
37
+ "ถุงน้ำดี": [(270,550,300,580), "เก็บน้ำดี 💚"],
38
+ "กระเพาะปัสสาวะ": [(200,900,300,950), "เก็บปัสสาวะ 🚰"],
39
+ "มดลูก": [(220,950,280,990), "ที่อยู่ของทารก 🤰"],
40
+ "รังไข่ซ้าย": [(180,930,220,970), "สร้างไข่ ⚪"],
41
+ "รังไข่ขวา": [(280,930,320,970), "สร้างไข่ ⚪"],
42
+ "อัณฑะซ้าย": [(180,950,220,990), "ผลิตอสุจิ ⚽"],
43
+ "อัณฑะขวา": [(280,950,320,990), "ผลิตอสุจิ ⚽"],
44
+ "กระดูกสันหลัง": [(210,150,250,550), "รองรับร่างกาย 🦴"],
45
+ "กระดูกซี่โครง": [(180,300,320,400), "ป้องกันอวัยวะสำคัญ 🦴"],
46
+ "กล้ามเนื้อแขนซ้าย": [(120,400,180,600), "เคลื่อนไหวแขน 💪"],
47
+ "กล้ามเนื้อแขนขวา": [(320,400,380,600), "เคลื่อนไหวแขน 💪"],
48
+ "กล้ามเนื้อขาซ้าย": [(150,900,220,1050), "เคลื่อนไหวขา 💪"],
49
+ "กล้ามเนื้อขาขวา": [(280,900,350,1050), "เคลื่อนไหวขา 💪"],
50
+ "กระดูกเชิงกราน": [(180,850,320,900), "รองรับอวัยวะภายใน 🦴"],
51
+ "หัวไหล่ซ้าย": [(180,200,220,300), "เคลื่อนไหวแขน 🦴"],
52
+ "หัวไหล่ขวา": [(280,200,320,300), "เคลื่อนไหวแขน 🦴"],
53
+ "มือซ้าย": [(100,600,160,700), "จับสิ่งของ ✋"],
54
+ "มือขวา": [(340,600,400,700), "จับสิ่งของ ✋"],
55
+ "เท้าซ้าย": [(150,1050,220,1120), "ทรงตัวและเดิน 👣"],
56
+ "เท้าขวา": [(280,1050,350,1120), "ทรงตัวและเดิน 👣"],
57
+ "ไหล่": [(200,200,300,220), "เชื่อมแขนและตัว"],
58
+ "ลำคอ": [(210,120,250,140), "ผ่านอาหารและอากาศ"],
59
+ "กระดูกก้นกบ": [(200,1050,250,1080), "เชื่อมกับกระดูกสันหลัง"],
60
+ "กระดูกสะโพกซ้าย": [(150,850,200,900), "รองรับน้ำหนักร่างกาย"],
61
+ "กระดูกสะโพกขวา": [(300,850,350,900), "รองรับน้ำหนักร่างกาย"],
62
+ "ข้อศอกซ้าย": [(140,500,180,550), "ยืดและงอแขน"],
63
+ "ข้อศอกขวา": [(320,500,360,550), "ยืดและงอแขน"],
64
+ "เข่าซ้าย": [(160,900,200,950), "งอและเหยียดขา"],
65
+ "เข่าขวา": [(300,900,340,950), "งอและเหยียดขา"]
66
+ }
67
+
68
+ # -----------------------------
69
+ # วาดกรอบบนภาพ
70
+ # -----------------------------
71
+ draw = ImageDraw.Draw(img)
72
+ for name, (box, desc) in organs.items():
73
+ draw.rectangle(box, outline="red", width=2)
74
+
75
+ # -----------------------------
76
+ # ฟังก์ชันตรวจสอบคลิก
77
+ # -----------------------------
78
+ def detect_organ(evt: gr.SelectData):
79
+ x, y = evt.index[0], evt.index[1]
80
+ for name, (box, desc) in organs.items():
81
+ x1, y1, x2, y2 = box
82
+ if x1 <= x <= x2 and y1 <= y <= y2:
83
+ return f"{name}: {desc}"
84
+ return "คลิกบนกรอบอวัยวะเพื่อดูคำอธิบาย"
85
+
86
+ # -----------------------------
87
+ # Gradio Interface
88
+ # -----------------------------
89
+ with gr.Blocks() as demo:
90
+ gr.Markdown("## 🧍 คลิกบนกรอบอวัยวะเพื่อดูคำอธิบาย")
91
+ img_display = gr.Image(value=img, interactive=True)
92
+ output = gr.Textbox(label="ข้อมูลอวัยวะ")
93
+ img_display.select(detect_organ, None, output)
94
+
95
+ demo.launch()