تتيح لك مهمة Pose Signer رصد معالم جسم بشرية في إحدى الصور أو الفيديو القادم. يمكنك استخدام هذه المهمة لتحديد المواقع الرئيسية للجسم وتحليل الوضعية ونصنِّف الحركات. تستخدِم هذه المَهمّة نماذج تعلُّم الآلة (ML) التي تعمل باستخدام صور فردية أو فيديوهات فردية تتيح لك المهمة إخراج معالم وضعية الجسم في الصورة. وإحداثيات العالم ثلاثية الأبعاد.
توضّح لك هذه التعليمات كيفية استخدام Pose Lookerer مع تطبيقات iOS. الرمز النموذج الموصوف في هذه التعليمات على GitHub.
يمكنك رؤية هذه المهمة وهي قيد التنفيذ من خلال عرض الويب هذا تجريبي. مزيد من المعلومات حول الإمكانات والنماذج وخيارات الضبط هذه المهمة، فراجع نظرة عامة:
مثال على الرمز البرمجي
رمز مثال "مهام MediaPipe" هو تنفيذ أساسي لمصوّر Pose Scroller لنظام التشغيل iOS. يستخدم المثال الكاميرا الموجودة على جهاز iOS فعلي لاكتشاف ورصد الأوضاع في بث فيديو مستمر. يمكن للتطبيق أيضًا اكتشاف الأوضاع في الصور والفيديوهات من معرض الجهاز.
يمكنك استخدام التطبيق كنقطة بداية لتطبيق iOS، أو الرجوع إليه عند تعديل تطبيق حالي. تتم استضافة نموذج الرمز البرمجي Pose Lookerer على. GitHub.
تنزيل الرمز
توضّح لك التعليمات التالية كيفية إنشاء نسخة على الجهاز من هذا المثال. باستخدام أداة سطر الأوامر git.
لتنزيل نموذج الرمز:
استنساخ مستودع git باستخدام الأمر التالي:
git clone https://github.com/google-ai-edge/mediapipe-samples
يمكنك اختياريًا ضبط مثيل git لاستخدام عملية دفع متفرقة، وبالتالي فقط ملفات تطبيق Pose Markdown كمثال:
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/pose_landmarker/ios/
بعد إنشاء نسخة محلية من نموذج الرمز، يمكنك تثبيت مكتبة مهام MediaPipe، افتح المشروع باستخدام Xcode وشغِّل التطبيق. بالنسبة التعليمات، راجِع دليل إعداد iOS.
المكوّنات الرئيسية
تحتوي الملفات التالية على الكود المهم لمثال Pose تاريخيer app:
- PoseLandmarkerService.swift: يؤدي هذا الإعداد إلى إعداد معلم الجذب ومعالجة اختيار النموذج وتنفيذ الاستنتاج. على بيانات الإدخال.
- CameraViewController: لتنفيذ واجهة المستخدم لوضع إدخال خلاصة الكاميرا المباشرة وعرض المعالم.
- MediaLibraryViewController.swift: لتنفيذ واجهة المستخدم لوضع إدخال الصور الثابتة وملفات الفيديو يتصور المعالم.
ضبط إعدادات الجهاز
يصف هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير لترميز الرموز البرمجية لاستخدام Pose Premierer. للحصول على معلومات عامة حول إعداد بيئة تطوير لاستخدام مهام MediaPipe، بما في ذلك إصدار النظام الأساسي المتطلبات، يُرجى الاطّلاع على دليل الإعداد لنظام التشغيل iOS.
التبعيات
يستخدم Pose Scroller مكتبة "MediaPipeTasksVision
" التي يجب تثبيتها.
باستخدام CocoaPods. المكتبة متوافقة مع تطبيقَي Swift وObjective-C
ولا تتطلب أي إعداد إضافي خاص بلغة معيّنة.
للحصول على تعليمات حول تثبيت CocoaPods على نظام التشغيل macOS، يُرجى الرجوع إلى مقالة CocoaPods.
دليل التركيب.
للحصول على تعليمات حول كيفية إنشاء Podfile
باستخدام المجموعات الصغيرة اللازمة
التطبيق، راجع استخدام
CocoaPods
أضِف لوحة MediaPipeTasksVision في Podfile
باستخدام الرمز التالي:
target 'MyPoseLandmarkerApp' do
use_frameworks!
pod 'MediaPipeTasksVision'
end
إذا كان تطبيقك يتضمّن أهداف اختبار وحدات، راجِع دليل إعداد
iOS للحصول على معلومات إضافية حول إعداد
Podfile
.
الطراز
تتطلب مهمة MediaPipe Pose Insightser حزمة مدرَّبة متوافقة. بهذه المهمة. لمزيد من المعلومات حول النماذج المدربة المتاحة Pose تاريخي، راجع نظرة عامة على المهمة النماذج .
يمكنك استخدام download_models.sh
.
نص برمجي
لتنزيل النماذج وإضافتها إلى دليل المشروع باستخدام Xcode. بالنسبة
تعليمات حول كيفية إضافة ملفات إلى مشروع Xcode، راجِع مقالة إدارة الملفات
والمجلدات في Xcode
مشروعك.
استخدِم السمة BaseOptions.modelAssetPath
لتحديد مسار النموذج.
في حِزمة التطبيق. للاطّلاع على مثال على الرمز البرمجي، يُرجى مراجعة القسم التالي.
إنشاء المهمة
يمكنك إنشاء مهمة Pose Insightser من خلال استدعاء أحد أدوات الإعداد الخاصة بها. تشير رسالة الأشكال البيانية
يقبل برنامج تهيئة "PoseLandmarker(options:)
" قيم الإعدادات
الخيارات.
إذا لم تكن بحاجة إلى أداة Pose Lookerer التي تم إعدادها باستخدام الإعدادات المخصّصة
الخيارات، يمكنك استخدام أداة إعداد "PoseLandmarker(modelPath:)
" لإنشاء
أداة تحديد الوضع مع الخيارات التلقائية. لمزيد من المعلومات عن الإعدادات
اطلع على نظرة عامة على التهيئة.
تتيح مَهمّة Pose Insightser استخدام 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];
ملاحظة: في حال كنت تستخدم وضع الفيديو أو وضع البث المباشر، تستخدم أداة Pose Marker. التتبع لتجنب تشغيل نموذج اكتشاف راحة اليد في كل إطار، مما يساعد تقليل وقت الاستجابة
خيارات الإعداد
تتضمّن هذه المهمة خيارات الضبط التالية لتطبيقات iOS:
اسم الخيار | الوصف | نطاق القيمة | القيمة الافتراضية |
---|---|---|---|
running_mode |
لضبط وضع التشغيل للمهمة. هناك ثلاثة
وسائل النقل: IMAGE: وضع إدخالات الصورة الفردية فيديو: وضع الإطارات التي تم فك ترميزها لفيديو معيّن 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 |
ما إذا كان Pose Markdown يُخرج قناع تجزئة للجهاز الذي تم رصده وضعية. | Boolean |
False |
result_callback |
تعيين أداة معالجة النتيجة لتلقي نتائج المعلم
بشكل غير متزامن عندما يكون Pose Insights في وضع البث المباشر
لا يمكن استخدام الإذن إلا عند ضبط "وضع التشغيل" على LIVE_STREAM |
ResultListener |
N/A |
إعدادات البث المباشر
عند ضبط وضع الجري على "البث المباشر"، يتطلّب برنامج Pose Scroller كلاً من
خيار ضبط إضافي لـ poseLandmarkerLiveStreamDelegate
، والذي
يمكّن Pose Marker من عرض نتائج رصد معالم الوضعية
بشكل غير متزامن. على المفوَّض تنفيذ
طريقة واحدة (poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)
)،
الذي يستدعي Pose Markdown بعد معالجة نتائج أداء وضعية
الكشف عن المعالم في كل إطار.
اسم الخيار | الوصف | نطاق القيمة | القيمة الافتراضية |
---|---|---|---|
poseLandmarkerLiveStreamDelegate |
تفعيل Pose Lookerer من أجل تلقّي نتائج وضعية الأداء
رصد المعالم بشكل غير متزامن في وضع البث المباشر الفصل الذي
على هذه السمة يجب أن تنفذ
poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)
. |
غير منطبق | لم يتم ضبط الوضع |
تجهيز البيانات
يجب تحويل الصورة المدخلة أو الإطار إلى كائن MPImage
قبل
وتمريره إلى Pose Leveler. يتيح MPImage
أنواعًا مختلفة من صور iOS.
ويمكنك استخدامها في أي وضع من أوضاع الجري للاستنتاج. لمزيد من المعلومات،
المعلومات حول MPImage
، فيمكنك الرجوع إلى
واجهة برمجة تطبيقات MPImage
اختَر تنسيق صورة لنظام التشغيل iOS بناءً على حالة الاستخدام ووضع الجري.
يتطلب التطبيق.MPImage
تقبل UIImage
وCVPixelBuffer
و
CMSampleBuffer
تنسيقات للصور على نظام التشغيل iOS
UIImage
يناسب تنسيق UIImage
تمامًا أوضاع الجري التالية:
الصور: صور من حِزمة تطبيق أو معرض مستخدمين أو نظام ملفات بتنسيق يمكن تحويل
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
القيم. لا يتوافق Pose Marker مع الاتجاهات المعكوسة، مثل .upMirrored
.
.downMirrored
و.leftMirrored
و.rightMirrored
للحصول على مزيد من المعلومات حول UIImage
، يمكنك الرجوع إلى UIImage Apple Developer
الوثائق.
CVPixelBuffer
إنّ تنسيق CVPixelBuffer
مناسب تمامًا للتطبيقات التي تنشئ إطارات.
واستخدام CoreImage لنظام التشغيل iOS
إطار عمل المعالجة.
يناسب تنسيق CVPixelBuffer
تمامًا أوضاع الجري التالية:
الصور: التطبيقات التي تنشئ
CVPixelBuffer
صورة بعد إجراء بعض المعالجة باستخدام إطار عملCoreImage
في iOS، يمكن إرسال هذا إلى Pose Designerer في وضع تشغيل الصور.الفيديوهات: يمكن تحويل إطارات الفيديو إلى تنسيق
CVPixelBuffer
ثم إرسالها إلى أداة تحديد الموقع في وضع الفيديو.البث المباشر: يمكن تحويل التطبيقات التي تستخدم كاميرا iOS لإنشاء الإطارات بتنسيق
CVPixelBuffer
لمعالجته قبل إرساله إلى Pose Marker في وضع البث المباشر
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
المطوّر
الوثائق.
تنفيذ المهمة
لتشغيل Pose Insightser، استخدِم طريقة detect()
الخاصة بالمَعلمة التي تم تعيينها.
وضع الجري:
- صورة ثابتة:
detect(image:)
- الفيديو:
detect(videoFrame:timestampInMilliseconds:)
- بث مباشر:
detectAsync(image:timestampInMilliseconds:)
تعرض نماذج التعليمات البرمجية التالية أمثلة بسيطة حول كيفية تشغيل PoseMarker في أوضاع الجري المختلفة:
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];
يوضّح مثال رمز Pose Marker عمليات تنفيذ كل وضع من هذه الأوضاع.
بشكل أكثر تفصيلاً detect(image:)
، detect(videoFrame:timestampInMilliseconds:)
،
وdetectAsync(image:timestampInMilliseconds:)
. يسمح المثال بالرمز البرمجي
المستخدم للتبديل بين أوضاع المعالجة التي قد لا تكون مطلوبة لاستخدامك
الحالة.
يُرجى ملاحظة ما يلي:
عند تشغيل وضع الفيديو في وضع الفيديو أو وضع البث المباشر، يجب أيضًا توفير: الطابع الزمني لإطار الإدخال لمهمة Pose Insightser
عند التشغيل في وضع الصور أو الفيديو، تمنع مهمة Pose Insightser سلسلة المحادثات الحالية إلى أن تنتهي من معالجة الصورة أو الإطار الذي تم إدخاله. إلى تجنَّب حظر سلسلة التعليمات الحالية، يُرجى تنفيذ المعالجة في الخلفية. سلسلة محادثات باستخدام iOS Dispatch أو NSOperation وأطر العمل.
عند التشغيل في وضع البث المباشر، يتم عرض مهمة Pose Scroller على الفور. ولا يحظر سلسلة المحادثات الحالية إنه يستدعي طريقة واحدة (
poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)
) مع نتيجة تحديد وضعية الجسم بعد معالجة كل إطار إدخال. تشير رسالة الأشكال البيانية يستدعي Pose Marker هذه الطريقة بشكل غير متزامن على رقم تسلسلي مخصّص قائمة انتظار الإرسال. لعرض النتائج على واجهة المستخدم، أرسل النتائج إلى قائمة الانتظار الرئيسية بعد معالجة النتائج. إذا كانت السمةdetectAsync
عند انشغال مهمة Pose تاريخي مشغولة بمعالجة الإطار، يتجاهل معلم Pose إطار الإدخال الجديد.
التعامل مع العملاء وعرض النتائج
عند تشغيل الاستنتاج، تعرض مهمة Pose Metricser رمز 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
: إحداثيات واقعية ثلاثية الأبعاد بالمتر، منتصف الوركين باعتباره الأصل.visibility
: احتمال ظهور المَعلم ضمن الصورة
تُظهر الصورة التالية تصورًا لنتج المهمة:
ويمثل قناع التقسيم الاختياري احتمالية انتماء كل بكسل. إلى شخص تم رصده الصورة التالية هي قناع تقسيم مخرجات المهمة:
يوضّح مثال رمز Pose Marker طريقة عرض أحد معلمَي Pose Insights. نتائجك.