ผู้เขียนบทความ:นายภูรินทร์ วงค์สวัสดิ์ CoE#034
คณะวิศวกรรมศาสตร์:สาขาวิศวกรรมคอมพิวเตอร์
วิชา:04-513-201 การโปรแกรมคอมพิวเตอร์ขั้นสูง 1/2566
1.ความเป็นมา
เนื่องจากตอนออกกำลังกายโดยการยกดัมเบลของผม ผมจะยกไปหลายเซ็ตทำให้มีอาการเหนื่อยจึงไม่สามารถจำได้ว่ายกไปกี่ครั้ง ดั้งนั้นการมีอะไรมาช่วยนับการยกดัมเบลของผมจึงช่วยให้ผมมีประสิทธิภาพมากขึ้นในการออกกำลังกาย
2.วัตถุประสงค์
1.เพื่อศึกษาและพัฒนาทักษะในการเขียนภาษา Python
2.เพื่อนําเทคนิคการประมวลผลภาพมาประยุกต์ใช้งานได้จริง
3.เพื่อนำความรู้ในการเขียนภาษา Python มาใช้งานได้จริง
3.ขอบเขต
1.ระบบสามารถตรวจจับจำนวนครั้งในการยกดัมเบลได้
2.สามารถตรวจจับการเคลื่อนไหวแบบ Real time
3.โปรแกรมพัฒนาด้วยภาษา Python
4.ประโยชน์ที่คาดว่าจะได้รับ
1.สามารถบันทึกจำนวนครั้งในการยกดัมเบล
2.สามารถนำความรู้ด้าน Python มาใช้ประโยชน์ได้จริง
3.สามารถที่จะนำระบบไปต่อยอดหรือประยุกต์ในการพัฒนาต่อได้
5.ความรู้ที่เกี่ยวข้อง
5.1ภาษา Python
คือภาษาโปรแกรมคอมพิวเตอร์ระดับสูง โดยถูกออกแบบมาให้เป็นภาษาสคริปต์ที่อ่านง่าย โดยตัดความซับซ้อนของโครงสร้างและไวยกรณ์ของภาษาออกไป ในส่วนของการแปลงชุดคำสั่งที่เราเขียนให้เป็นภาษาเครื่อง Python มีการทำงานแบบ Interpreter คือเป็นการแปลชุดคำสั่งทีละบรรทัด เพื่อป้อนเข้าสู่หน่วยประมวลผลให้คอมพิวเตอร์ทำงานตามที่เราต้องการ นอกจากนั้นภาษาโปรแกรม Python ยังสามารถนำไปใช้ในการเขียนโปรแกรมได้หลากหลายประเภท โดยไม่ได้จำกัดอยู่ที่งานเฉพาะทางใดทางหนึ่ง (General-purpose language) จึงทำให้มีการนำไปใช้กันแพร่หลายในหลายองค์กรใหญ่ระดับโลก เช่น Google, YouTube, Instagram, Dropbox และ NASA เป็นต้น
5.2OpenCV
OpenCV (Open source Computer Vision) เป็นไลบรารีฟังก์ชันการเขียนโปรแกรม (Library of Programming Functions) โดยส่วนใหญ่จะมุ่งเป้าไปที่การแสดงผลด้วยคอมพิวเตอร์แบบเรียลไทม์ (Real-Time Computer Vision) เดิมทีแล้วถูกพัฒนาโดย Intel แต่ภายหลังได้รับการสนับสนุนโดย Willow Garage ตามมาด้วย Itseez (ซึ่งต่อมาถูกเข้าซื้อโดย Intel) OpenCV เป็นไลบรารีแบบข้ามแพลตฟอร์ม (Cross-Platform) และใช้งานได้ฟรีภายใต้ลิขสิทธิ์ของ BSD แบบโอเพ่นซอร์ส (Open-Source BSD License)
OpenCV ยังสนับสนุนเฟรมเวิร์กการเรียนรู้เชิงลึก (Deep Learning Frameworks) ได้แก่ TensorFlow, Torch/PyTorch และ Caffe
การใช้ประโยชน์
ตัวอย่างการประยุกต์ใช้งาน OpenCV มีดังนี้
- ชุดเครื่องมือคุณลักษณะ 2 มิติและ 3 มิติ (2D and 3D feature toolkits)
- การประมาณระยะในขณะเคลื่อนที่ (Egomotion Estimation)
- ระบบรู้จำใบหน้า (Facial recognition system)
- การจดจำท่าทาง (Gesture recognition)
- ปฏิสัมพันธ์ระหว่างมนุษย์และคอมพิวเตอร์ (Human-Computer interaction; HCI)
ภาษาการเขียนโปรแกรม
OpenCV ถูกเขียนขึ้นด้วยภาษา C++ มีการรองรับ Python, Java และ MATLAB/OCTAVE — API สำหรับอินเทอร์เฟสเหล่านี้สามารถพบได้ในเอกสารออนไลน์ ซึ่งมีการรวมไว้หลากหลายภาษา เช่น C#, Perl, Ch, Haskell และ Ruby ได้รับการพัฒนาเพื่อส่งเสริมการนำมาใช้งานโดยผู้ใช้ที่เพิ่มขึ้น
การติดตั้ง OpenCV
pip install opencv-python
5.3Mediepipe
เป็นแพลตฟอร์ม AI แบบ Open source ที่สามารถใช้เป็น Pipeline ตรวจจับและรับรู้ใบหน้า มือ และท่าทางที่มีความซ้บซ้อน โดยใช้การเร่งความเร็วในการระบุและประมวลผล จึงออกมาเป็นโซลูชันที่แม่นยำและรวดเร็ว เราสามารถติดตั้งได้โดยการ pip install mediapipe
5.4NumPy
NumPy เป็นชื่อของ library ที่ใช้ในการคำนวนทางคณิตศาสตร์ในภาษา Python ซึ่งภายในถูกเขียนด้วยภาษา C จึงทำงานได้เร็วและมีประสิทธิภาพ โดย NumPy มีความสามารถในการจัดการกับอาเรย์หลายมิติและข้อมูลแบบเมทริกซ์ เราสามารถติดตั้งได้โดยการ pip install numpy
6.ผลดำเนินการ
1.เมื่อเริ่มรันโปรแกรมตรงซ้ายล้างจะขึ้น 0
2.เมื่อเราเริ่มยกตรงบาร์จะมีมีสีชมพู
3.เมื่อเราเริ่มยกขึ้นไปถึง100%ตรงบาร์จะเป็นสีเขียวและนับ1 ส่วนที่Terminalจะแสดงค่าเป็น2.5 คือช่วงที่จะนับครั้งต่อไปเมื่อเราเอาลง
4.เมื่อเรายกดัมเบลลงตรงTerminalจะแสดงค่าเป็น 3.0 และในกล้องเราจะนับเลขไปเป็นจำนวนเต็ม
7.ข้อเสนอแนะ
จากผลการดำเนินงาน โปรแกรมสามารถใช้งานได้แต่โปรแกรมยังมีการทำงานไม่มีความแม่นยำในบางเรื่องเนื่องจากถ้ามีคนเดินผ่านก็มีโอกาสที่กล้องจะจับไปที่คนที่เดินผ่านแทน และระยะยืนหน้ากล้องมีผลทำให้โปรแกรมไม่สามารถตรวจจับแขนเราได้
8.ข้อมูลอ้างอิง
OpenCV และ Numpy
Mediapipe
https://github.com/google/mediapipe
ตัวอย่างCode
Video