আইওএসের জন্য পোজ ল্যান্ডমার্ক সনাক্তকরণ গাইড

পোজ ল্যান্ডমার্কার টাস্ক আপনাকে একটি চিত্র বা ভিডিওতে মানবদেহের ল্যান্ডমার্ক সনাক্ত করতে দেয়। আপনি শরীরের মূল অবস্থানগুলি সনাক্ত করতে, অঙ্গবিন্যাস বিশ্লেষণ করতে এবং আন্দোলনগুলিকে শ্রেণীবদ্ধ করতে এই কাজটি ব্যবহার করতে পারেন। এই কাজটি মেশিন লার্নিং (ML) মডেল ব্যবহার করে যা একক ছবি বা ভিডিওর সাথে কাজ করে। টাস্কটি ইমেজ কোঅর্ডিনেট এবং 3-ডাইমেনশনাল ওয়ার্ল্ড কোঅর্ডিনেটে বডি পোজ ল্যান্ডমার্ককে আউটপুট করে।

এই নির্দেশাবলী আপনাকে দেখায় কিভাবে iOS অ্যাপের সাথে পোজ ল্যান্ডমার্কার ব্যবহার করতে হয়। এই নির্দেশাবলীতে বর্ণিত কোড নমুনা GitHub এ উপলব্ধ।

আপনি এই ওয়েব ডেমো দেখে এই কাজটি কার্যকর দেখতে পারেন। এই কাজের ক্ষমতা, মডেল এবং কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, ওভারভিউ দেখুন।

কোড উদাহরণ

MediaPipe টাস্কের উদাহরণ কোড হল iOS-এর জন্য একটি Pose Landmarker অ্যাপের একটি মৌলিক বাস্তবায়ন। উদাহরণটি একটানা ভিডিও স্ট্রীমে ভঙ্গি সনাক্ত করতে একটি ভৌত ​​iOS ডিভাইসে ক্যামেরা ব্যবহার করে। অ্যাপটি ডিভাইস গ্যালারি থেকে ছবি এবং ভিডিওতে ভঙ্গিও শনাক্ত করতে পারে।

আপনি অ্যাপটিকে আপনার নিজের iOS অ্যাপের জন্য একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করতে পারেন, অথবা একটি বিদ্যমান অ্যাপ পরিবর্তন করার সময় এটি উল্লেখ করতে পারেন। পোজ ল্যান্ডমার্কারের উদাহরণ কোডটি গিটহাবে হোস্ট করা হয়েছে।

কোডটি ডাউনলোড করুন

নিম্নলিখিত নির্দেশাবলী আপনাকে দেখায় কিভাবে গিট কমান্ড লাইন টুল ব্যবহার করে উদাহরণ কোডের একটি স্থানীয় অনুলিপি তৈরি করতে হয়।

উদাহরণ কোড ডাউনলোড করতে:

  1. নিম্নলিখিত কমান্ড ব্যবহার করে গিট সংগ্রহস্থল ক্লোন করুন:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. ঐচ্ছিকভাবে, স্পার্স চেকআউট ব্যবহার করতে আপনার গিট ইন্সট্যান্স কনফিগার করুন, যাতে আপনার কাছে পোজ ল্যান্ডমার্কার উদাহরণ অ্যাপের জন্য শুধুমাত্র ফাইল থাকে:

    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 প্রয়োগ করে এবং ল্যান্ডমার্কগুলিকে কল্পনা করে৷

সেটআপ

এই বিভাগে আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করার মূল ধাপগুলি এবং পোজ ল্যান্ডমার্কার ব্যবহার করার জন্য কোড প্রকল্পগুলি বর্ণনা করা হয়েছে। প্ল্যাটফর্ম সংস্করণ প্রয়োজনীয়তা সহ MediaPipe কার্যগুলি ব্যবহার করার জন্য আপনার বিকাশের পরিবেশ সেট আপ করার বিষয়ে সাধারণ তথ্যের জন্য, iOS এর জন্য সেটআপ নির্দেশিকা দেখুন।

নির্ভরতা

