iOS এর জন্য মুখ সনাক্তকরণ গাইড

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

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

কোড উদাহরণ

MediaPipe টাস্কের উদাহরণ কোড হল 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/face_detector/ios/
    

উদাহরণ কোডের একটি স্থানীয় সংস্করণ তৈরি করার পরে, আপনি MediaPipe টাস্ক লাইব্রেরি ইনস্টল করতে পারেন, Xcode ব্যবহার করে প্রকল্পটি খুলতে পারেন এবং অ্যাপটি চালাতে পারেন। নির্দেশাবলীর জন্য, iOS এর জন্য সেটআপ গাইড দেখুন।

মূল উপাদান

নিম্নলিখিত ফাইলগুলিতে ফেস ডিটেক্টর উদাহরণ অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ কোড রয়েছে:

  • FaceDetectorService.swift : ডিটেক্টর শুরু করে, মডেল নির্বাচন পরিচালনা করে এবং ইনপুট ডেটাতে অনুমান চালায়।
  • CameraViewController : লাইভ ক্যামেরা ফিড ইনপুট মোডের জন্য UI প্রয়োগ করে এবং সনাক্তকরণের ফলাফলগুলি কল্পনা করে।
  • MediaLibraryViewController.swift : স্থির চিত্র এবং ভিডিও ফাইল ইনপুট মোডের জন্য UI প্রয়োগ করে এবং সনাক্তকরণের ফলাফলগুলি কল্পনা করে।

সেটআপ

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

নির্ভরতা

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

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

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

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

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

মডেল

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

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

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

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

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

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

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

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

সুইফট

ছবি

import MediaPipeTasksVision

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "tflite")

let options = FaceDetectorOptions()
options.baseOptions.modelAssetPath = modelPath
options.runningMode = .image

let faceDetector = try FaceDetector(options: options)
    

ভিডিও

import MediaPipeTasksVision

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "tflite")

let options = FaceDetectorOptions()
options.baseOptions.modelAssetPath = modelPath
options.runningMode = .video

let faceDetector = try FaceDetector(options: options)
    

লাইভস্ট্রিম

import MediaPipeTasksVision

// Class that conforms to the `FaceDetectorLiveStreamDelegate` protocol and
// implements the method that the face detector calls once it finishes
// detecting faces in each input frame.
class FaceDetectorResultProcessor: NSObject, FaceDetectorLiveStreamDelegate {

  func faceDetector(
    _ faceDetector: FaceDetector,
    didFinishDetection result: FaceDetectorResult?,
    timestampInMilliseconds: Int,
    error: Error?) {

    // Process the face detection result or errors here.

  }
}

let modelPath = Bundle.main.path(
  forResource: "model",
  ofType: "tflite")

let options = FaceDetectorOptions()
options.baseOptions.modelAssetPath = modelPath
options.runningMode = .liveStream

// Assign an object of the class to the `faceDetectorLiveStreamDelegate`
// property.
let processor = FaceDetectorResultProcessor()
options.faceDetectorLiveStreamDelegate = processor

let faceDetector = try FaceDetector(options: options)
    

উদ্দেশ্য-C

ছবি

