Create app.py
Browse files
app.py
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gradio as gr
|
| 2 |
+
from PIL import Image, ImageDraw
|
| 3 |
+
|
| 4 |
+
# -----------------------------
|
| 5 |
+
# 50 อวัยวะ + คำอธิบาย
|
| 6 |
+
# -----------------------------
|
| 7 |
+
organs = {
|
| 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 |
+
def create_body_image():
|
| 66 |
+
img = Image.new("RGB", (500, 1000), "white")
|
| 67 |
+
draw = ImageDraw.Draw(img)
|
| 68 |
+
positions = []
|
| 69 |
+
y = 10
|
| 70 |
+
for i in range(50):
|
| 71 |
+
x1, y1 = 50, y
|
| 72 |
+
x2, y2 = 450, y+15
|
| 73 |
+
draw.rectangle([x1, y1, x2, y2], outline="red", width=2)
|
| 74 |
+
positions.append((x1, y1, x2, y2))
|
| 75 |
+
y += 20
|
| 76 |
+
return img, positions
|
| 77 |
+
|
| 78 |
+
img, positions = create_body_image()
|
| 79 |
+
|
| 80 |
+
# -----------------------------
|
| 81 |
+
# ฟังก์ชันตรวจสอบคลิก
|
| 82 |
+
# -----------------------------
|
| 83 |
+
def detect_organ(evt: gr.SelectData):
|
| 84 |
+
x, y = evt.index[0], evt.index[1]
|
| 85 |
+
for i, (x1,y1,x2,y2) in enumerate(positions):
|
| 86 |
+
if x1 <= x <= x2 and y1 <= y <= y2:
|
| 87 |
+
organ_name = list(organs.keys())[i]
|
| 88 |
+
return f"{organ_name}: {organs[organ_name]}"
|
| 89 |
+
return "คลิกบนกรอบอวัยวะเพื่อดูคำอธิบาย"
|
| 90 |
+
|
| 91 |
+
# -----------------------------
|
| 92 |
+
# Gradio Interface
|
| 93 |
+
# -----------------------------
|
| 94 |
+
with gr.Blocks() as demo:
|
| 95 |
+
gr.Markdown("## 🧍 ระบบเรียนรู้อวัยวะ 50 ชิ้น (คลิกที่กรอบอวัยวะ)")
|
| 96 |
+
img_display = gr.Image(value=img, interactive=True)
|
| 97 |
+
output = gr.Textbox(label="ข้อมูลอวัยวะ", interactive=False)
|
| 98 |
+
img_display.select(detect_organ, None, output)
|
| 99 |
+
|
| 100 |
+
demo.launch()
|