পোজ ল্যান্ডমার্কার MediaPipeTasksVision লাইব্রেরি ব্যবহার করে, যা CocoaPods ব্যবহার করে ইনস্টল করা আবশ্যক। লাইব্রেরিটি সুইফট এবং অবজেক্টিভ-সি উভয় অ্যাপের সাথেই সামঞ্জস্যপূর্ণ এবং কোনো অতিরিক্ত ভাষা-নির্দিষ্ট সেটআপের প্রয়োজন নেই।

ম্যাকওএস-এ কোকোপড ইনস্টল করার নির্দেশাবলীর জন্য, কোকোপডস ইনস্টলেশন নির্দেশিকা পড়ুন। আপনার অ্যাপের জন্য প্রয়োজনীয় পড দিয়ে কীভাবে একটি Podfile তৈরি করবেন তার নির্দেশাবলীর জন্য, CocoaPods ব্যবহার করুন দেখুন।

নিম্নলিখিত কোড ব্যবহার করে Podfile এ MediaPipeTasksVision পড যোগ করুন:

target 'MyPoseLandmarkerApp' do
  use_frameworks!
  pod 'MediaPipeTasksVision'
end

যদি আপনার অ্যাপে ইউনিট পরীক্ষার লক্ষ্য অন্তর্ভুক্ত থাকে, তাহলে আপনার Podfile সেট আপ করার বিষয়ে অতিরিক্ত তথ্যের জন্য iOS এর জন্য সেট আপ গাইড দেখুন।

মডেল

MediaPipe Pose Landmarker টাস্কের জন্য একটি প্রশিক্ষিত বান্ডিল প্রয়োজন যা এই কাজের সাথে সামঞ্জস্যপূর্ণ। পোজ ল্যান্ডমার্কারের জন্য উপলব্ধ প্রশিক্ষিত মডেল সম্পর্কে আরও তথ্যের জন্য, টাস্ক ওভারভিউ মডেল বিভাগটি দেখুন।

মডেলগুলি ডাউনলোড করতে download_models.sh স্ক্রিপ্টটি ব্যবহার করুন এবং Xcode ব্যবহার করে আপনার প্রকল্প ডিরেক্টরিতে যুক্ত করুন। আপনার এক্সকোড প্রকল্পে কীভাবে ফাইল যুক্ত করবেন সে সম্পর্কে নির্দেশাবলীর জন্য, আপনার এক্সকোড প্রকল্পে ফাইল এবং ফোল্ডার পরিচালনা করতে দেখুন।

আপনার অ্যাপ বান্ডেলে মডেলের পাথ নির্দিষ্ট করতে BaseOptions.modelAssetPath প্রপার্টি ব্যবহার করুন। একটি কোড উদাহরণের জন্য, পরবর্তী বিভাগ দেখুন।

টাস্ক তৈরি করুন

আপনি এর ইনিশিয়ালাইজারগুলির একটিকে কল করে পোজ ল্যান্ডমার্কার টাস্ক তৈরি করতে পারেন। PoseLandmarker(options:) সূচনাকারী কনফিগারেশন বিকল্পগুলির জন্য মান গ্রহণ করে।

আপনার যদি কাস্টমাইজড কনফিগারেশন বিকল্পগুলির সাথে একটি পোজ ল্যান্ডমার্কার আরম্ভ করার প্রয়োজন না হয়, আপনি ডিফল্ট বিকল্পগুলির সাথে একটি পোজ ল্যান্ডমার্কার তৈরি করতে PoseLandmarker(modelPath:) ইনিশিয়ালাইজার ব্যবহার করতে পারেন। কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন ওভারভিউ দেখুন।

পোজ ল্যান্ডমার্কার টাস্ক 3টি ইনপুট ডেটা টাইপ সমর্থন করে: স্থির চিত্র, ভিডিও ফাইল এবং লাইভ ভিডিও স্ট্রিম। ডিফল্টরূপে, PoseLandmarker(modelPath:) স্থির চিত্রগুলির জন্য একটি কাজ শুরু করে। আপনি যদি ভিডিও ফাইল বা লাইভ ভিডিও স্ট্রীম প্রক্রিয়া করার জন্য আপনার কাজ শুরু করতে চান, তাহলে ভিডিও বা লাইভস্ট্রিম চলমান মোড নির্দিষ্ট করতে PoseLandmarker(options:) ব্যবহার করুন। লাইভস্ট্রিম মোডের জন্য অতিরিক্ত poseLandmarkerLiveStreamDelegate কনফিগারেশন বিকল্পেরও প্রয়োজন, যা পোজ ল্যান্ডমার্কারকে অসিঙ্ক্রোনাসভাবে প্রতিনিধিদের কাছে পোজ ল্যান্ডমার্ক সনাক্তকরণ ফলাফল প্রদান করতে সক্ষম করে।

