|
|
import gradio as gr |
|
|
from PIL import Image, ImageDraw |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 "คลิกบนกรอบอวัยวะเพื่อดูคำอธิบาย" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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() |