Software Review : Mediapipe

What is Mediapipe ?

Mediapipe เป็น Open source library สำเร็จรูปของทาง Google ที่สามารถสำหรับตรวจจับ สิ่งของ ใบหน้า มือ และท่าทางต่างๆที่มีความซ้บซ้อน โดยใช้ Machine learning มาช่วยในการทำการประมวลผล

Mediapipe Hand Tracking

เราจะทำการใช้ตัว Mediapipe ในการ tracking มือของเราผ่าน python

การติดตั้ง Mediapipe

สามารถทำได้โดยใช้คำสั่ง

pip install mediapipe

โดยการใช้ Mediapipe จะมีการใช้ตัว openCV เป็นตัวช่วยในการแสดงผลและรับข้อมูลจากกล้อง

pip install opencv-python

โดยเราก็จะสามารถเรียกใชj library ทั้ง 2 ได้

import mediapipe as mp
import cv2 

การใช้งาน Mediapipe

ทำการสร้าง Input ภาพโดยใช้ OpenCV โดย Img จะเป็น Array ของรูปภาพในแต่ละ Frame

webcam = cv2.VideoCapture(0)                 # 0 หมายถึงใช้กล้อง webcam
img = webcam.read()

mp.solutions.hands เพื่อเรียกใช้ข้อมูลสำหรับการตรวจจับมือ ของทาง MediaPipe
โดยใน hands มี Parameter ต่างๆให้ปรับได้ config parameter ต่างๆ

mp_hands = mp.solutions.hands
hands = mp_hands.Hands(
    max_num_hands=1
)
mp_draw = mp.solutions.drawing_utils

while True:
    success, img = webcam.read()    
    image_rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    results = hands.process(image_rgb)
    if results.multi_hand_landmarks:
        
        for landmark in results.multi_hand_landmarks:
            mp_draw.draw_landmarks(img, landmark, mp_hands.HAND_CONNECTIONS)

    cv2.imshow("Image Hand Tracking",img)
    if cv2.waitKey(5) & 0xFF == 27:
      break
webcam.release()
รูปภาพผลลัพธ์ที่ได้

การเรียกใช้ Landmark ต่างๆใน Mediapipe

MediaPipe Hand landmark

land mark คือ จุดสำคัญต่างๆ สำหรับการ tracking มือโดยตัว MediaPipe จะทำการ tracking จุดต่างๆ เหล่านี้แล้วนำออกมาเป็นตำแหน่ง

โดย Landmark ต่างก็สามารถที่จะเรียกใช้ได้ตามเลขต่างๆ ดังรูปด้านบน และ จะเขียนได้ดังนี้

#Draw Circle
height, width, channels = img.shape
FINGER_TIP = landmark .landmark[8]                                          # landmark number
center = tuple(map(int,(FINGER_TIP .x * width ,FINGER_TIP .y *height)))
img = cv2.circle(img,center , 20, (255,0,0), 5)
รูปภาพผลลัพธ์ที่ได้

สรุปการใช้งาน

ข้อดี
– เป็น Open source สามารถแก้ไขได้ง่าย
– สามารถ Tracking ได้อย่างแม่นยำ

ข้อเสีย
– ใช้งานทรัพยากรคอมพิวเตอร์ค่อนข้างเยอะ

Video

discussion และ การนำไปใช้ต่อ

เราอาจจะนำตำแหน่งที่เรา track ได้จากบนมือ นำไปใช้ในการควบคุมหุ่นยนต์ได้ โดยอาจจะใช้การเปลี่ยนแปลงของจุด Landmark ต่างๆที่ได้จากบนมือมาทำเป็น function ต่างๆได้

อ้างอิง

https://google.github.io/mediapipe/solutions/hands#mediapipe-hands
https://www.ultimatepython.co/post/hand-tracking-python

TANUT BUMRUNGVINGSIRI 63340500026