কীভাবে টাস্ক তৈরি করতে হয় এবং অনুমান চালাতে হয় তা দেখতে আপনার চলমান মোডের সাথে সম্পর্কিত ট্যাবটি চয়ন করুন৷

সুইফট

ছবি

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)
    

উদ্দেশ্য গ

ছবি

@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 টাস্কের জন্য চলমান মোড সেট করে। তিনটি মোড আছে:

IMAGE: একক ইমেজ ইনপুট জন্য মোড.

ভিডিও: একটি ভিডিওর ডিকোড করা ফ্রেমের মোড।

লাইভ_স্ট্রিম: ইনপুট ডেটার লাইভস্ট্রিমের মোড, যেমন ক্যামেরা থেকে। এই মোডে, 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 পোজ ল্যান্ডমার্কার লাইভ স্ট্রিম মোডে থাকাকালীন ল্যান্ডমার্কারের ফলাফলগুলি অ্যাসিঙ্ক্রোনাসভাবে পেতে ফলাফল শ্রোতাকে সেট করে। চলমান মোড LIVE_STREAM এ সেট করা থাকলেই কেবল ব্যবহার করা যাবে৷ ResultListener N/A

লাইভস্ট্রিম কনফিগারেশন

যখন চলমান মোডটি লাইভস্ট্রিমে সেট করা থাকে, তখন পোজ ল্যান্ডমার্কারের অতিরিক্ত poseLandmarkerLiveStreamDelegate কনফিগারেশন বিকল্পের প্রয়োজন হয়, যা পোজ ল্যান্ডমার্ককে অ্যাসিঙ্ক্রোনাসভাবে পোজ ল্যান্ডমার্ক সনাক্তকরণ ফলাফল প্রদান করতে সক্ষম করে। প্রতিনিধিদের অবশ্যই poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:) পদ্ধতি, যা প্রতিটি ফ্রেমে পোজ ল্যান্ডমার্ক সনাক্তকরণ সম্পাদনের ফলাফলগুলি প্রক্রিয়াজাত করার পরে পোজ ল্যান্ডমার্কার কল করে।

বিকল্পের নাম বর্ণনা মান পরিসীমা ডিফল্ট মান
poseLandmarkerLiveStreamDelegate পোজ ল্যান্ডমার্ককে লাইভস্ট্রিম মোডে অ্যাসিঙ্ক্রোনাসভাবে পোজ ল্যান্ডমার্ক সনাক্তকরণের ফলাফলগুলি পেতে সক্ষম করে৷ যে শ্রেণীর উদাহরণটি এই বৈশিষ্ট্যে সেট করা হয়েছে তাকে অবশ্যই poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:) পদ্ধতিটি প্রয়োগ করতে হবে। প্রযোজ্য নয় সেট না

ডেটা প্রস্তুত করুন

পোজ ল্যান্ডমার্কারের কাছে পাঠানোর আগে আপনাকে ইনপুট ইমেজ বা ফ্রেমটিকে MPImage অবজেক্টে রূপান্তর করতে হবে। MPImage বিভিন্ন ধরনের iOS ইমেজ ফরম্যাট সমর্থন করে এবং অনুমানের জন্য যেকোন চলমান মোডে সেগুলি ব্যবহার করতে পারে। MPImage সম্পর্কে আরও তথ্যের জন্য, MPImage API পড়ুন

আপনার ব্যবহারের ক্ষেত্রে এবং আপনার অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় চলমান মোডের উপর ভিত্তি করে একটি iOS চিত্র বিন্যাস চয়ন করুন। MPImage UIImage , CVPixelBuffer এবং CMSampleBuffer আইওএস চিত্রের ফর্ম্যাটগুলি গ্রহণ করে।

UIIমেজ

