โปรแกรมแปลภาษามือเบื้องต้นด้วยการประมวณผลภาพ python(Basic HandSign Translator with Python)

ผู้เขียนบทความ :
1.นายพันธ์เทวะ อุบล COE#16
2.นายปรเมศวร์ สมนุกิจ COE#16
3.นายกษิดิศ เยาว์นุ่น COE#16
4.นายดนุเดช จันทร์ดำ COE#16

คณะวิศวกรรมศาสตร์ : สาขาวิศวกรรมคอมพิวเตอร์

วิชา : การโปรแกรมคอมพิวเตอร์ขั้นสูง

1.ความเป็นมา

ปัจจุบันการสื่อสารนั้นเป็นสิ่งสำคัญต่อการใช้ชีวิตของมนุษย์ซึ่งไม่สามารถขาดไปได้จากการใช้ชีวิตในยุคสมัยปัจจุบัน การสื่อสารเป็นเหมือนสิทธิ์พื้นฐานของการเป็นมนุษย์อารยชนที่มนุษย์ทุกคนควรเข้าถึงได้ แต่สำหรับผู้ที่มีความบกพร่องของการได้ยินนั้นไม่สามารถสื่อสารได้ปกติจึงเหมือนบุคคลเหล่านี้ได้ถูกพรากความเป็นมนุษย์ไป แต่การมีอยู่ของภาษามือนั้นทำให้การสื่อสารของผู้มีความบกพร่องของการได้ยินนั้นเป็นไปได้อีกครั้ง แต่ปัญหาของภาษามือนั้นคือการที่เป็นภาษาที่คนกลุ่มน้อยเท่านั้นที่จะเรียนรู้และทำความเข้าใจภาษานี้หากไม่เป็นผู้มีความบกพร่องของการได้ยินเอง จึงทำให้การที่คนที่ไม่มีความรู้ในภาษามือเกิดปัญหาในการสื่อสารกับผู้มีความบกพร่องของการได้ยิน

ซึ่งด้วยเหตุนี้จึงทำให้ผู้จัดทำได้สร้างระบบแปลภาษามือโปรแกรมแปลภาษามือเบื้องต้นด้วยการประมวณผลภาพ python เพื่อแก้ปัญหานี้ การใช้การประมวณผลภาพของ python เพื่อแปลภาษามือได้นั้นเนื่องจากภาษามือนั้นประกอบไปด้วยตำแหน่งของมือ การเคลื่อนไหวของมือและท่าทางของมือเพื่อประกอบเป็นคำออกมา ซึ่งการใช้ระบบประมวณผลภาพที่สามารถตรวจจับการเปลี่ยนแปลงต่างของมือจึงทำให้สามารถแปลข้อมูลต่าง ๆ นั้นเป็นภาษาที่ผู้ใช้เข้าใจได้

2.วัตถุประสงค์


เพื่อพัฒนาระบบแปลภาษามือโดยใช้การประมวณผลภาพผ่านโปรแกรม Python

3.ขอบเขตการโปรเจค

3.1.สามารถแปลภาษามือขั้นพื้นฐานได้
3.2.สามารถจับการเคลื่อนไหวของมือได้อย่างแม่นยำ
3.3.ใช้ภาษาPythonในการประมวลผลภาพและแปลภาษามือ

4.ประโยช์นที่คิดว่าจะได้รับ

4.1.ได้ศึกษาและเข้าใจในการเขียนโค๊ด Python เพื่อนำมาปรุยก์ใช้
4.2.สามารถพัฒนาจากโครงงานนี้ได้ในอนาคตมากยิ่งขึ้น
4.3.สามารถพัฒนาทักษะให้กับผู้เรียนได้

5. ความรู้ที่เกี่ยวข้อง

โปรแกรมนี้ใช้โมดูลและไลบรารีหลายตัวเพื่อช่วยในการพัฒนาและทำงานของโปรแกรมได้อย่างมีประสิทธิภาพ โดยรายละเอียดของแต่ละโมดูลและไลบรารีที่สำคัญมีดังนี้:

