งานเครื่องมือจุดสังเกตสำหรับท่าโพสจะช่วยให้คุณตรวจหาจุดสังเกตต่างๆ ของร่างกายมนุษย์ในรูปภาพ หรือ ในการสร้างสรรค์วิดีโอ คุณสามารถใช้งานนี้เพื่อระบุตำแหน่งของร่างกายที่สำคัญ วิเคราะห์ท่าทาง และจำแนกการเคลื่อนไหว งานนี้ใช้โมเดลแมชชีนเลิร์นนิง (ML) ที่ทำงาน ที่มีรูปภาพหรือวิดีโอเดียว งานจะแสดงเนื้อหาลักษณะจุดสังเกตในรูปภาพ และพิกัดโลก 3 มิติ
คำแนะนำเหล่านี้จะแสดงวิธีใช้เครื่องมือจุดสังเกตของท่าทางกับแอป iOS โค้ด ตัวอย่างที่อธิบายในวิธีการเหล่านี้สามารถดูได้ใน GitHub
คุณสามารถดูการทำงานนี้ได้โดยดูที่ เว็บ การสาธิต สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่า ของงานนี้ ให้ดูที่ ภาพรวม
ตัวอย่างโค้ด
โค้ดตัวอย่างงาน MediaPipe Tasks เป็นการใช้งานพื้นฐานของเครื่องมือจุดสังเกตสำหรับ Pose สำหรับ iOS ตัวอย่างนี้ใช้กล้องบนอุปกรณ์ iOS จริงเพื่อตรวจจับ ตรวจจับท่าทางในสตรีมวิดีโอแบบต่อเนื่อง แอปยังสามารถตรวจจับท่าทางใน รูปภาพและวิดีโอจากแกลเลอรีของอุปกรณ์
คุณสามารถใช้แอปนี้เป็นจุดเริ่มต้นสำหรับแอป iOS ของคุณเอง หรืออ้างอิงถึงแอป เมื่อแก้ไขแอปที่มีอยู่ โค้ดตัวอย่างของเครื่องมือจุดสังเกตของท่าทางถูกโฮสต์บน GitHub
ดาวน์โหลดโค้ด
วิธีการต่อไปนี้แสดงวิธีสร้างสำเนาตัวอย่างในเครื่อง โดยใช้เครื่องมือบรรทัดคำสั่ง git
วิธีดาวน์โหลดโค้ดตัวอย่าง
โคลนที่เก็บ Git โดยใช้คำสั่งต่อไปนี้
git clone https://github.com/google-ai-edge/mediapipe-samples
นอกจากนี้ คุณสามารถกำหนดค่าอินสแตนซ์ Git ให้ใช้จุดชำระเงินแบบกระจัดกระจายเพื่อให้คุณมี เฉพาะไฟล์สำหรับแอปตัวอย่างเครื่องมือทำจุดสังเกตเท่านั้น ได้แก่
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/pose_landmarker/ios/
หลังจากสร้างโค้ดตัวอย่างในเวอร์ชันในเครื่องแล้ว คุณสามารถติดตั้ง ไลบรารีงาน MediaPipe เปิดโปรเจ็กต์โดยใช้ Xcode และเรียกใช้แอป สำหรับ โปรดดูวิธีการในคู่มือการการตั้งค่าสำหรับ iOS
องค์ประกอบหลัก
ไฟล์ต่อไปนี้มีโค้ดที่สำคัญสำหรับตัวอย่างเครื่องมือจุดสังเกตของท่าทาง แอปพลิเคชัน:
- PoseLandmarkerService.swift: เริ่มต้นเครื่องมือสร้างจุดสังเกต จัดการการเลือกโมเดล และเรียกใช้การอนุมาน เกี่ยวกับข้อมูลอินพุต
- CameraViewController: ใช้ UI สำหรับโหมดป้อนข้อมูลฟีดกล้องแบบสดและแสดงภาพ จุดสังเกต
- MediaLibraryViewController.swift: ใช้ UI สำหรับโหมดป้อนข้อมูลไฟล์ภาพนิ่งและไฟล์วิดีโอ และ แสดงภาพจุดสังเกต
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ และ เพื่อใช้ Poseจุดสังเกต สำหรับข้อมูลทั่วไปเกี่ยวกับการตั้งค่า สภาพแวดล้อมในการพัฒนาซอฟต์แวร์สำหรับการใช้งาน MediaPipe ซึ่งรวมถึงเวอร์ชันแพลตฟอร์ม โปรดดูคู่มือการตั้งค่าสำหรับ iOS
การอ้างอิง
เครื่องมือจุดสังเกตของตำแหน่งใช้ไลบรารี MediaPipeTasksVision
ซึ่งต้องติดตั้ง
ด้วยการใช้ CocoaPods ไลบรารีใช้งานได้ทั้งกับแอป Swift และ Objective-C
และไม่จำเป็นต้องมีการตั้งค่าเฉพาะภาษาใดๆ เพิ่มเติม
ดูวิธีการติดตั้ง CocoaPods ใน macOS ได้ที่ CocoaPods
คู่มือการติดตั้ง
หากต้องการทราบวิธีการสร้าง Podfile
ด้วยพ็อดที่จำเป็นสำหรับ
โปรดดูที่การใช้
CocoaPods
เพิ่มพ็อด MediaPipeTasksVision ใน Podfile
โดยใช้โค้ดต่อไปนี้
target 'MyPoseLandmarkerApp' do
use_frameworks!
pod 'MediaPipeTasksVision'
end
หากแอปของคุณมีเป้าหมายการทดสอบ 1 หน่วย โปรดดูคู่มือการตั้งค่าสำหรับ
iOS หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า
Podfile
ของคุณ
รุ่น
งานเครื่องมือจุดสังเกตของ MediaPipe Pose ต้องมี Bundle ที่ผ่านการฝึกอบรมแล้ว ซึ่งเข้ากันได้ กับงานนี้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกที่ใช้ได้สำหรับ จัดตำแหน่งเครื่องมือจุดสังเกต ดูภาพรวมงานโมเดล
ใช้download_models.sh
สคริปต์
เพื่อดาวน์โหลดโมเดลและเพิ่มลงในไดเรกทอรีโปรเจ็กต์ของคุณโดยใช้ Xcode สำหรับ
ดูวิธีการเพิ่มไฟล์ลงในโปรเจ็กต์ Xcode ได้ที่การจัดการไฟล์
และโฟลเดอร์ใน Xcode
โปรเจ็กต์
ใช้พร็อพเพอร์ตี้ BaseOptions.modelAssetPath
เพื่อระบุเส้นทางไปยังโมเดล
ใน App Bundle ของคุณ ดูตัวอย่างโค้ดได้ในส่วนถัดไป
สร้างงาน
คุณสามารถสร้างงานเครื่องมือจุดสังเกตของ Pose ได้โดยเรียกใช้เครื่องมือเริ่มต้นรายการใดรายการหนึ่ง
เครื่องมือเริ่มต้น PoseLandmarker(options:)
จะยอมรับค่าสำหรับการกำหนดค่านี้
ตัวเลือก
หากคุณไม่ต้องการเครื่องมือจุดสังเกตของ Pose ซึ่งกำหนดค่าเริ่มต้นไว้แล้ว
คุณสามารถใช้เครื่องมือเริ่มต้น PoseLandmarker(modelPath:)
เพื่อสร้าง
จัดตำแหน่งเครื่องมือจุดสังเกตโดยใช้ตัวเลือกเริ่มต้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่า
โปรดดูที่ภาพรวมการกำหนดค่า
งานเครื่องมือจุดสังเกตของโพสรองรับอินพุต 3 ประเภท ได้แก่ ภาพนิ่งและไฟล์วิดีโอ
และสตรีมวิดีโอสด โดยค่าเริ่มต้น PoseLandmarker(modelPath:)
จะเริ่มต้น
สำหรับภาพนิ่ง เมื่อต้องการให้งานเริ่มต้นดำเนินการเพื่อประมวลผลวิดีโอ
หรือสตรีมวิดีโอสด ให้ใช้ PoseLandmarker(options:)
เพื่อระบุวิดีโอ
หรือไลฟ์สตรีมโหมดทำงาน นอกจากนี้โหมดสตรีมแบบสดยังต้องใช้ส่วนเสริม
ตัวเลือกการกำหนดค่า poseLandmarkerLiveStreamDelegate
ซึ่งทำให้
จัดตำแหน่งเครื่องมือจุดสังเกตเพื่อแสดงผลลัพธ์การตรวจจับจุดสังเกตไปยังผู้รับมอบสิทธิ์
แบบไม่พร้อมกัน
เลือกแท็บที่ตรงกับโหมดการวิ่งของคุณเพื่อดูวิธีสร้างงาน และเรียกใช้การอนุมาน
Swift
รูปภาพ
import MediaPipeTasksVision let modelPath = Bundle.main.path(forResource: "pose_landmarker", ofType: "task") let options = PoseLandmarkerOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .image options.minPoseDetectionConfidence = minPoseDetectionConfidence options.minPosePresenceConfidence = minPosePresenceConfidence options.minTrackingConfidence = minTrackingConfidence options.numPoses = numPoses let poseLandmarker = try PoseLandmarker(options: options)
วิดีโอ
import MediaPipeTasksVision let modelPath = Bundle.main.path(forResource: "pose_landmarker", ofType: "task") let options = PoseLandmarkerOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .video options.minPoseDetectionConfidence = minPoseDetectionConfidence options.minPosePresenceConfidence = minPosePresenceConfidence options.minTrackingConfidence = minTrackingConfidence options.numPoses = numPoses let poseLandmarker = try PoseLandmarker(options: options)
ไลฟ์สด
import MediaPipeTasksVision // Class that conforms to the `PoseLandmarkerLiveStreamDelegate` protocol and // implements the method that the pose landmarker calls once it finishes // performing pose landmark detection in each input frame. class PoseLandmarkerResultProcessor: NSObject, PoseLandmarkerLiveStreamDelegate { func poseLandmarker( _ poseLandmarker: PoseLandmarker, didFinishDetection result: PoseLandmarkerResult?, timestampInMilliseconds: Int, error: Error?) { // Process the pose landmarker result or errors here. } } let modelPath = Bundle.main.path(forResource: "pose_landmarker", ofType: "task") let options = PoseLandmarkerOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .liveStream options.minPoseDetectionConfidence = minPoseDetectionConfidence options.minPosePresenceConfidence = minPosePresenceConfidence options.minTrackingConfidence = minTrackingConfidence options.numPoses = numPoses // Assign an object of the class to the `poseLandmarkerLiveStreamDelegate` // property. let processor = PoseLandmarkerResultProcessor() options.poseLandmarkerLiveStreamDelegate = processor let poseLandmarker = try PoseLandmarker(options: options)
Objective-C
รูปภาพ
@import MediaPipeTasksVision; NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"pose_landmarker" ofType:@"task"]; MPPPoseLandmarkerOptions *options = [[MPPPoseLandmarkerOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeImage; options.minPoseDetectionConfidence = minPoseDetectionConfidence; options.minPosePresenceConfidence = minPosePresenceConfidence; options.minTrackingConfidence = minTrackingConfidence; options.numPoses = numPoses; MPPPoseLandmarker *poseLandmarker = [[MPPPoseLandmarker alloc] initWithOptions:options error:nil];
วิดีโอ
@import MediaPipeTasksVision; NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"pose_landmarker" ofType:@"task"]; MPPPoseLandmarkerOptions *options = [[MPPPoseLandmarkerOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeVideo; options.minPoseDetectionConfidence = minPoseDetectionConfidence; options.minPosePresenceConfidence = minPosePresenceConfidence; options.minTrackingConfidence = minTrackingConfidence; options.numPoses = numPoses; MPPPoseLandmarker *poseLandmarker = [[MPPPoseLandmarker alloc] initWithOptions:options error:nil];
ไลฟ์สด
@import MediaPipeTasksVision; // Class that conforms to the `MPPPoseLandmarkerLiveStreamDelegate` protocol // and implements the method that the pose landmarker calls once it finishes // performing pose landmarks= detection in each input frame. @interface APPPoseLandmarkerResultProcessor : NSObject@end @implementation APPPoseLandmarkerResultProcessor - (void)poseLandmarker:(MPPPoseLandmarker *)poseLandmarker didFinishDetectionWithResult:(MPPPoseLandmarkerResult *)poseLandmarkerResult timestampInMilliseconds:(NSInteger)timestampInMilliseconds error:(NSError *)error { // Process the pose landmarker result or errors here. } @end NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"pose_landmarker" ofType:@"task"]; MPPPoseLandmarkerOptions *options = [[MPPPoseLandmarkerOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeLiveStream; options.minPoseDetectionConfidence = minPoseDetectionConfidence; options.minPosePresenceConfidence = minPosePresenceConfidence; options.minTrackingConfidence = minTrackingConfidence; options.numPoses = numPoses; // Assign an object of the class to the `poseLandmarkerLiveStreamDelegate` // property. APPPoseLandmarkerResultProcessor *processor = [APPPoseLandmarkerResultProcessor new]; options.poseLandmarkerLiveStreamDelegate = processor; MPPPoseLandmarker *poseLandmarker = [[MPPPoseLandmarker alloc] initWithOptions:options error:nil];
หมายเหตุ: หากคุณใช้โหมดวิดีโอหรือโหมดสตรีมแบบสด เครื่องมือจุดสังเกตท่าทางจะใช้ การติดตามเพื่อหลีกเลี่ยงการเรียกใช้โมเดลการตรวจจับฝ่ามือในทุกเฟรม ซึ่งจะช่วย ลดเวลาในการตอบสนอง
ตัวเลือกการกำหนดค่า
งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับแอป iOS
ชื่อตัวเลือก | คำอธิบาย | ช่วงค่า | ค่าเริ่มต้น |
---|---|---|---|
running_mode |
ตั้งค่าโหมดการทำงานสำหรับงาน มี 3 แบบ
โหมด: รูปภาพ: โหมดสำหรับอินพุตรูปภาพเดียว วิดีโอ: โหมดสำหรับเฟรมที่ถอดรหัสของวิดีโอ LIVE_STREAM: โหมดสำหรับสตรีมแบบสดของอินพุต เช่น ข้อมูลจากกล้อง ในโหมดนี้ ต้องตั้งค่า poseLandmarkerLiveStreamDelegate เป็น
ตัวอย่างคลาสที่ติดตั้งใช้งาน
PoseLandmarkerLiveStreamDelegate เพื่อรับผลลัพธ์ของ
ทำการตรวจหาจุดสังเกตแบบไม่พร้อมกัน
|
{RunningMode.image, RunningMode.video, RunningMode.liveStream } |
RunningMode.image |
num_poses |
จำนวนท่าทางสูงสุดที่ตรวจพบโดย เครื่องมือแนะนำท่าโพส | Integer > 0 |
1 |
min_pose_detection_confidence |
คะแนนความเชื่อมั่นขั้นต่ำสำหรับการตรวจจับท่าทาง ถือว่าประสบความสำเร็จ | Float [0.0,1.0] |
0.5 |
min_pose_presence_confidence |
คะแนนความเชื่อมั่นขั้นต่ำของการแสดงท่าทาง ในการตรวจหาจุดสังเกตของท่าทาง | Float [0.0,1.0] |
0.5 |
min_tracking_confidence |
คะแนนความเชื่อมั่นขั้นต่ำสำหรับการติดตามท่าทาง จะถือว่าประสบความสำเร็จ | Float [0.0,1.0] |
0.5 |
output_segmentation_masks |
เครื่องมือจุดสังเกตของท่าทางจะแสดงมาสก์การแบ่งกลุ่มสำหรับที่ตรวจพบหรือไม่ โพสท่า | Boolean |
False |
result_callback |
ตั้งค่า Listener ผลลัพธ์เพื่อรับผลลัพธ์ของจุดสังเกต
แบบไม่พร้อมกันเมื่อเครื่องมือจุดสังเกตท่าทางอยู่ในโหมดสตรีมแบบสด
ใช้ได้เมื่อตั้งค่าโหมดวิ่งเป็น LIVE_STREAM เท่านั้น |
ResultListener |
N/A |
การกำหนดค่าสตรีมแบบสด
เมื่อตั้งค่าโหมดการวิ่งเป็นสตรีมแบบสด เครื่องมือแนะนำท่าโพสจะต้องใช้
ตัวเลือกการกำหนดค่า poseLandmarkerLiveStreamDelegate
เพิ่มเติม
ทำให้เครื่องมือทำจุดสังเกตของท่าทางนำส่งผลลัพธ์การตรวจจับจุดสังเกต
แบบไม่พร้อมกัน ผู้ได้รับมอบสิทธิ์ต้องใช้
poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)
วิธี
ซึ่งเครื่องมือลงชื่อออกท่าทางเรียกใช้หลังจากประมวลผลผลลัพธ์ของการโพสท่า
จุดสังเกตในแต่ละเฟรม
ชื่อตัวเลือก | คำอธิบาย | ช่วงค่า | ค่าเริ่มต้น |
---|---|---|---|
poseLandmarkerLiveStreamDelegate |
เปิดใช้เครื่องมือจุดสังเกตสำหรับท่าทางเพื่อรับผลลัพธ์ของการแสดงท่าทาง
แบบไม่พร้อมกันในโหมดสตรีมแบบสด ชั้นเรียนที่
ที่ตั้งค่าเป็นพร็อพเพอร์ตี้นี้ ต้องใช้พารามิเตอร์
poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)
|
ไม่เกี่ยวข้อง | ไม่ได้ตั้งค่า |
เตรียมข้อมูล
คุณต้องแปลงรูปภาพหรือเฟรมอินพุตเป็นวัตถุ MPImage
ก่อน
เพื่อส่งให้ผู้ส่งจุดสังเกตของ Pose MPImage
รองรับรูปภาพ iOS หลายประเภท
และใช้รูปแบบดังกล่าวในโหมด
การทำงานใดก็ได้เพื่ออนุมาน สำหรับข้อมูลเพิ่มเติม
ข้อมูลเกี่ยวกับ MPImage
โปรดดู
MPImage API
เลือกรูปแบบรูปภาพ iOS ตามกรณีการใช้งานและโหมดการทำงาน
แอปพลิเคชันต้องการ MPImage
ยอมรับ UIImage
, CVPixelBuffer
และ
CMSampleBuffer
รูปแบบรูปภาพ iOS
UIImage
รูปแบบ UIImage
เหมาะกับโหมดการวิ่งต่อไปนี้
รูปภาพ: รูปภาพจาก App Bundle แกลเลอรีของผู้ใช้ หรือระบบไฟล์ที่จัดรูปแบบเป็น แปลงรูปภาพ
UIImage
รูปเป็นวัตถุMPImage
ได้วิดีโอ: ใช้ AVAssetImageGenerator เพื่อแยกเฟรมวิดีโอไปยัง CGImage รูปแบบ แล้วแปลงเป็น
UIImage
รูปภาพ
Swift
// Load an image on the user's device as an iOS `UIImage` object. // Convert the `UIImage` object to a MediaPipe's Image object having the default // orientation `UIImage.Orientation.up`. let image = try MPImage(uiImage: image)
Objective-C
// Load an image on the user's device as an iOS `UIImage` object. // Convert the `UIImage` object to a MediaPipe's Image object having the default // orientation `UIImageOrientationUp`. MPImage *image = [[MPPImage alloc] initWithUIImage:image error:nil];
ตัวอย่างนี้จะเริ่มต้น MPImage
ด้วยค่าเริ่มต้น
UIImage.Orientation.Up
การวางแนว คุณสามารถเริ่มต้น MPImage
ด้วย
UIImage.Orientation
เครื่องมือจุดสังเกตท่าทางไม่รองรับการวางแนวแบบมิเรอร์ เช่น .upMirrored
.downMirrored
, .leftMirrored
, .rightMirrored
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ UIImage
โปรดดูที่ UIImage ของ Apple Developer
เอกสารประกอบ
CVPixelBuffer
รูปแบบ CVPixelBuffer
เหมาะกับแอปพลิเคชันที่สร้างเฟรม
และใช้ CoreImage ของ iOS
สำหรับการประมวลผลข้อมูล
รูปแบบ CVPixelBuffer
เหมาะกับโหมดการวิ่งต่อไปนี้
รูปภาพ: แอปที่สร้างรูปภาพ
CVPixelBuffer
รูปหลังจากประมวลผล โดยใช้เฟรมเวิร์กCoreImage
ของ iOS ก็สามารถส่งไปยังเครื่องมือจุดสังเกตของท่าทางใน โหมดเรียกใช้รูปภาพวิดีโอ: แปลงเฟรมวิดีโอเป็นรูปแบบ
CVPixelBuffer
ได้สำหรับ การประมวลผล จากนั้นจึงส่งไปยังเครื่องมือจุดสังเกตของท่าทางในโหมดวิดีโอสตรีมแบบสด: ระบบอาจแปลงแอปที่ใช้กล้อง iOS ในการสร้างเฟรม เป็นรูปแบบ
CVPixelBuffer
เพื่อการประมวลผลก่อนที่จะส่งไปยัง จัดท่าเครื่องมือจุดสังเกตในโหมดสตรีมแบบสด
Swift
// Obtain a CVPixelBuffer. // Convert the `CVPixelBuffer` object to a MediaPipe's Image object having the default // orientation `UIImage.Orientation.up`. let image = try MPImage(pixelBuffer: pixelBuffer)
Objective-C
// Obtain a CVPixelBuffer. // Convert the `CVPixelBuffer` object to a MediaPipe's Image object having the // default orientation `UIImageOrientationUp`. MPImage *image = [[MPPImage alloc] initWithUIImage:image error:nil];
โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับ CVPixelBuffer
ได้ที่ CVPixelBuffer Apple
นักพัฒนาซอฟต์แวร์
เอกสารประกอบ
CMSampleBuffer
รูปแบบ CMSampleBuffer
จะจัดเก็บตัวอย่างสื่อของประเภทสื่อแบบเดียวกัน และ
เหมาะกับโหมดทำงานของสตรีมแบบสด เฟรมแบบสดจากกล้อง iOS
ส่งแบบไม่พร้อมกันในรูปแบบ CMSampleBuffer
โดย iOS
AVCaptureVideoDataOutput
Swift
// Obtain a CMSampleBuffer. // Convert the `CMSampleBuffer` object to a MediaPipe's Image object having the default // orientation `UIImage.Orientation.up`. let image = try MPImage(sampleBuffer: sampleBuffer)
Objective-C
// Obtain a `CMSampleBuffer`. // Convert the `CMSampleBuffer` object to a MediaPipe's Image object having the // default orientation `UIImageOrientationUp`. MPImage *image = [[MPPImage alloc] initWithSampleBuffer:sampleBuffer error:nil];
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ CMSampleBuffer
โปรดดู CMSampleBuffer Apple
นักพัฒนาซอฟต์แวร์
เอกสารประกอบ
เรียกใช้งาน
หากต้องการเรียกใช้เครื่องมือจุดสังเกตสำหรับท่าทาง ให้ใช้เมธอด detect()
เฉพาะสำหรับ
โหมดทำงาน:
- ภาพนิ่ง:
detect(image:)
- วิดีโอ:
detect(videoFrame:timestampInMilliseconds:)
- สตรีมสด:
detectAsync(image:timestampInMilliseconds:)
ตัวอย่างโค้ดต่อไปนี้แสดงตัวอย่างง่ายๆ ของวิธีเรียกใช้เครื่องมือทำจุดสังเกตใน โหมดการทำงานต่างๆ ต่อไปนี้
Swift
รูปภาพ
let result = try poseLandmarker.detect(image: image)
วิดีโอ
let result = try poseLandmarker.detect( videoFrame: image, timestampInMilliseconds: timestamp)
ไลฟ์สด
try poseLandmarker.detectAsync( image: image, timestampInMilliseconds: timestamp)
Objective-C
รูปภาพ
MPPPoseLandmarkerResult *result = [poseLandmarker detectImage:image error:nil];
วิดีโอ
MPPPoseLandmarkerResult *result = [poseLandmarker detectVideoFrame:image timestampInMilliseconds:timestamp error:nil];
ไลฟ์สด
BOOL success = [poseLandmarker detectAsyncImage:image timestampInMilliseconds:timestamp error:nil];
ตัวอย่างโค้ดเครื่องมือทำเครื่องหมายของท่าทางแสดงการใช้งานของแต่ละโหมดเหล่านี้
รายละเอียดเพิ่มเติม detect(image:)
, detect(videoFrame:timestampInMilliseconds:)
และ detectAsync(image:timestampInMilliseconds:)
โค้ดตัวอย่างนี้ช่วยให้
ผู้ใช้เพื่อเปลี่ยนโหมดการประมวลผลซึ่งอาจไม่จำเป็นสำหรับการใช้งานของคุณ
โปรดทราบดังต่อไปนี้
เมื่อทำงานในโหมดวิดีโอหรือโหมดสตรีมแบบสด คุณต้องระบุ การประทับเวลาของเฟรมอินพุตให้เป็นตำแหน่งเครื่องมือจุดสังเกต
เมื่อทำงานในโหมดภาพหรือวิดีโอ งานเครื่องมือทำท่าโพสจะบล็อก เทรดปัจจุบันจนกว่าจะประมวลผลรูปภาพหรือเฟรมอินพุตเสร็จสิ้น ถึง หลีกเลี่ยงการบล็อกเทรดปัจจุบัน เรียกใช้การประมวลผลในเบื้องหลัง เทรดโดยใช้ iOS ผู้มอบหมายหรือ NSOperation ของ Google
เมื่อทำงานในโหมดสตรีมสด งานเครื่องมือจัดตำแหน่งท่าโพสจะแสดงขึ้นทันที และไม่บล็อกชุดข้อความปัจจุบัน โดยเรียกใช้
poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)
วิธี พร้อมผลลัพธ์ที่เป็นจุดสังเกตหลังจากประมวลผลเฟรมอินพุตแต่ละเฟรม โพสเครื่องมือจุดสังเกตเรียกใช้เมธอดนี้แบบไม่พร้อมกันในอนุกรมเฉพาะ คิวการจัดส่งสินค้า สำหรับการแสดงผลลัพธ์ในอินเทอร์เฟซผู้ใช้ ให้ ไปยังคิวหลักหลังจากประมวลผลผลลัพธ์ หากdetectAsync
จะถูกเรียกเมื่องานเครื่องมือจุดสังเกตของท่าทางอยู่ระหว่างการประมวลผล เครื่องมือทำเครื่องหมายท่าทางจะไม่สนใจเฟรมอินพุตใหม่
จัดการและแสดงผลลัพธ์
หลังจากเรียกใช้การอนุมาน งานเครื่องมือจุดสังเกตของ Pose แสดงผล PoseLandmarkerResult
ซึ่งมีพิกัดสำหรับจุดสังเกตของการโพสรูปแต่ละรายการ
ตัวอย่างต่อไปนี้แสดงตัวอย่างข้อมูลเอาต์พุตจากงานนี้
PoseLandmarkerResult:
Landmarks:
Landmark #0:
x : 0.638852
y : 0.671197
z : 0.129959
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.634599
y : 0.536441
z : -0.06984
visibility : 0.999909
presence : 0.999958
... (33 landmarks per pose)
WorldLandmarks:
Landmark #0:
x : 0.067485
y : 0.031084
z : 0.055223
visibility : 0.9999997615814209
presence : 0.9999984502792358
Landmark #1:
x : 0.063209
y : -0.00382
z : 0.020920
visibility : 0.999976
presence : 0.999998
... (33 world landmarks per pose)
SegmentationMasks:
... (pictured below)
เอาต์พุตมีทั้งพิกัดมาตรฐาน (Landmarks
) และพิกัดโลก
พิกัด (WorldLandmarks
) สำหรับแต่ละจุดสังเกต
เอาต์พุตมีพิกัดมาตรฐานต่อไปนี้ (Landmarks
):
x
และy
: พิกัดแลนด์มาร์กที่ปรับให้เป็นมาตรฐานระหว่าง 0.0 ถึง 1.0 ตามค่า ความกว้าง (x
) และความสูงของรูปภาพ (y
)z
: ความลึกที่สำคัญ โดยมีความลึกที่กึ่งกลางของสะโพกเท่ากับ ยิ่งค่าน้อย จุดสังเกตก็ยิ่งอยู่ใกล้กล้อง ขนาด z ใช้สเกลใกล้เคียงกับx
visibility
: แนวโน้มที่จุดสังเกตจะปรากฏในรูปภาพ
เอาต์พุตจะมีพิกัดโลกดังต่อไปนี้ (WorldLandmarks
)
x
,y
และz
: พิกัด 3 มิติในโลกจริง หน่วยเป็นเมตร จุดกึ่งกลางของสะโพกเป็นจุดกำเนิดvisibility
: แนวโน้มที่จุดสังเกตจะปรากฏในรูปภาพ
รูปภาพต่อไปนี้แสดงการแสดงภาพเอาต์พุตของงาน
มาสก์การแบ่งกลุ่มตัวเลือกจะแสดงแนวโน้มของพิกเซลแต่ละพิกเซลที่อยู่ใน แก่บุคคลที่ตรวจจับได้ รูปภาพต่อไปนี้คือมาสก์การแบ่งกลุ่มของ เอาต์พุตของงาน:
โค้ดตัวอย่างเครื่องมือจุดสังเกตของโพสสาธิตวิธีแสดงเครื่องมือจุดสังเกตของท่าทาง รายการ