UIImage ফরম্যাট নিম্নলিখিত চলমান মোডগুলির জন্য উপযুক্ত:

  • ছবি: একটি অ্যাপ বান্ডেল, ব্যবহারকারীর গ্যালারি, বা UIImage চিত্র হিসাবে ফর্ম্যাট করা ফাইল সিস্টেম থেকে ছবিগুলিকে MPImage অবজেক্টে রূপান্তর করা যেতে পারে।

  • ভিডিওগুলি: সিজিআইমেজ ফর্ম্যাটে ভিডিও ফ্রেমগুলি বের করতে অ্যাভাসেসেটিমেজ জেনারেটর ব্যবহার করুন, তারপরে এগুলিকে UIImage চিত্রগুলিতে রূপান্তর করুন।

সুইফট

// 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)
    

উদ্দেশ্য গ

// 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];
    

উদাহরণটি ডিফল্ট UIImage.Orientation.Up অভিযোজন সহ একটি MPImage শুরু করে। আপনি সমর্থিত UIImage.Orientation মানগুলির সাথে একটি MPImage আরম্ভ করতে পারেন। পোজ ল্যান্ডমার্কার .upMirrored , .downMirrored , .leftMirrored , .rightMirrored এর মত মিরর করা অভিযোজন সমর্থন করে না৷

UIImage সম্পর্কে আরও তথ্যের জন্য, UIImage অ্যাপল ডেভেলপার ডকুমেন্টেশন পড়ুন।

সিভিপিক্সেলবাফার

CVPixelBuffer ফর্ম্যাটটি এমন অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত যা ফ্রেম তৈরি করে এবং প্রক্রিয়াকরণের জন্য iOS CoreImage ফ্রেমওয়ার্ক ব্যবহার করে৷

CVPixelBuffer ফর্ম্যাট নিম্নলিখিত চলমান মোডগুলির জন্য উপযুক্ত:

  • ছবি: আইওএস-এর CoreImage ফ্রেমওয়ার্ক ব্যবহার করে কিছু প্রক্রিয়াকরণের পরে CVPixelBuffer ইমেজ তৈরি করে এমন অ্যাপগুলি ইমেজ চলমান মোডে পোজ ল্যান্ডমার্কারের কাছে পাঠানো যেতে পারে।

  • ভিডিও: ভিডিও ফ্রেমগুলি প্রক্রিয়াকরণের জন্য CVPixelBuffer ফর্ম্যাটে রূপান্তরিত করা যেতে পারে এবং তারপরে ভিডিও মোডে পোজ ল্যান্ডমার্কারের কাছে পাঠানো যেতে পারে।

  • লাইভস্ট্রিম: ফ্রেম তৈরি করতে iOS ক্যামেরা ব্যবহার করে অ্যাপগুলিকে লাইভস্ট্রিম মোডে পোজ ল্যান্ডমার্কে পাঠানোর আগে প্রক্রিয়াকরণের জন্য CVPixelBuffer ফর্ম্যাটে রূপান্তরিত করা যেতে পারে।

সুইফট

// 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)
    

উদ্দেশ্য গ

// 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 অ্যাপল ডেভেলপার ডকুমেন্টেশন পড়ুন।

CMSampleBuffer

CMSampleBuffer ফরম্যাট একটি ইউনিফর্ম মিডিয়া ধরনের মিডিয়া নমুনা সঞ্চয় করে এবং লাইভস্ট্রিম চলমান মোডের জন্য উপযুক্ত। iOS ক্যামেরা থেকে লাইভ ফ্রেমগুলি iOS AVCaptureVideoDataOutput দ্বারা CMSampleBuffer ফর্ম্যাটে অ্যাসিঙ্ক্রোনাসভাবে বিতরণ করা হয়।

সুইফট

// 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)
    

উদ্দেশ্য গ

// 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 অ্যাপল ডেভেলপার ডকুমেন্টেশন পড়ুন।

টাস্ক চালান

পোজ ল্যান্ডমার্কার চালানোর জন্য, নির্ধারিত চলমান মোডের জন্য নির্দিষ্ট detect() পদ্ধতি ব্যবহার করুন:

  • স্থির চিত্র: detect(image:)
  • ভিডিও: detect(videoFrame:timestampInMilliseconds:)
  • লাইভস্ট্রিম: detectAsync(image:timestampInMilliseconds:)

