งานตัวจดจำท่าทางของมือของ MediaPipe ช่วยให้คุณจดจำท่าทางของมือได้แบบเรียลไทม์ และให้ผลลัพธ์ท่าทางของมือที่จดจำได้ รวมถึงจุดสังเกตมือของมือที่ตรวจพบ วิธีการเหล่านี้จะแสดงวิธีใช้ตัวจดจำท่าทางสัมผัส สำหรับเว็บและแอป JavaScript
คุณดูการทำงานของงานนี้ได้โดยดูการสาธิต ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่า ของงานนี้ได้ที่ภาพรวม
ตัวอย่างโค้ด
โค้ดตัวอย่างสำหรับเครื่องมือจดจำท่าทางสัมผัสจะแสดงการติดตั้งใช้งานที่สมบูรณ์ของงานนี้ใน JavaScript เพื่อให้คุณใช้อ้างอิง โค้ดนี้ช่วยให้คุณทดสอบงานนี้และเริ่มต้นสร้างแอปจดจำท่าทางสัมผัสของคุณเองได้ คุณสามารถดู เรียกใช้ และแก้ไข ตัวอย่างของตัวจดจำท่าทางสัมผัส ได้โดยใช้เพียงเว็บเบราว์เซอร์
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ เพื่อใช้ตัวจดจำท่าทางสัมผัสโดยเฉพาะ ดูข้อมูลทั่วไปเกี่ยวกับการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์เว็บและ JavaScript รวมถึงข้อกำหนดด้านเวอร์ชันของแพลตฟอร์มได้ที่คู่มือการตั้งค่าสำหรับเว็บ
แพ็กเกจ JavaScript
โค้ดตัวจดจำท่าทางสัมผัสพร้อมใช้งานผ่านแพ็กเกจ @mediapipe/tasks-vision
NPM ของ MediaPipe คุณสามารถ
ค้นหาและดาวน์โหลดไลบรารีเหล่านี้ได้โดยทำตามวิธีการในคู่มือการตั้งค่าแพลตฟอร์ม
คุณติดตั้งแพ็กเกจที่จำเป็นผ่าน NPM ได้โดยใช้คำสั่งต่อไปนี้
npm install @mediapipe/tasks-vision
หากต้องการนำเข้าโค้ดงานผ่านบริการเครือข่ายนำส่งข้อมูล (CDN)
ให้เพิ่มโค้ดต่อไปนี้ในแท็ก <head> ในไฟล์ HTML
<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.mjs"
crossorigin="anonymous"></script>
</head>
รุ่น
งานตัวจดจำท่าทางของ MediaPipe ต้องใช้โมเดลที่ผ่านการฝึกซึ่งเข้ากันได้กับงานนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ฝึกแล้วซึ่งพร้อมใช้งานสำหรับ Gesture Recognizer ได้ที่ส่วนโมเดลในภาพรวมของงาน
เลือกและดาวน์โหลดโมเดล จากนั้นจัดเก็บไว้ในไดเรกทอรีโปรเจ็กต์
<dev-project-root>/app/shared/models/
สร้างงาน
ใช้ฟังก์ชันใดฟังก์ชันหนึ่งของ Gesture Recognizer createFrom...() เพื่อ
เตรียมงานสำหรับการเรียกใช้การอนุมาน ใช้ฟังก์ชัน createFromModelPath()
กับเส้นทางสัมพัทธ์หรือเส้นทางสมบูรณ์ไปยังไฟล์โมเดลที่ฝึกแล้ว
หากโหลดโมเดลลงในหน่วยความจำแล้ว คุณจะใช้วิธี createFromModelBuffer() ได้
ตัวอย่างโค้ดด้านล่างแสดงการใช้ฟังก์ชัน createFromOptions() เพื่อ
ตั้งค่างาน ฟังก์ชัน createFromOptions ช่วยให้คุณปรับแต่ง
ตัวจดจำท่าทางสัมผัสด้วยตัวเลือกการกำหนดค่าได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการกำหนดค่าได้ที่ตัวเลือกการกำหนดค่า
โค้ดต่อไปนี้แสดงวิธีสร้างและกำหนดค่างานด้วยตัวเลือกที่กำหนดเอง
// Create task for image file processing:
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm "
);
const gestureRecognizer = await GestureRecognizer.createFromOptions(vision, {
baseOptions: {
modelAssetPath: "https://storage.googleapis.com/mediapipe-tasks/gesture_recognizer/gesture_recognizer.task"
},
numHands: 2
});
ตัวเลือกการกำหนดค่า
งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับเว็บแอปพลิเคชัน
| ชื่อตัวเลือก | คำอธิบาย | ช่วงค่า | ค่าเริ่มต้น |
|---|---|---|---|
runningMode |
ตั้งค่าโหมดการทำงานสำหรับงาน มี 2 โหมด
ดังนี้ รูปภาพ: โหมดสำหรับอินพุตรูปภาพเดียว วิดีโอ: โหมดสำหรับเฟรมที่ถอดรหัสแล้วของ วิดีโอหรือในไลฟ์สดของข้อมูลอินพุต เช่น จากกล้อง |
{IMAGE, VIDEO} |
IMAGE |
num_hands |
GestureRecognizer ตรวจจับมือได้สูงสุด
|
Any integer > 0 |
1 |
min_hand_detection_confidence |
คะแนนความน่าเชื่อถือขั้นต่ำสำหรับการตรวจจับมือเพื่อให้ถือว่า ประสบความสำเร็จในโมเดลการตรวจจับฝ่ามือ | 0.0 - 1.0 |
0.5 |
min_hand_presence_confidence |
คะแนนความเชื่อมั่นขั้นต่ำของคะแนนการมีอยู่ของมือในโมเดลการตรวจจับ จุดสังเกตของมือ ในโหมดวิดีโอและโหมดไลฟ์สดของ Gesture Recognizer หากคะแนนความน่าเชื่อถือในการตรวจจับมือจากโมเดลแลนด์มาร์กของมือต่ำกว่า เกณฑ์นี้ ระบบจะเรียกใช้โมเดลการตรวจจับฝ่ามือ ไม่เช่นนั้น ระบบจะใช้อัลกอริทึมการติดตามการเคลื่อนไหวของมือแบบเบาเพื่อระบุตำแหน่งของมือสำหรับการตรวจหาจุดสังเกตในภายหลัง | 0.0 - 1.0 |
0.5 |
min_tracking_confidence |
คะแนนความเชื่อมั่นขั้นต่ำสำหรับการพิจารณาว่าการติดตามการเคลื่อนไหวของมือ ประสบความสำเร็จ นี่คือเกณฑ์ IOU ของกรอบล้อมรอบระหว่างมือในเฟรมปัจจุบันและเฟรมสุดท้าย ในโหมดวิดีโอและโหมดสตรีมของ Gesture Recognizer หากการติดตามล้มเหลว Gesture Recognizer จะทริกเกอร์การตรวจจับมือ ไม่เช่นนั้น ระบบจะข้ามการตรวจจับมือ | 0.0 - 1.0 |
0.5 |
canned_gestures_classifier_options |
ตัวเลือกสำหรับการกำหนดค่าลักษณะการทำงานของเครื่องมือคัดแยกท่าทางสัมผัสที่กำหนดไว้ล่วงหน้า ท่าทางสัมผัสสำเร็จรูปคือ ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"] |
|
|
custom_gestures_classifier_options |
ตัวเลือกสำหรับการกำหนดค่าลักษณะการทำงานของเครื่องมือแยกประเภทท่าทางสัมผัสที่กำหนดเอง |
|
|
เตรียมข้อมูล
Gesture Recognizer สามารถจดจำท่าทางในรูปภาพในรูปแบบใดก็ได้ที่เบราว์เซอร์โฮสต์รองรับ นอกจากนี้ งานยังจัดการการประมวลผลข้อมูลอินพุตล่วงหน้า ซึ่งรวมถึงการปรับขนาด การหมุน และการปรับค่าให้เป็นมาตรฐานด้วย หากต้องการจดจำท่าทางในวิดีโอ คุณสามารถใช้ API เพื่อประมวลผลทีละเฟรมได้อย่างรวดเร็ว โดยใช้การประทับเวลาของเฟรมเพื่อพิจารณาว่าท่าทางเกิดขึ้นเมื่อใดในวิดีโอ
เรียกใช้งาน
ตัวจดจำท่าทางสัมผัสใช้วิธีการ recognize() (ที่มีโหมดการทำงาน 'image') และ
recognizeForVideo() (ที่มีโหมดการทำงาน 'video') เพื่อทริกเกอร์การอนุมาน โดยงานจะประมวลผลข้อมูล พยายามจดจำท่าทางมือ
แล้วรายงานผลลัพธ์
โค้ดต่อไปนี้แสดงวิธีเรียกใช้การประมวลผลด้วยโมเดลงาน
รูปภาพ
const image = document.getElementById("image") as HTMLImageElement; const gestureRecognitionResult = gestureRecognizer.recognize(image);
วิดีโอ
await gestureRecognizer.setOptions({ runningMode: "video" }); let lastVideoTime = -1; function renderLoop(): void { const video = document.getElementById("video"); if (video.currentTime !== lastVideoTime) { const gestureRecognitionResult = gestureRecognizer.recognizeForVideo(video); processResult(gestureRecognitionResult); lastVideoTime = video.currentTime; } requestAnimationFrame(() => { renderLoop(); }); }
การเรียกใช้เมธอด Gesture Recognizer recognize() และ recognizeForVideo() จะทำงานพร้อมกันและบล็อกเธรดอินเทอร์เฟซผู้ใช้ หากคุณจดจำท่าทางใน
เฟรมวิดีโอจากกล้องของอุปกรณ์ได้ การจดจำแต่ละครั้งจะบล็อกเธรดหลัก คุณป้องกันปัญหานี้ได้โดยใช้ Web Worker เพื่อเรียกใช้เมธอด
recognize() และ recognizeForVideo() ในเธรดอื่น
ดูการใช้งานที่สมบูรณ์ยิ่งขึ้นของการเรียกใช้โมเดล Gesture Recognizer ได้ที่ ตัวอย่าง
จัดการและแสดงผลลัพธ์
Gesture Recognizer จะสร้างออบเจ็กต์ผลการตรวจจับท่าทางสัมผัสสำหรับการเรียกใช้การจดจำแต่ละครั้ง ออบเจ็กต์ผลลัพธ์มีแลนด์มาร์กของมือในพิกัดรูปภาพ แลนด์มาร์กของมือในพิกัดโลก ความถนัดของมือ(ซ้าย/ขวา) และหมวดหมู่ท่าทางของมือที่ตรวจพบ
ตัวอย่างต่อไปนี้แสดงข้อมูลเอาต์พุตจากงานนี้
GestureRecognizerResult ที่ได้จะมี 4 คอมโพเนนต์ และแต่ละคอมโพเนนต์เป็นอาร์เรย์ ซึ่งแต่ละองค์ประกอบจะมีผลลัพธ์ที่ตรวจพบของมือที่ตรวจพบ 1 ข้าง
ความถนัดของมือ
Handedness แสดงว่ามือที่ตรวจพบเป็นมือซ้ายหรือมือขวา
ท่าทางสัมผัส
หมวดหมู่ท่าทางสัมผัสที่ระบบจดจำได้ของมือที่ตรวจพบ
จุดสังเกต
โดยมีจุดสังเกตมือ 21 จุด ซึ่งแต่ละจุดประกอบด้วยพิกัด
x,yและzระบบจะปรับพิกัดxและyให้เป็น [0.0, 1.0] ตามความกว้างและความสูงของรูปภาพตามลำดับ พิกัดzแสดงถึงความลึกของจุดสังเกต โดยมี ความลึกที่ข้อมือเป็นจุดเริ่มต้น ค่ายิ่งน้อยเท่าใด จุดสังเกตก็จะยิ่งอยู่ใกล้กล้องมากขึ้นเท่านั้น ขนาดของzจะใช้มาตราส่วนเดียวกันกับxโดยประมาณสถานที่สำคัญของโลก
นอกจากนี้ ยังมีการนำเสนอจุดสังเกตมือทั้ง 21 จุดในพิกัดโลกด้วย โดยแต่ละจุดสังเกต ประกอบด้วย
x,yและzซึ่งแสดงถึงพิกัด 3 มิติในโลกจริงเป็น เมตร โดยมีจุดเริ่มต้นอยู่ที่ศูนย์กลางทางเรขาคณิตของมือ
GestureRecognizerResult:
Handedness:
Categories #0:
index : 0
score : 0.98396
categoryName : Left
Gestures:
Categories #0:
score : 0.76893
categoryName : Thumb_Up
Landmarks:
Landmark #0:
x : 0.638852
y : 0.671197
z : -3.41E-7
Landmark #1:
x : 0.634599
y : 0.536441
z : -0.06984
... (21 landmarks for a hand)
WorldLandmarks:
Landmark #0:
x : 0.067485
y : 0.031084
z : 0.055223
Landmark #1:
x : 0.063209
y : -0.00382
z : 0.020920
... (21 world landmarks for a hand)
รูปภาพต่อไปนี้แสดงภาพเอาต์พุตของงาน
ดูการใช้งานที่สมบูรณ์ยิ่งขึ้นในการสร้างงานตัวจดจำท่าทางได้ที่ตัวอย่าง