5.1. csv – ใช้ในการอ่านและเขียนข้อมูลในรูปแบบไฟล์ CSV (Comma-Separated Values) ซึ่งเป็นรูปแบบข้อมูลที่นิยมใช้ในการจัดเก็บข้อมูลที่มีโครงสร้างอย่างง่าย เช่น ค่าตำแหน่งจุดของมือที่ได้จาก MediaPipe โปรแกรมนี้ใช้โมดูล csv ในการบันทึกค่าตำแหน่งของมือในแต่ละเฟรมลงในไฟล์ CSV เพื่อใช้วิเคราะห์และตรวจสอบผลในภายหลัง หรือใช้เป็นข้อมูลสำหรับฝึกโมเดลการแปลภาษามือ

5.2. copy – โมดูลนี้ใช้สำหรับการสร้างสำเนาของออบเจ็กต์ใน Python โปรแกรมนี้อาจต้องใช้การสร้างสำเนาข้อมูลที่ได้จากการตรวจจับตำแหน่งของจุดบนมือในแต่ละเฟรมเพื่อนำไปใช้วิเคราะห์หรือเปรียบเทียบในกรณีที่มีการเปลี่ยนแปลงค่า หรือเมื่อทำงานกับข้อมูลหลายชุดพร้อมกัน การใช้โมดูล copy โดยเฉพาะวิธีการ deepcopy ช่วยให้โปรแกรมสร้างสำเนาที่ไม่เชื่อมโยงกับออบเจ็กต์ต้นฉบับ ทำให้สามารถปรับเปลี่ยนข้อมูลได้โดยไม่กระทบกับข้อมูลเดิม

5.3. argparse – ใช้สำหรับจัดการการรับพารามิเตอร์จากบรรทัดคำสั่ง (Command Line Arguments) เพื่อเพิ่มความยืดหยุ่นในการทำงานของโปรแกรม ตัวอย่างเช่น ผู้ใช้อาจระบุไฟล์วิดีโอหรือกล้องที่ต้องการใช้ในการรับภาพ หรือระบุโหมดการทำงานของโปรแกรมเช่น โหมดการทดสอบ หรือโหมดแปลภาษามือแบบเรียลไทม์ argparse ช่วยให้โปรแกรมสามารถรับพารามิเตอร์เหล่านี้ได้ง่ายและเป็นระบบ

5.4. itertools – ไลบรารีนี้มีเครื่องมือมากมายสำหรับการทำงานกับข้อมูลในรูปแบบ iterable ซึ่งโปรแกรมนี้อาจใช้ itertools เพื่อสร้างชุดข้อมูลที่ซับซ้อนจากข้อมูลที่ตรวจจับได้ เช่น การจับคู่ตำแหน่งของจุดต่างๆ บนมือในรูปแบบต่างๆ เพื่อนำไปวิเคราะห์ หรือการวนลูปเพื่อเปรียบเทียบค่าตำแหน่งของจุดในหลายๆ เฟรม

5.5. collections – ประกอบด้วยโครงสร้างข้อมูลแบบพิเศษเพื่อจัดการข้อมูล – Counter: ใช้สำหรับนับจำนวนของออบเจ็กต์หรือค่าที่ปรากฏใน iterable ซึ่งจะมีประโยชน์ในการนับจำนวนครั้งของการเคลื่อนไหวมือแต่ละรูปแบบ เช่น การนับจำนวนการโบกมือหรือการแสดงสัญลักษณ์ซ้ำๆ – deque: ใช้เป็นโครงสร้างข้อมูลแบบคิว (Queue) ที่มีประสิทธิภาพสูงในการเข้าถึงหรือแก้ไขข้อมูลทั้งจากด้านหน้าและด้านหลัง ทำให้เหมาะสำหรับการเก็บค่าตำแหน่งของมือในหลายช่วงเวลาเพื่อใช้ในการวิเคราะห์เฟรมต่อเฟรม (Frame-by-Frame)

5.6. cv2 (OpenCV) – OpenCV เป็นไลบรารีสำหรับการประมวลผลภาพและวิดีโอที่มีฟังก์ชันหลากหลาย โปรแกรมนี้ใช้ OpenCV เพื่อรับภาพจากกล้องหรือไฟล์วิดีโอ การประมวลผลภาพที่ได้มา และการวาดจุดที่ MediaPipe ตรวจจับได้ลงบนเฟรมภาพ รวมถึงการแสดงผลภาพแบบเรียลไทม์ ตัวอย่างการใช้งาน เช่น การวาดจุดตำแหน่งของข้อนิ้วและปลายนิ้วลงบนภาพวิดีโอ และการติดตามการเคลื่อนไหวของมือเพื่อนำไปแปลเป็นสัญลักษณ์ภาษามือ

