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