File size: 5,803 Bytes
817e245
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import gradio as gr
from PIL import Image, ImageDraw

# -----------------------------
# 50 อวัยวะ + คำอธิบาย
# -----------------------------
organs = {
    "สมอง":"ควบคุมความคิดและร่างกาย 🧠",
    "ตา":"มองเห็น 👁️",
    "หูซ้าย":"รับเสียง 👂",
    "หูขวา":"รับเสียง 👂",
    "จมูก":"ดมกลิ่น 👃",
    "ปาก":"พูดและกิน 👄",
    "ลิ้น":"รับรส 👅",
    "หัวใจ":"สูบฉีดเลือด ❤️",
    "ปอดซ้าย":"แลกเปลี่ยนก๊าซ 💨",
    "ปอดขวา":"แลกเปลี่ยนก๊าซ 💨",
    "ตับ":"กรองของเสีย 🍷",
    "ตับอ่อน":"สร้างอินซูลิน 💊",
    "กระเพาะอาหาร":"ย่อยอาหาร 🍽️",
    "ลำไส้เล็ก":"ดูดซึมอาหาร 🌀",
    "ลำไส้ใหญ่":"ขับของเสีย 💩",
    "ไตซ้าย":"กรองของเสีย 💧",
    "ไตขวา":"กรองของเสีย 💧",
    "ม้าม":"ทำลายเม็ดเลือดเก่า 💉",
    "ถุงน้ำดี":"เก็บน้ำดี 💚",
    "หลอดอาหาร":"ส่งอาหารไปกระเพาะ 🍴",
    "หลอดลม":"ส่งอากาศเข้าสู่ปอด 🌬️",
    "กระเพาะปัสสาวะ":"เก็บปัสสาวะ 🚰",
    "มดลูก":"ที่อยู่ของทารก 🤰",
    "รังไข่ซ้าย":"สร้างไข่ ⚪",
    "รังไข่ขวา":"สร้างไข่ ⚪",
    "อัณฑะซ้าย":"ผลิตอสุจิ ⚽",
    "อัณฑะขวา":"ผลิตอสุจิ ⚽",
    "ช่องคลอด":"ช่องทางสืบพันธุ์ 🚺",
    "อวัยวะเพศชาย":"ช่องทางสืบพันธุ์ 🚹",
    "หัวใจห้องบนซ้าย":"หัวใจส่วนบนซ้าย ❤️",
    "หัวใจห้องบนขวา":"หัวใจส่วนบนขวา ❤️",
    "หัวใจห้องล่างซ้าย":"หัวใจส่วนล่างซ้าย ❤️",
    "หัวใจห้องล่างขวา":"หัวใจส่วนล่างขวา ❤️",
    "ต่อมไทรอยด์":"ควบคุมเมตาบอลิซึม 🧬",
    "ต่อมหมวกไตซ้าย":"ควบคุมฮอร์โมน 🧫",
    "ต่อมหมวกไตขวา":"ควบคุมฮอร์โมน 🧫",
    "ไขสันหลัง":"ส่งสัญญาณประสาท 🧬",
    "กล้ามเนื้อแขน":"เคลื่อนไหวแขน 💪",
    "กล้ามเนื้อขา":"เคลื่อนไหวขา 💪",
    "มือ":"จับสิ่งของ ✋",
    "เท้า":"ทรงตัว 🦶",
    "เข่า":"พับขา 🦵",
    "สะโพก":"รองรับน้ำหนัก 🍑",
    "ไส้ติ่ง":"ส่วนต่อของลำไส้ใหญ่ 🩺",
    "กระจกตา":"ช่วยมองเห็น 👁️",
    "จอประสาทตา":"แปลงแสงเป็นสัญญาณ 🧠",
    "หลอดลมฝอย":"ส่งอากาศสู่ถุงลม 🌬️",
    "หัวใจรวม":"หัวใจรวมทุกส่วน ❤️",
    "ตับรวม":"ตับรวมทุกส่วน 🍷",
    "ปอดรวม":"ปอดรวมทั้งสองข้าง 💨",
    "ลำไส้รวม":"ลำไส้รวมทุกส่วน 🌀",
    "กระเพาะรวม":"กระเพาะรวม 🍽️"
}

# -----------------------------
# สร้างภาพร่างกาย + กรอบอวัยวะ (ตำแหน่งสมมุติ)
# -----------------------------
def create_body_image():
    img = Image.new("RGB", (500, 1000), "white")
    draw = ImageDraw.Draw(img)
    positions = []
    y = 10
    for i in range(50):
        x1, y1 = 50, y
        x2, y2 = 450, y+15
        draw.rectangle([x1, y1, x2, y2], outline="red", width=2)
        positions.append((x1, y1, x2, y2))
        y += 20
    return img, positions

img, positions = create_body_image()

# -----------------------------
# ฟังก์ชันตรวจสอบคลิก
# -----------------------------
def detect_organ(evt: gr.SelectData):
    x, y = evt.index[0], evt.index[1]
    for i, (x1,y1,x2,y2) in enumerate(positions):
        if x1 <= x <= x2 and y1 <= y <= y2:
            organ_name = list(organs.keys())[i]
            return f"{organ_name}: {organs[organ_name]}"
    return "คลิกบนกรอบอวัยวะเพื่อดูคำอธิบาย"

# -----------------------------
# Gradio Interface
# -----------------------------
with gr.Blocks() as demo:
    gr.Markdown("## 🧍 ระบบเรียนรู้อวัยวะ 50 ชิ้น (คลิกที่กรอบอวัยวะ)")
    img_display = gr.Image(value=img, interactive=True)
    output = gr.Textbox(label="ข้อมูลอวัยวะ", interactive=False)
    img_display.select(detect_organ, None, output)

demo.launch()