5.7. numpy – ไลบรารีที่ทรงพลังสำหรับการคำนวณเชิงตัวเลขและการจัดการข้อมูลในรูปแบบของอาเรย์ (Array) โปรแกรมนี้ใช้ numpy ในการจัดเก็บและคำนวณค่าตำแหน่งของจุดบนมือที่ได้รับจาก MediaPipe ฟังก์ชันของ numpy เช่น การคำนวณค่าระยะห่างระหว่างจุด การคำนวณมุมหรือการคำนวณเชิงเวกเตอร์ ช่วยให้โปรแกรมสามารถวิเคราะห์ตำแหน่งและลักษณะการเคลื่อนไหวของมือได้อย่างแม่นยำและรวดเร็ว

5.8. mediapipe – MediaPipe เป็นไลบรารีที่พัฒนาโดย Google สำหรับการตรวจจับและติดตามตำแหน่งของจุดต่างๆ บนร่างกาย เช่น ใบหน้า มือ และร่างกาย โปรแกรมนี้ใช้ MediaPipe Hand เพื่อตรวจจับจุดบนมือโดยเฉพาะ เช่น ข้อนิ้ว ข้อมือ และปลายนิ้ว ซึ่งเป็นข้อมูลสำคัญในการวิเคราะห์การแปลภาษามือ การใช้ MediaPipe ทำให้โปรแกรมสามารถทำงานได้แบบเรียลไทม์และมีความแม่นยำสูง

5.9. PIL (Python Imaging Library) – PIL เป็นไลบรารีสำหรับการสร้างและปรับแต่งภาพ โปรแกรมนี้ใช้ PIL เพื่อเพิ่มข้อความลงบนภาพที่แสดงผลในแบบเรียลไทม์ เช่น การแสดงข้อความที่แปลจากภาษามือที่ตรวจจับได้ เพื่อให้ผู้ใช้งานสามารถเห็นผลลัพธ์ในทันที ฟังก์ชันของ PIL ช่วยให้สามารถจัดรูปแบบ ขนาด และตำแหน่งของข้อความได้ตามต้องการ

สรุป

โค้ดนี้จะเกี่ยวข้องกับการประมวลผลภาพจากกล้องหรือวิดีโอแบบเรียลไทม์ ซึ่งใช้ OpenCV และ Mediapipe ในการตรวจจับและติดตามวัตถุหรือส่วนของมือ เพื่อทำการแปลจากท่าทางของมือที่ได้เป็นคำใดๆที่มีตำแหน่งใกล้เคียงกับมือที่ตรวจจับได้บนหน้าจอ

6. การดำเนินงาน

ผังงานการทำงานของระบบ

7. วิธีการใช้งานโปรแกรม

  • เริ่มการเรียกใช้โปรแกรม Python
  • 1.การใช้งานโปรแกรม
  • 1.1เปิดโฟลเดอร์ไฟล์ของโปรแกรมในvscode
  • 1.2เปิดโปรแกรมด้วย python app.py ในterminal ของ vscode
  • 1.3สามารถเริ่มใช้โปรแกรมได้เลยเมื่อหน้าต่างโปรแกรมขึ้นมาบนหน้าจอ

  • 2.การฝึกคำใหม่ให้โปรแกรม
  • 2.1ก่อนแรกเปิดโปรแกรมด้วย python app.py ในterminal ของ vscode
  • 2.2จากนั้นให้กดปุ่ม k เพื่อเปิดโหมดการบันทึก
  • 2.3ทำการกดปุ่มเลขที่เราต้องการเพื่อบันทึกท่าทางมือสำหรับตัวเลขนั้น
  • 2.4จากนั้นข้อมูลท่าทางจะถูกบันทึกลงในไฟล์ keypoint.csv
  • 2.5หลังจากนั้นให้เราไปที่ไฟล์ keypoint_classifier_lable.csv เพื่อทำการเพิ่มความหมายของท่าทางที่เราบันทึกไปโดยคำแรกจะเริ่มที่เลข 0
  • 2.6จากนั้นให้เปิดไฟล์ keypoint_clssification.ipynb ใน jupyterlab แล้วแก้ไขจำนวน NUM_CLASS เท่ากับจำนวนท่าทางที่เรามี
  • 2.7หลังจากนั้นก็ทำการ restart kernal and run all cells ก็จะทำการเริ่มการฝึกคำใหม่ให้โปรแกรม
  • 2.8เมื่อกระบวนการเสร็จสิ้นแล้วคำใหม่ที่ถูกฝึกจะสามารถใช้ได้ในโปรแกรมเลยทันที

