ระบบแจ้งเตือนการรับประทานยาอัตโนมัติจากภาพฉลากยา
บทคัดย่อ
ปัจจุบันปัญหาการลืมรับประทานยาให้ตรงเวลายังคงเป็นปัญหาเรื้อรังสำหรับผู้สูงอายุและผู้มีปัญหาทางสายตาเนื่องจากบางครั้งอาจจะมีปัญหาทางด้านสายตาทำให้อ่านข้อความบนฉลากยายาก และการลืมที่จะรับประทานยา ถึงแม้ว่าจะมีเทคโนโลยีที่สามารถแปลงข้อมูลรูปภาพกลายเป็นข้อมูลจำพวกข้อความได้ แต่ยังไม่มีการนำมาประยุกต์ใช้กับฉลากยาเพื่อที่จะทำเป็นการแจ้งเตือนให้ผู้ป่วยรับประทานยาให้ตรงเวลา โครงการนี้ประสงค์จะนำเสนอโปรแกรมที่จะเป็นเครื่องมือช่วยแจ้งเตือนให้ผู้ป่วยรับประทานยา โดยดึงข้อมูลจากภาพฉลากยาเท่านั้น ไม่ต้องมีการกรอก โดยหวังว่าช่วยให้ผู้สูงอายุและผู้มีปัญหาทางสายตา ใช้ชีวิตได้สะดวกสบายและมีสุขภาพที่ดียิ่งขึ้น
ผลงาน
ภาพรวมของผลงาน
แอพลิเคชั่นที่พัฒนาจะทำงานผ่าน Line Bot โดยอย่างแรกผู้ใช้จะต้องเพิ่ม Bot เป็นเพื่อน จากนั้นให้ทำการส่งรูปฉลากยาที่ต้องการให้ Bot เตือนตามช่วงเวลาต่างๆ Bot จะทำการ OCR ฉลากยาเพื่อทำการดึงข้อมูลที่จำเป็นสำหรับการแจ้งเตือน เช่น ปริมาณที่ต้องรับประทานในแต่ละครั้ง ความถี่ในการรับประทาน และช่วงเวลาที่ต้องรับประทาน Bot ก็จะทำการถามผู้ใช้กลับเพื่อยืนยันข้อมูลที่อ่านได้อีกครั้ง เมื่อผู้ใช้ทำการยืนยันข้อมูล Bot ก็จะจดจำข้อมูลดังกล่าวและเตรียมการแจ้งเตือนรับประทานยาตามช่วงเวลาของข้อมูลจนกว่าผู้ใช้จะทำการยกเลิกการแจ้งเตือนเมื่อรับประทานจนหมด
องค์ประกอบของผลงาน
องค์ประกอบของระบบประกอบไปด้วย 3 ส่วน ได้แก่
- Line Bot API - เป็น Service ของ Line ที่มีอยู่แล้ว ซึ่งทำหน้าที่เป็นตัวกลางระหว่างผู้ใช้กับ Main Service เมื่อผู้ใช้ส่งข้อความต่างๆ จะทำการ Trigger Web Hook API ให้ส่ง POST Request ไปที่ Main Service และในทางกลับกันเมื่อ Main Service ส่ง POST Request กลับไปให้ Line Bot API ก็จะทำการส่งข้อความกลับหาผู้ใช้ตาม Payload ของ Request นั้น
- OCR Service - เป็น Service ที่ทำหน้าที่ทำการแปลงภาพฉลากยาที่ได้รับให้เป็นข้อมูลบนฉลากยา โดยจะทำการ Preprocessing รูปภาพ จากนั้นก็จะนำเข้ากระบววนการ OCR ด้วย Tesseract Library และ Parsing ข้อมความที่ได้ออกมาเป็นข้อมูลของฉลากยา
- Main Service - เป็น Service ที่ทำหน้าที่โต้ตอบกับผู้ใช้แต่ละคนผ่าน Line Bot API เมื่อ Service ได้รับรูปฉลากยาของผู้ใช้ ก็จะทำการส่งรูปฉลากยาไปให้ OCR Service และนำข้อมูลมาจำช่วงเวลาที่จะต้องทำการแจ้งเตือนผู้ใช้และแจ้งเตือนผู้ใช้เมื่อถึงเวลาที่กำหนด
เครื่องมือและวิธีการที่ใช้
Line Bot API
ใช้ในการสร้าง Line Bot เพื่อเป็นช่องทางในการติดต่อกับผู้ใช้ โดย API ประกอบด้วย 2 API คือ
- WebHook API - เมื่อผู้ใช้ส่งข้อความและรูปภาพไปหาจะทำการส่งข้อมูลต่างๆ ผ่าน HTTP ไปที่ URL ที่กำหนด ซึ่งกำหนดผ่านหน้าเว็บ Line Development โดยกำหนดให้ URL เป็นของ Main Service เพื่อสามารถอ่านข้อความและรูปภาพของผู้ใช้ได้
- Line Bot API - ใช้เมื่อต้องการส่งข้อความหาผู้ใช้ โดย Line จะให้ URL สำหรับให้ Main Service ส่งข้อมูลให้กับผู้ใช้ เมื่อจะต้องตอบกลับผู้ใช้หรือส่งการแจ้งเตือนให้ผู้ใช้ Main Service จะต้องส่งข้อความผ่าน HTTP ไปที่ URL ของ Line Bot API ผู้ใช้ก็จะได้รับข้อความดังกล่าวจาก Line Bot
OpenCV
ใช้สำหรับการทำ Preprocessing รูปภาพก่อนนำไปทำการ OCR
Tesseract OCR Engine
ใช้ในการทำ OCR ดึงข้อมูลข้อความจากภาพฉลากยา
โดย Tesseract สามารถใช้หาตำแหน่งของตัวอักษรและบริเวณที่เป็นตัวอักษรได้ และสามารถตั้งค่า Page Segmentation Method (PSM) ได้หลายแบบ เช่น Fully automatic page segmentation, but no OSD (Orientation and Script Detection).
, Treat the image as a single text line.
เป็นต้น ซึ่งผลลัพธ์ที่ได้ก็จะแตกต่างกันออกไป ยิ่งระบุรายละเอียดของรูปภาพมาเท่าไร ความแม่นยำในการดึงขข้อความก็จะสูงขึ้น ดังนั้นหากทำการค้นหาตำแหน่งของแต่ละบรรทัดของข้อความ แล้วตัดมาเฉพาะส่วนของบรรทัดและทำการ OCR อีกครั้งก็จะได้ข้อความที่มีความแม่นยำสูงขึ้น
Parsing
เราทำการ String Matching รูปแบบข้อความคือ หากต้องการปริมาณที่รับประทาน จะหาข้อความที่ขึ้นต้นด้วย “ครั้งละ” โดยยอมให้มี Edit Distance ไม่เกิน 2 จากนั้นก็จะทำการอ่านตัวเลขหลังจากข้อความดังกล่าว ในทำนองเดียวกัน หากต้องการความถี่ในการรับประทาน จะหาข้อความดังนี้ “สัปดาห์ละ” เมื่อรับประทานรายอาทิตย์, “วันละ” เมื่อรับประทานรายวัน และ “ทุกๆ X ชั่วโมง” เมื่อรับประทานรายชั่วโมง และหากต้องการช่วงเวลาที่รับประทานจะหาข้อความ “ก่อนอาหาร”, “หลังอาหาร”, “ก่อนนอน”, “เช้า”, “กลางวัน” และ “เย็น” โดยคำว่า “เช้า” และ “เย็น” จะยอมให้มี Edit Distance ไม่เกิน 1 เนื่องจากข้อความค่อนข้างสั้น เมื่อข้อความใดข้อความหนึ่ง ก็จะถือว่าเป็นช่วงเวลาที่รับประทาน
Cron
ใช้ในการสร้างกิจกรรมหรืองาน และทำกิจกรรมหรืองานนั้นตามเวลาที่กำหนด
สมาชิก
- ปวิตร เอี่ยมวรวุฒิกุล (5831038121)
- พิริยพงษ์ เลาพงษ์สิต (5831045521)
- รักษิต รักษาสัตย์ (5831060921)
ระบบแจ้งเตือนการรับประทานยาอัตโนมัติจากภาพฉลากยา
บทคัดย่อ
ปัจจุบันปัญหาการลืมรับประทานยาให้ตรงเวลายังคงเป็นปัญหาเรื้อรังสำหรับผู้สูงอายุและผู้มีปัญหาทางสายตาเนื่องจากบางครั้งอาจจะมีปัญหาทางด้านสายตาทำให้อ่านข้อความบนฉลากยายาก และการลืมที่จะรับประทานยา ถึงแม้ว่าจะมีเทคโนโลยีที่สามารถแปลงข้อมูลรูปภาพกลายเป็นข้อมูลจำพวกข้อความได้ แต่ยังไม่มีการนำมาประยุกต์ใช้กับฉลากยาเพื่อที่จะทำเป็นการแจ้งเตือนให้ผู้ป่วยรับประทานยาให้ตรงเวลา โครงการนี้ประสงค์จะนำเสนอโปรแกรมที่จะเป็นเครื่องมือช่วยแจ้งเตือนให้ผู้ป่วยรับประทานยา โดยดึงข้อมูลจากภาพฉลากยาเท่านั้น ไม่ต้องมีการกรอก โดยหวังว่าช่วยให้ผู้สูงอายุและผู้มีปัญหาทางสายตา ใช้ชีวิตได้สะดวกสบายและมีสุขภาพที่ดียิ่งขึ้น
ผลงาน
ภาพรวมของผลงาน
แอพลิเคชั่นที่พัฒนาจะทำงานผ่าน Line Bot โดยอย่างแรกผู้ใช้จะต้องเพิ่ม Bot เป็นเพื่อน จากนั้นให้ทำการส่งรูปฉลากยาที่ต้องการให้ Bot เตือนตามช่วงเวลาต่างๆ Bot จะทำการ OCR ฉลากยาเพื่อทำการดึงข้อมูลที่จำเป็นสำหรับการแจ้งเตือน เช่น ปริมาณที่ต้องรับประทานในแต่ละครั้ง ความถี่ในการรับประทาน และช่วงเวลาที่ต้องรับประทาน Bot ก็จะทำการถามผู้ใช้กลับเพื่อยืนยันข้อมูลที่อ่านได้อีกครั้ง เมื่อผู้ใช้ทำการยืนยันข้อมูล Bot ก็จะจดจำข้อมูลดังกล่าวและเตรียมการแจ้งเตือนรับประทานยาตามช่วงเวลาของข้อมูลจนกว่าผู้ใช้จะทำการยกเลิกการแจ้งเตือนเมื่อรับประทานจนหมด
องค์ประกอบของผลงาน
องค์ประกอบของระบบประกอบไปด้วย 3 ส่วน ได้แก่
เครื่องมือและวิธีการที่ใช้
Line Bot API
ใช้ในการสร้าง Line Bot เพื่อเป็นช่องทางในการติดต่อกับผู้ใช้ โดย API ประกอบด้วย 2 API คือ
OpenCV
ใช้สำหรับการทำ Preprocessing รูปภาพก่อนนำไปทำการ OCR
Tesseract OCR Engine
ใช้ในการทำ OCR ดึงข้อมูลข้อความจากภาพฉลากยา
โดย Tesseract สามารถใช้หาตำแหน่งของตัวอักษรและบริเวณที่เป็นตัวอักษรได้ และสามารถตั้งค่า Page Segmentation Method (PSM) ได้หลายแบบ เช่น
Fully automatic page segmentation, but no OSD (Orientation and Script Detection).
,Treat the image as a single text line.
เป็นต้น ซึ่งผลลัพธ์ที่ได้ก็จะแตกต่างกันออกไป ยิ่งระบุรายละเอียดของรูปภาพมาเท่าไร ความแม่นยำในการดึงขข้อความก็จะสูงขึ้น ดังนั้นหากทำการค้นหาตำแหน่งของแต่ละบรรทัดของข้อความ แล้วตัดมาเฉพาะส่วนของบรรทัดและทำการ OCR อีกครั้งก็จะได้ข้อความที่มีความแม่นยำสูงขึ้นParsing
เราทำการ String Matching รูปแบบข้อความคือ หากต้องการปริมาณที่รับประทาน จะหาข้อความที่ขึ้นต้นด้วย “ครั้งละ” โดยยอมให้มี Edit Distance ไม่เกิน 2 จากนั้นก็จะทำการอ่านตัวเลขหลังจากข้อความดังกล่าว ในทำนองเดียวกัน หากต้องการความถี่ในการรับประทาน จะหาข้อความดังนี้ “สัปดาห์ละ” เมื่อรับประทานรายอาทิตย์, “วันละ” เมื่อรับประทานรายวัน และ “ทุกๆ X ชั่วโมง” เมื่อรับประทานรายชั่วโมง และหากต้องการช่วงเวลาที่รับประทานจะหาข้อความ “ก่อนอาหาร”, “หลังอาหาร”, “ก่อนนอน”, “เช้า”, “กลางวัน” และ “เย็น” โดยคำว่า “เช้า” และ “เย็น” จะยอมให้มี Edit Distance ไม่เกิน 1 เนื่องจากข้อความค่อนข้างสั้น เมื่อข้อความใดข้อความหนึ่ง ก็จะถือว่าเป็นช่วงเวลาที่รับประทาน
Cron
ใช้ในการสร้างกิจกรรมหรืองาน และทำกิจกรรมหรืองานนั้นตามเวลาที่กำหนด
สมาชิก