নিম্নলিখিত কোড নমুনাগুলি এই বিভিন্ন চলমান মোডে পোজ ল্যান্ডমার্কার চালানোর সহজ উদাহরণগুলি দেখায়:

সুইফট

ছবি

let result = try poseLandmarker.detect(image: image)
    

ভিডিও

let result = try poseLandmarker.detect(
  videoFrame: image,
  timestampInMilliseconds: timestamp)
    

সরাসরি সম্প্রচার

try poseLandmarker.detectAsync(
  image: image,
  timestampInMilliseconds: timestamp)
    

উদ্দেশ্য গ

ছবি

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 ডিসপ্যাচ বা NSOoperation ফ্রেমওয়ার্ক ব্যবহার করে একটি ব্যাকগ্রাউন্ড থ্রেডে প্রক্রিয়াকরণ চালান।

  • লাইভস্ট্রিম মোডে চলাকালীন, পোজ ল্যান্ডমার্কার টাস্ক অবিলম্বে ফিরে আসে এবং বর্তমান থ্রেডটিকে ব্লক করে না। এটি poseLandmarker(_:didFinishDetection:timestampInMilliseconds:error:) প্রতিটি ইনপুট ফ্রেম প্রক্রিয়াকরণের পরে পোজ ল্যান্ডমার্কারের ফলাফলের সাথে পদ্ধতি। পোজ ল্যান্ডমার্কার একটি ডেডিকেটেড সিরিয়াল ডিসপ্যাচ সারিতে অ্যাসিঙ্ক্রোনাসভাবে এই পদ্ধতিটি চালু করে। ইউজার ইন্টারফেসে ফলাফল প্রদর্শনের জন্য, ফলাফলগুলি প্রক্রিয়াকরণের পর ফলাফলগুলিকে প্রধান সারিতে পাঠান। পোজ ল্যান্ডমার্কার টাস্কটি অন্য ফ্রেম প্রক্রিয়াকরণে ব্যস্ত থাকা অবস্থায় detectAsync ফাংশনটি কল করা হলে, পোজ ল্যান্ডমার্কার নতুন ইনপুট ফ্রেমটিকে উপেক্ষা করে।

হ্যান্ডেল এবং প্রদর্শন ফলাফল

অনুমান চালানোর পরে, Pose Landmarker টাস্ক একটি 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 : ল্যান্ডমার্ক স্থানাঙ্কগুলি চিত্রের প্রস্থ ( x ) এবং উচ্চতা ( y ) দ্বারা 0.0 এবং 1.0 এর মধ্যে স্বাভাবিক করা হয়।

  • z : ল্যান্ডমার্ক গভীরতা, উত্স হিসাবে পোঁদগুলির মাঝপথে গভীরতা সহ। মান যত ছোট হবে, ল্যান্ডমার্ক ক্যামেরার কাছাকাছি হবে। z এর মাত্রা প্রায় x এর মতো একই স্কেল ব্যবহার করে।

  • visibility : চিত্রের মধ্যে ল্যান্ডমার্কের সম্ভাবনা দৃশ্যমান হওয়ার সম্ভাবনা।

আউটপুটটিতে নিম্নলিখিত বিশ্ব সমন্বয়গুলি রয়েছে ( WorldLandmarks ):

  • x , y , এবং z : মিটারে রিয়েল-ওয়ার্ল্ড 3-মাত্রিক স্থানাঙ্কগুলি, পোঁদগুলির মাঝপথে উত্স হিসাবে।

  • visibility : ল্যান্ডমার্কটি চিত্রের মধ্যে দৃশ্যমান হওয়ার সম্ভাবনা।

নিম্নলিখিত চিত্রটি টাস্ক আউটপুটের একটি ভিজ্যুয়ালাইজেশন দেখায়:

ঐচ্ছিক সেগমেন্টেশন মাস্ক প্রতিটি পিক্সেল একজন শনাক্ত ব্যক্তির অন্তর্গত হওয়ার সম্ভাবনা উপস্থাপন করে। নিম্নলিখিত চিত্রটি টাস্ক আউটপুটের একটি সেগমেন্টেশন মাস্ক:

পোজ ল্যান্ডমার্কারের উদাহরণ কোডটি কীভাবে পোজ ল্যান্ডমার্কারের ফলাফলগুলি প্রদর্শন করতে হয় তা প্রদর্শন করে।