8. การทดลอง

ทดลองนำระบบแปลภาษามือเบื้องต้นด้วยการประมวณผลภาพ python ให้ทำงานโดยรับเข้าวิดีโอจากWEBCAM โดยทำการทดลองทั้งหมด 20 คำ โดยทำการทดสอบคำละ3ครั้ง

8.1 ผลการทดลอง

9 เทคนิกการประยุคเพื่อเพิ่มประสิทธิภาพมากขึ้น

การประยุกต์เทคนิคเพื่อเพิ่มประสิทธิภาพของโปรแกรมแปลภาษามือเบื้องต้นด้วย Python โปรแกรมแปลภาษามือที่พัฒนาขึ้นใช้ MediaPipe สำหรับตรวจจับตำแหน่งจุดต่างๆ ของมือและทำการแปลเป็นคำที่ใกล้เคียงที่สุด อย่างไรก็ตาม โปรแกรมยังมีข้อจำกัดในการตรวจจับการเคลื่อนไหวของมือและตำแหน่งของมือบนร่างกาย ซึ่งเป็นปัจจัยสำคัญในการแปลภาษามือให้แม่นยำยิ่งขึ้น รายงานนี้เสนอเทคนิคและแนวทางการพัฒนาเพิ่มเติมเพื่อปรับปรุงความสามารถและประสิทธิภาพของโปรแกรม ดังนี้

9.1. การเพิ่มความสามารถในการตรวจจับการเคลื่อนไหวของมือ ปัญหาปัจจุบัน: โปรแกรมสามารถตรวจจับเพียงตำแหน่งจุดต่างๆ ของมือได้เท่านั้น แต่ยังไม่สามารถตรวจจับและแปลการเคลื่อนไหวของมือได้ เช่น การเคลื่อนไหวไปทางซ้าย-ขวา การหมุนข้อมือ หรือการโบกมือขึ้น-ลง แนวทางการพัฒนา: การวิเคราะห์เฟรมต่อเฟรม: บันทึกค่าตำแหน่งจุดต่างๆ ของมือในหลายเฟรมและวิเคราะห์การเปลี่ยนแปลงตำแหน่งเพื่อระบุทิศทางและลักษณะการเคลื่อนไหว การวิเคราะห์ข้อมูลลำดับเวลา (Time Series Analysis): ใช้เทคนิคการวิเคราะห์ข้อมูลที่เกิดขึ้นในลำดับเวลาเพื่อจดจำและระบุรูปแบบการเคลื่อนไหวของมือ เช่น การหมุนมือหรือการกวาดมือในทิศทางต่างๆ

9.2. การตรวจจับตำแหน่งของมือบนร่างกาย ปัญหาปัจจุบัน: โปรแกรมไม่สามารถระบุได้ว่ามืออยู่ในตำแหน่งใดบนร่างกาย เช่น ใกล้ใบหน้า อก หรือเอว ซึ่งมีผลต่อความหมายของภาษามือ แนวทางการพัฒนา: การใช้ MediaPipe Holistic Model: MediaPipe Holistic สามารถตรวจจับทั้งใบหน้า มือ และร่างกายได้พร้อมกัน การใช้งานโมเดลนี้จะทำให้โปรแกรมสามารถวิเคราะห์ตำแหน่งของมือในความสัมพันธ์กับส่วนต่างๆ ของร่างกายได้ การวิเคราะห์ตำแหน่งสัมพัทธ์: สร้างระบบวิเคราะห์ตำแหน่งสัมพัทธ์ของมือกับจุดสำคัญอื่นๆ ของร่างกาย เช่น หัว ไหล่ หรือเอว เพื่อระบุว่ามืออยู่ในตำแหน่งใด และใช้ข้อมูลเหล่านี้ในการแปลภาษามือ

