Projectai / app.py
Noeies's picture
Create app.py
817e245 verified
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()