@import MediaPipeTasksVision;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPFaceDetectorOptions *options = [[MPPFaceDetectorOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.runningMode = MPPRunningModeImage;

MPPFaceDetector *faceDetector =
      [[MPPFaceDetector alloc] initWithOptions:options error:nil];
    

ভিডিও

@import MediaPipeTasksVision;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPFaceDetectorOptions *options = [[MPPFaceDetectorOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.runningMode = MPPRunningModeVideo;

MPPFaceDetector *faceDetector =
      [[MPPFaceDetector alloc] initWithOptions:options error:nil];
    

লাইভস্ট্রিম

@import MediaPipeTasksVision;

// Class that conforms to the `MPPFaceDetectorLiveStreamDelegate` protocol
// and implements the method that the face detector calls once it finishes
// detecting faces in each input frame.

@interface APPFaceDetectorResultProcessor : NSObject 

@end

@implementation APPFaceDetectorResultProcessor

-   (void)faceDetector:(MPPFaceDetector *)faceDetector
    didFinishDetectionWithResult:(MPPFaceDetectorResult *)faceDetectorResult
         timestampInMilliseconds:(NSInteger)timestampInMilliseconds
                           error:(NSError *)error {

    // Process the face detector result or errors here.

}

@end

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPFaceDetectorOptions *options = [[MPPFaceDetectorOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.runningMode = MPPRunningModeLiveStream;

// Assign an object of the class to the `faceDetectorLiveStreamDelegate`
// property.
APPFaceDetectorResultProcessor *processor = [APPFaceDetectorResultProcessor new];
options.faceDetectorLiveStreamDelegate = processor;

MPPFaceDetector *faceDetector =
      [[MPPFaceDetector alloc] initWithOptions:options error:nil];
    

দ্রষ্টব্য: আপনি ভিডিও মোড বা লাইভস্ট্রিম মোড ব্যবহার করলে, ফেস ডিটেক্টর প্রতিটি ফ্রেমে সনাক্তকরণ মডেলটিকে ট্রিগার না করতে ট্র্যাকিং ব্যবহার করে, যা লেটেন্সি কমাতে সাহায্য করে।

কনফিগারেশন বিকল্প

এই টাস্কে iOS অ্যাপের জন্য নিম্নলিখিত কনফিগারেশন বিকল্প রয়েছে:

বিকল্পের নাম বর্ণনা মান পরিসীমা ডিফল্ট মান
runningMode টাস্কের জন্য চলমান মোড সেট করে। তিনটি মোড আছে:

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

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

লাইভ_স্ট্রিম: ইনপুট ডেটার লাইভস্ট্রিমের মোড, যেমন ক্যামেরা থেকে। এই মোডে, ফলাফল শ্রোতাকে অ্যাসিঙ্ক্রোনাসভাবে ফলাফল পেতে একটি শ্রোতা সেট আপ করতে কল করতে হবে।
{ RunningMode.image, RunningMode.video, RunningMode.liveStream } RunningMode.image
minDetectionConfidence মুখ শনাক্তকরণ সফল বলে বিবেচিত হওয়ার জন্য সর্বনিম্ন আত্মবিশ্বাসের স্কোর৷ Float [0,1] 0.5
minSuppressionThreshold মুখ সনাক্তকরণের জন্য সর্বনিম্ন অ-সর্বোচ্চ-দমন থ্রেশহোল্ডকে ওভারল্যাপ বলে বিবেচনা করা হবে। Float [0,1] 0.3

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

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

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

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

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

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

UIIমেজ

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

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

  • ভিডিও: CGImage ফরম্যাটে ভিডিও ফ্রেম বের করতে AVAssetImageGenerator ব্যবহার করুন, তারপর সেগুলোকে 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)
    

উদ্দেশ্য-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];
    

উদাহরণটি ডিফল্ট 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)
    

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

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)
    

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

টাস্ক চালান

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

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

ফেস ডিটেক্টর ইনপুট ইমেজ বা ফ্রেমের মধ্যে সনাক্ত করা মুখগুলি ফিরিয়ে দেয়।

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

সুইফট

ছবি

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

ভিডিও

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

লাইভস্ট্রিম

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

উদ্দেশ্য-C

ছবি

MPPFaceDetectorResult *result = [faceDetector detectInImage:image
                                                      error:nil];
    

ভিডিও

MPPFaceDetectorResult *result = [faceDetector detectInVideoFrame:image
                                         timestampInMilliseconds:timestamp
                                                           error:nil];
    

লাইভস্ট্রিম

BOOL success = [faceDetector detectAsyncInImage:image
                        timestampInMilliseconds:timestamp
                                          error:nil];
    

ফেস ডিটেক্টর কোডের উদাহরণ এই প্রতিটি মোডের বাস্তবায়নকে আরও বিস্তারিতভাবে দেখায় detect(image:) , detect(videoFrame:timestampInMilliseconds:) , এবং detectAsync(image:timestampInMilliseconds:) । উদাহরণ কোড ব্যবহারকারীকে প্রক্রিয়াকরণ মোডগুলির মধ্যে স্যুইচ করার অনুমতি দেয় যা আপনার ব্যবহারের ক্ষেত্রে প্রয়োজন নাও হতে পারে।

নিম্নলিখিত নোট করুন:

  • ভিডিও মোড বা লাইভস্ট্রিম মোডে চলাকালীন, আপনাকে অবশ্যই ফেস ডিটেক্টর টাস্কে ইনপুট ফ্রেমের টাইমস্ট্যাম্প প্রদান করতে হবে।

  • ইমেজ বা ভিডিও মোডে চলার সময়, ফেস ডিটেক্টর টাস্ক বর্তমান থ্রেডটিকে ব্লক করে যতক্ষণ না এটি ইনপুট ইমেজ বা ফ্রেম প্রক্রিয়াকরণ শেষ করে। বর্তমান থ্রেড ব্লক করা এড়াতে, iOS ডিসপ্যাচ বা NSOoperation ফ্রেমওয়ার্ক ব্যবহার করে একটি ব্যাকগ্রাউন্ড থ্রেডে প্রক্রিয়াকরণ চালান।

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

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

অনুমান চালানোর পরে, ফেস ডিটেক্টর টাস্ক একটি FaceDetectorResult অবজেক্ট প্রদান করে যাতে সনাক্ত করা মুখগুলির জন্য বাউন্ডিং বাক্স এবং প্রতিটি সনাক্ত করা মুখের জন্য একটি আত্মবিশ্বাস স্কোর থাকে।

নিম্নলিখিত এই টাস্ক থেকে আউটপুট ডেটার একটি উদাহরণ দেখায়:

FaceDetectionResult:
  Detections:
    Detection #0:
      BoundingBox:
        origin_x: 126
        origin_y: 100
        width: 463
        height: 463
      Categories:
        Category #0:
          index: 0
          score: 0.9729152917861938
      NormalizedKeypoints:
        NormalizedKeypoint #0:
          x: 0.18298381567001343
          y: 0.2961040139198303
        NormalizedKeypoint #1:
          x: 0.3302789330482483
          y: 0.29289937019348145
        ... (6 keypoints for each face)
    Detection #1:
      BoundingBox:
        origin_x: 616
        origin_y: 193
        width: 430
        height: 430
      Categories:
        Category #0:
          index: 0
          score: 0.9251380562782288
      NormalizedKeypoints:
        NormalizedKeypoint #0:
          x: 0.6151331663131714
          y: 0.3713381886482239
        NormalizedKeypoint #1:
          x: 0.7460576295852661
          y: 0.38825345039367676
        ... (6 keypoints for each face)

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

বাউন্ডিং বাক্স ছাড়া ছবির জন্য, আসল ছবি দেখুন।

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