9.3. การใช้ Machine Learning เพื่อเพิ่มประสิทธิภาพ ปัญหาปัจจุบัน: โปรแกรมอาจยังไม่สามารถแปลภาษามือได้อย่างแม่นยำเมื่อมีการเปลี่ยนแปลงตำแหน่งหรือการเคลื่อนไหว แนวทางการพัฒนา: การเก็บรวบรวมข้อมูลเพิ่มเติม: บันทึกการเคลื่อนไหวภาษามือในหลายรูปแบบและตำแหน่งเพื่อนำไปใช้ฝึกโมเดล Machine Learning ที่มีความซับซ้อน เช่น Recurrent Neural Networks (RNN) หรือ Long Short-Term Memory (LSTM) เพื่อให้โปรแกรมสามารถจดจำรูปแบบที่ซับซ้อนมากขึ้น การใช้ Transfer Learning: ใช้โมเดลที่ฝึกมาแล้วบนฐานข้อมูลขนาดใหญ่เพื่อช่วยให้การฝึกของโปรแกรมเร็วขึ้นและมีความแม่นยำสูงขึ้น

9.4. การเพิ่มข้อมูล (Data Augmentation) ปัญหาปัจจุบัน: การฝึกโมเดล Machine Learning ต้องการข้อมูลที่หลากหลาย แต่การเก็บข้อมูลจริงในปริมาณมากอาจใช้เวลาและทรัพยากร แนวทางการพัฒนา: การใช้เทคนิค Data Augmentation: ใช้การเพิ่มข้อมูลเสมือนจริง เช่น การหมุนมือ การปรับเปลี่ยนแสงและเงา หรือการเพิ่มการเคลื่อนไหวเสมือน เพื่อเพิ่มปริมาณและความหลากหลายของข้อมูลให้เพียงพอต่อการฝึกโมเดล การพัฒนาในแนวทางเหล่านี้จะทำให้โปรแกรมสามารถตรวจจับและแปลความหมายของภาษามือได้อย่างมีประสิทธิภาพมากขึ้น และสามารถนำไปประยุกต์ใช้ในสถานการณ์จริงที่มีความซับซ้อนมากกว่าเดิมได้อย่างมีประสิทธิภาพ

10. สรุปผลและข้อเสนอแนะ

10.1 สรุปผล: จากการทดลองพบว่า โปรแกรมแปลภาษามือเบื้องต้นที่ใช้การประมวลผลภาพด้วย Python สามารถตรวจจับและแปลภาษามือในระดับพื้นฐานได้อย่างมีประสิทธิภาพ อย่างไรก็ตาม โปรแกรมยังคงมีข้อจำกัดในกรณีที่ท่าทางภาษามือมีความใกล้เคียงกันมาก ทำให้ระบบอาจแปลผิดพลาดได้ นอกจากนี้ หากมือถูกบดบังหรือบังส่วนหนึ่ง จะทำให้การตรวจจับไม่สมบูรณ์ ส่งผลให้ผลลัพธ์ไม่ถูกต้องเช่นกัน

10.2ข้อเสนอแนะ: ประยุกต์ระบบให้สามารถตรวจจับการเคลื่อนไหวและตรวจจับตำแหน่งของมือบนร่างกายได้ เพื่อเพิ่มประสิทธิภาพและความแม่นยำของโปรแกรมในการแปลภาษามือ

11. ข้อมูลอ้างอิง

11.1 รหัสต้นฉบับ
KazuhitoTakahashi(2566).hand gesture recognition using mediapipe จาก https://github.com/Kazuhito00/hand-gesture-recognition-using-mediapipe
11.2 วิดีโอที่เกี่ยวข้อง
https://www.youtube.com/watch?v=a99p_fAr6e4&list=PL0FM467k5KSyt5o3ro2fyQGt-6zRkHXRv
11.3 ฐานข้อมูลภาษามือไทย
https://www.th-sl.com/?openExternalBrowser=1&fbclid=IwY2xjawF23eBleHRuA2FlbQIxMAABHZers8EytYpU3viF8RsJgBpcVYCngc6CguEcG0GweHoB-aLbB1CGJTntFA_aem_5MDDis5F677B1oTX-SladA

วิดีโอการทำงานของระบบโปรแกรมแปลภาษามือเบื้องต้นด้วยการประมวณผลภาพ

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *