MediaPipe ফেস ল্যান্ডমার্কার টাস্ক আপনাকে ছবি এবং ভিডিওতে মুখের ল্যান্ডমার্ক এবং মুখের অভিব্যক্তি সনাক্ত করতে দেয়। আপনি মানুষের মুখের অভিব্যক্তি সনাক্ত করতে, মুখের ফিল্টার এবং প্রভাব প্রয়োগ করতে এবং ভার্চুয়াল অবতার তৈরি করতে এই কাজটি ব্যবহার করতে পারেন। এই টাস্কটি মেশিন লার্নিং (ML) মডেলগুলি ব্যবহার করে যা একক ছবি, ভিডিও বা একটি অবিচ্ছিন্ন চিত্রের সাথে কাজ করতে পারে। টাস্কটি 3-মাত্রিক মুখের ল্যান্ডমার্ক, ব্লেন্ডশেপ স্কোর (মুখের অভিব্যক্তির প্রতিনিধিত্বকারী সহগ) রিয়েল-টাইমে মুখের উপরিভাগের বিস্তারিত অনুমান করতে এবং ইফেক্ট রেন্ডারিংয়ের জন্য প্রয়োজনীয় রূপান্তরগুলি সম্পাদন করার জন্য রূপান্তর ম্যাট্রিক্স আউটপুট করে।
এই নির্দেশাবলীতে বর্ণিত কোড নমুনা GitHub এ উপলব্ধ। আপনি এই ওয়েব ডেমো দেখে এই কাজটি কার্যকর দেখতে পারেন। এই কাজের ক্ষমতা, মডেল এবং কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, ওভারভিউ দেখুন।
কোড উদাহরণ
MediaPipe টাস্কের উদাহরণ কোড হল iOS এর জন্য একটি ফেস ল্যান্ডমার্কার অ্যাপের একটি মৌলিক বাস্তবায়ন। উদাহরণটি একটি অবিচ্ছিন্ন ভিডিও স্ট্রীমে মুখের ল্যান্ডমার্ক সনাক্ত করতে একটি শারীরিক iOS ডিভাইসে ক্যামেরা ব্যবহার করে। অ্যাপটি ডিভাইসের গ্যালারি থেকে ছবি এবং ভিডিওতে মুখের ল্যান্ডমার্কও শনাক্ত করতে পারে।
আপনি অ্যাপটিকে আপনার নিজের iOS অ্যাপের জন্য একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করতে পারেন, অথবা একটি বিদ্যমান অ্যাপ পরিবর্তন করার সময় এটি উল্লেখ করতে পারেন। ফেস ল্যান্ডমার্কারের উদাহরণ কোডটি গিটহাবে হোস্ট করা হয়েছে।
কোডটি ডাউনলোড করুন
নিম্নলিখিত নির্দেশাবলী আপনাকে দেখায় কিভাবে গিট কমান্ড লাইন টুল ব্যবহার করে উদাহরণ কোডের একটি স্থানীয় অনুলিপি তৈরি করতে হয়।
উদাহরণ কোড ডাউনলোড করতে:
নিম্নলিখিত কমান্ড ব্যবহার করে গিট সংগ্রহস্থল ক্লোন করুন:
git clone https://github.com/google-ai-edge/mediapipe-samplesঐচ্ছিকভাবে, স্পার্স চেকআউট ব্যবহার করতে আপনার গিট ইন্সট্যান্স কনফিগার করুন, যাতে আপনার কাছে শুধুমাত্র ফেস ল্যান্ডমার্কার উদাহরণ অ্যাপের জন্য ফাইল থাকে:
cd mediapipe-samples git sparse-checkout init --cone git sparse-checkout set examples/face_landmarker/ios
উদাহরণ কোডের একটি স্থানীয় সংস্করণ তৈরি করার পরে, আপনি MediaPipe টাস্ক লাইব্রেরি ইনস্টল করতে পারেন, Xcode ব্যবহার করে প্রকল্পটি খুলতে পারেন এবং অ্যাপটি চালাতে পারেন। নির্দেশাবলীর জন্য, iOS এর জন্য সেটআপ গাইড দেখুন।
মূল উপাদান
নিম্নলিখিত ফাইলগুলিতে ফেস ল্যান্ডমার্কার উদাহরণ অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ কোড রয়েছে:
- FaceLandmarkerService.swift : ফেস ল্যান্ডমার্কার শুরু করে, মডেল নির্বাচন পরিচালনা করে এবং ইনপুট ডেটাতে অনুমান চালায়।
- CameraViewController.swift : লাইভ ক্যামেরা ফিড ইনপুট মোডের জন্য UI প্রয়োগ করে এবং ফলাফলগুলি কল্পনা করে৷
- MediaLibraryViewController.swift : স্থির চিত্র এবং ভিডিও ফাইল ইনপুট মোডগুলির জন্য UI প্রয়োগ করে এবং ফলাফলগুলি কল্পনা করে৷
সেটআপ
এই বিভাগটি ফেস ল্যান্ডমার্কার ব্যবহার করার জন্য আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট এবং কোড প্রোজেক্ট সেট আপ করার জন্য মূল ধাপগুলি বর্ণনা করে। প্ল্যাটফর্ম সংস্করণ প্রয়োজনীয়তা সহ MediaPipe কার্যগুলি ব্যবহার করার জন্য আপনার বিকাশের পরিবেশ সেট আপ করার বিষয়ে সাধারণ তথ্যের জন্য, iOS এর জন্য সেটআপ নির্দেশিকা দেখুন।
নির্ভরতা
Face Landmarker MediaPipeTasksVision লাইব্রেরি ব্যবহার করে, যা CocoaPods ব্যবহার করে ইনস্টল করা আবশ্যক। লাইব্রেরিটি সুইফট এবং অবজেক্টিভ-সি উভয় অ্যাপের সাথেই সামঞ্জস্যপূর্ণ এবং কোনো অতিরিক্ত ভাষা-নির্দিষ্ট সেটআপের প্রয়োজন নেই।
MacOS-এ CocoaPods ইনস্টল করার নির্দেশাবলীর জন্য, CocoaPods ইনস্টলেশন নির্দেশিকা পড়ুন। আপনার অ্যাপের জন্য প্রয়োজনীয় পড দিয়ে কীভাবে একটি Podfile তৈরি করবেন তার নির্দেশাবলীর জন্য, CocoaPods ব্যবহার করুন দেখুন।
নিম্নলিখিত কোড ব্যবহার করে Podfile এ MediaPipeTasksVision পড যোগ করুন:
target 'MyFaceLandmarkerApp' do
use_frameworks!
pod 'MediaPipeTasksVision'
end
যদি আপনার অ্যাপে ইউনিট পরীক্ষার লক্ষ্য অন্তর্ভুক্ত থাকে, তাহলে আপনার Podfile সেট আপ করার বিষয়ে অতিরিক্ত তথ্যের জন্য iOS এর জন্য সেট আপ গাইড দেখুন।
মডেল
MediaPipe Face Landmarker টাস্কের জন্য একটি প্রশিক্ষিত মডেল বান্ডেল প্রয়োজন যা এই টাস্কের সাথে সামঞ্জস্যপূর্ণ। ফেস ল্যান্ডমার্কারের জন্য উপলব্ধ প্রশিক্ষিত মডেল সম্পর্কে আরও তথ্যের জন্য, টাস্ক ওভারভিউ মডেল বিভাগটি দেখুন।
একটি মডেল নির্বাচন করুন এবং ডাউনলোড করুন এবং Xcode ব্যবহার করে আপনার প্রকল্প ডিরেক্টরিতে যোগ করুন। আপনার Xcode প্রকল্পে ফাইলগুলি কীভাবে যুক্ত করবেন তার নির্দেশাবলীর জন্য, আপনার Xcode প্রকল্পে ফাইল এবং ফোল্ডারগুলি পরিচালনা করুন দেখুন।
আপনার অ্যাপ বান্ডেলে মডেলের পাথ নির্দিষ্ট করতে BaseOptions.modelAssetPath প্রপার্টি ব্যবহার করুন। একটি কোড উদাহরণের জন্য, পরবর্তী বিভাগ দেখুন।
টাস্ক তৈরি করুন
আপনি ফেস ল্যান্ডমার্কার টাস্ক তৈরি করতে পারেন এর ইনিশিয়ালাইজারগুলির একটিকে কল করে। FaceLandmarker(options:) ইনিশিয়ালাইজার কনফিগারেশন বিকল্পগুলির জন্য মান গ্রহণ করে।
আপনার যদি কাস্টমাইজড কনফিগারেশন বিকল্পগুলির সাথে একটি ফেস ল্যান্ডমার্কার আরম্ভ করার প্রয়োজন না হয়, আপনি ডিফল্ট বিকল্পগুলির সাথে একটি ফেস ল্যান্ডমার্কার তৈরি করতে FaceLandmarker(modelPath:) ইনিশিয়ালাইজার ব্যবহার করতে পারেন। কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন ওভারভিউ দেখুন।
ফেস ল্যান্ডমার্কার টাস্ক 3টি ইনপুট ডেটা টাইপ সমর্থন করে: স্টিল ইমেজ, ভিডিও ফাইল এবং লাইভ ভিডিও স্ট্রিম। ডিফল্টরূপে, FaceLandmarker(modelPath:) স্থির চিত্রগুলির জন্য একটি কাজ শুরু করে। আপনি যদি ভিডিও ফাইল বা লাইভ ভিডিও স্ট্রিম প্রক্রিয়া করার জন্য আপনার কাজটি শুরু করতে চান, তাহলে ভিডিও বা লাইভস্ট্রিম চলমান মোড নির্দিষ্ট করতে FaceLandmarker(options:) ব্যবহার করুন। লাইভস্ট্রিম মোডের জন্য অতিরিক্ত faceLandmarkerLiveStreamDelegate কনফিগারেশন বিকল্পেরও প্রয়োজন, যা ফেস ল্যান্ডমার্কারকে অ্যাসিঙ্ক্রোনাসভাবে প্রতিনিধিদের কাছে ফেস ল্যান্ডমার্কারের ফলাফল সরবরাহ করতে সক্ষম করে।
কীভাবে টাস্ক তৈরি করতে হয় এবং অনুমান চালাতে হয় তা দেখতে আপনার চলমান মোডের সাথে সম্পর্কিত ট্যাবটি চয়ন করুন৷
সুইফট
ছবি
import MediaPipeTasksVision let modelPath = Bundle.main.path( forResource: "face_landmarker", ofType: "task") let options = FaceLandmarkerOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .image options.minFaceDetectionConfidence = minFaceDetectionConfidence options.minFacePresenceConfidence = minFacePresenceConfidence options.minTrackingConfidence = minTrackingConfidence options.numFaces = numFaces let faceLandmarker = try FaceLandmarker(options: options)
ভিডিও
import MediaPipeTasksVision let modelPath = Bundle.main.path( forResource: "face_landmarker", ofType: "task") let options = FaceLandmarkerOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .video options.minFaceDetectionConfidence = minFaceDetectionConfidence options.minFacePresenceConfidence = minFacePresenceConfidence options.minTrackingConfidence = minTrackingConfidence options.numFaces = numFaces let faceLandmarker = try FaceLandmarker(options: options)
লাইভস্ট্রিম
import MediaPipeTasksVision // Class that conforms to the `FaceLandmarkerLiveStreamDelegate` protocol and // implements the method that the face landmarker calls once it finishes // performing face landmark detection in each input frame. class FaceLandmarkerResultProcessor: NSObject, FaceLandmarkerLiveStreamDelegate { func faceLandmarker( _ faceLandmarker: FaceLandmarker, didFinishDetection result: FaceLandmarkerResult?, timestampInMilliseconds: Int, error: Error?) { // Process the face landmarker result or errors here. } } let modelPath = Bundle.main.path( forResource: "face_landmarker", ofType: "task") let options = FaceLandmarkerOptions() options.baseOptions.modelAssetPath = modelPath options.runningMode = .liveStream options.minFaceDetectionConfidence = minFaceDetectionConfidence options.minFacePresenceConfidence = minFacePresenceConfidence options.minTrackingConfidence = minTrackingConfidence options.numFaces = numFaces // Assign an object of the class to the `faceLandmarkerLiveStreamDelegate` // property. let processor = FaceLandmarkerResultProcessor() options.faceLandmarkerLiveStreamDelegate = processor let faceLandmarker = try FaceLandmarker(options: options)
উদ্দেশ্য-C
ছবি
@import MediaPipeTasksVision; NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"face_landmarker" ofType:@"task"]; MPPFaceLandmarkerOptions *options = [[MPPFaceLandmarkerOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeImage; options.minFaceDetectionConfidence = minFaceDetectionConfidence; options.minFacePresenceConfidence = minFacePresenceConfidence; options.minTrackingConfidence = minTrackingConfidence; options.numFaces = numFaces; MPPFaceLandmarker *faceLandmarker = [[MPPFaceLandmarker alloc] initWithOptions:options error:nil];
ভিডিও
@import MediaPipeTasksVision; NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"face_landmarker" ofType:@"task"]; MPPFaceLandmarkerOptions *options = [[MPPFaceLandmarkerOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeVideo; options.minFaceDetectionConfidence = minFaceDetectionConfidence; options.minFacePresenceConfidence = minFacePresenceConfidence; options.minTrackingConfidence = minTrackingConfidence; options.numFaces = numFaces; MPPFaceLandmarker *faceLandmarker = [[MPPFaceLandmarker alloc] initWithOptions:options error:nil];
লাইভস্ট্রিম
@import MediaPipeTasksVision; // Class that conforms to the `MPPFaceLandmarkerLiveStreamDelegate` protocol // and implements the method that the face landmarker calls once it finishes // performing face landmark detection in each input frame. @interface APPFaceLandmarkerResultProcessor : NSObject@end @implementation APPFaceLandmarkerResultProcessor - (void)faceLandmarker:(MPPFaceLandmarker *)faceLandmarker didFinishDetectionWithResult:(MPPFaceLandmarkerResult *)faceLandmarkerResult timestampInMilliseconds:(NSInteger)timestampInMilliseconds error:(NSError *)error { // Process the face landmarker result or errors here. } @end NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"face_landmarker" ofType:@"task"]; MPPFaceLandmarkerOptions *options = [[MPPFaceLandmarkerOptions alloc] init]; options.baseOptions.modelAssetPath = modelPath; options.runningMode = MPPRunningModeLiveStream; options.minFaceDetectionConfidence = minFaceDetectionConfidence; options.minFacePresenceConfidence = minFacePresenceConfidence; options.minTrackingConfidence = minTrackingConfidence; options.numFaces = numFaces; // Assign an object of the class to the `faceLandmarkerLiveStreamDelegate` // property. APPFaceLandmarkerResultProcessor *processor = [APPFaceLandmarkerResultProcessor new]; options.faceLandmarkerLiveStreamDelegate = processor; MPPFaceLandmarker *faceLandmarker = [[MPPFaceLandmarker alloc] initWithOptions:options error:nil];
দ্রষ্টব্য: আপনি যদি ভিডিও মোড বা লাইভস্ট্রিম মোড ব্যবহার করেন, ফেস ল্যান্ডমার্কার প্রতিটি ফ্রেমে সনাক্তকরণ মডেলটিকে ট্রিগার না করতে ট্র্যাকিং ব্যবহার করে, যা লেটেন্সি কমাতে সাহায্য করে।
কনফিগারেশন বিকল্প
এই টাস্কে iOS অ্যাপের জন্য নিম্নলিখিত কনফিগারেশন বিকল্প রয়েছে:
| বিকল্পের নাম | বর্ণনা | মান পরিসীমা | ডিফল্ট মান |
|---|---|---|---|
runningMode | টাস্কের জন্য চলমান মোড সেট করে। ফেস ল্যান্ডমার্কারের তিনটি মোড রয়েছে: IMAGE: একক ইমেজ ইনপুট জন্য মোড. ভিডিও: একটি ভিডিওর ডিকোড করা ফ্রেমের মোড। লাইভ_স্ট্রিম: ইনপুট ডেটার লাইভস্ট্রিমের মোড, যেমন ক্যামেরা থেকে। এই মোডে, 'faceLandmarkerLiveStreamDelegate' একটি ক্লাসের একটি উদাহরণে সেট করা আবশ্যক যেটি 'FaceLandmarkerLiveStreamDelegate' প্রয়োগ করে অ্যাসিঙ্ক্রোনাসভাবে মুখের ল্যান্ডমার্ক সনাক্তকরণের ফলাফলগুলি পেতে৷ | {RunningMode.image, RunningMode.video, RunningMode.liveStream} | {RunningMode.image} |
numFaces | ফেস ল্যান্ডমার্কার দ্বারা সর্বাধিক সংখ্যক মুখ সনাক্ত করা যায়৷ smoothing শুধুমাত্র প্রয়োগ করা হয় যখন numFaces 1 সেট করা হয়। | পূর্ণসংখ্যা > 0 | 1 |
minFaceDetectionConfidence | মুখ শনাক্তকরণ সফল বলে বিবেচিত হওয়ার জন্য সর্বনিম্ন আত্মবিশ্বাসের স্কোর৷ | ভাসা [0.0,1.0] | 0.5 |
minFacePresenceConfidence | মুখের ল্যান্ডমার্ক সনাক্তকরণে মুখ উপস্থিতি স্কোরের সর্বনিম্ন আত্মবিশ্বাসের স্কোর। | ভাসা [0.0,1.0] | 0.5 |
minTrackingConfidence | ফেস ট্র্যাকিংয়ের জন্য ন্যূনতম আত্মবিশ্বাসের স্কোর সফল বলে বিবেচিত হবে। | ভাসা [0.0,1.0] | 0.5 |
outputFaceBlendshapes | ফেসল্যান্ডমার্কার ফেস ব্লেন্ডশেপ আউটপুট করে কিনা। 3D ফেস মডেল রেন্ডার করার জন্য ফেস ব্লেন্ডশেপ ব্যবহার করা হয়। | বুল | মিথ্যা |
outputFacialTransformationMatrixes | ফেসল্যান্ডমার্কার ফেসিয়াল ট্রান্সফরমেশন ম্যাট্রিক্স আউটপুট করে কিনা। ফেসল্যান্ডমার্কার ম্যাট্রিক্স ব্যবহার করে মুখের ল্যান্ডমার্কগুলিকে ক্যানোনিকাল ফেস মডেল থেকে শনাক্ত করা ফেসে রূপান্তর করতে, যাতে ব্যবহারকারীরা সনাক্ত করা ল্যান্ডমার্কগুলিতে প্রভাব প্রয়োগ করতে পারে৷ | বুল | মিথ্যা |
যখন চলমান মোডটি LIVE_STREAM এ সেট করা হয়, তখন ফেস ল্যান্ডমার্কারের অতিরিক্ত faceLandmarkerLiveStreamDelegate কনফিগারেশন বিকল্পের প্রয়োজন হয়, যা ফেস ল্যান্ডমার্ককে অ্যাসিঙ্ক্রোনাসভাবে ফেস ল্যান্ডমার্ক সনাক্তকরণ ফলাফল প্রদান করতে সক্ষম করে। প্রতিনিধিকে অবশ্যই faceLandmarker(_:didFinishDetection:timestampInMilliseconds:error:) পদ্ধতিটি প্রয়োগ করতে হবে, যা ফেস ল্যান্ডমার্কার প্রতিটি ফ্রেমে মুখের ল্যান্ডমার্ক সনাক্তকরণের ফলাফলগুলি প্রক্রিয়া করার পরে কল করে।
| বিকল্পের নাম | বর্ণনা | মান পরিসীমা | ডিফল্ট মান |
|---|---|---|---|
faceLandmarkerLiveStreamDelegate | লাইভস্ট্রিম মোডে অ্যাসিঙ্ক্রোনাসভাবে মুখের ল্যান্ডমার্ক শনাক্তকরণের ফলাফলগুলি পেতে ফেস ল্যান্ডমার্ককে সক্ষম করে৷ যে ক্লাসের উদাহরণটি এই বৈশিষ্ট্যে সেট করা হয়েছে তাকে অবশ্যই faceLandmarker(_: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 ফর্ম্যাট নিম্নলিখিত চলমান মোডগুলির জন্য উপযুক্ত:
ছবি: যে অ্যাপগুলি iOS-এর
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 faceLandmarker.detect(image: image)
ভিডিও
let result = try faceLandmarker.detect(
videoFrame: image,
timestampInMilliseconds: timestamp)
লাইভ স্ট্রিম
try faceLandmarker.detectAsync(
image: image,
timestampInMilliseconds: timestamp)
উদ্দেশ্য-C
ছবি
MPPFaceLandmarkerResult *result = [faceLandmarker detectImage:image error:nil];
ভিডিও
MPPFaceLandmarkerResult *result = [faceLandmarker detectVideoFrame:image timestampInMilliseconds:timestamp error:nil];
লাইভস্ট্রিম
BOOL success = [faceLandmarker detectAsyncImage:image timestampInMilliseconds:timestamp error:nil];
ফেস ল্যান্ডমার্কার কোডের উদাহরণ এই প্রতিটি মোডের বাস্তবায়নকে আরও বিস্তারিতভাবে দেখায় detect(image:) , detect(videoFrame:timestampInMilliseconds:) , এবং detectAsync(image:timestampInMilliseconds:) । উদাহরণ কোড ব্যবহারকারীকে প্রক্রিয়াকরণ মোডগুলির মধ্যে স্যুইচ করার অনুমতি দেয় যা আপনার ব্যবহারের ক্ষেত্রে প্রয়োজন নাও হতে পারে।
নিম্নলিখিত নোট করুন:
ভিডিও মোড বা লাইভস্ট্রিম মোডে চলাকালীন, আপনাকে অবশ্যই ফেস ল্যান্ডমার্কার টাস্কে ইনপুট ফ্রেমের টাইমস্ট্যাম্প প্রদান করতে হবে।
ইমেজ বা ভিডিও মোডে চলাকালীন, ফেস ল্যান্ডমার্কার টাস্ক বর্তমান থ্রেডটিকে ব্লক করে যতক্ষণ না এটি ইনপুট ইমেজ বা ফ্রেম প্রক্রিয়াকরণ শেষ করে। বর্তমান থ্রেড ব্লক করা এড়াতে, iOS ডিসপ্যাচ বা NSOoperation ফ্রেমওয়ার্ক ব্যবহার করে একটি ব্যাকগ্রাউন্ড থ্রেডে প্রক্রিয়াকরণ চালান। আপনার অ্যাপ যদি সুইফট ব্যবহার করে তৈরি করা হয়, তাহলে আপনি ব্যাকগ্রাউন্ড থ্রেড এক্সিকিউশনের জন্য সুইফট কনকারেন্সিও ব্যবহার করতে পারেন।
লাইভস্ট্রিম মোডে চলাকালীন, ফেস ল্যান্ডমার্কার টাস্ক অবিলম্বে ফিরে আসে এবং বর্তমান থ্রেডটিকে ব্লক করে না। এটি প্রতিটি ইনপুট ফ্রেম প্রক্রিয়াকরণের পরে মুখের ল্যান্ডমার্ক সনাক্তকরণ ফলাফল সহ
faceLandmarker(_:didFinishDetection:timestampInMilliseconds:error:)পদ্ধতিটি চালু করে। ফেস ল্যান্ডমার্কার একটি ডেডিকেটেড সিরিয়াল ডিসপ্যাচ কিউতে অ্যাসিঙ্ক্রোনাসভাবে এই পদ্ধতিটি চালু করে। ইউজার ইন্টারফেসে ফলাফল প্রদর্শনের জন্য, ফলাফলগুলি প্রক্রিয়াকরণের পর ফলাফলগুলিকে প্রধান সারিতে পাঠান।
হ্যান্ডেল এবং প্রদর্শন ফলাফল
অনুমান চালানোর পরে, ফেস ল্যান্ডমার্কার একটি FaceLandmarkerResult ফলাফল প্রদান করে যাতে প্রতিটি সনাক্ত করা মুখের জন্য একটি ফেস মেশ থাকে, প্রতিটি মুখের ল্যান্ডমার্কের জন্য স্থানাঙ্ক সহ। ঐচ্ছিকভাবে, ফলাফল বস্তুতে মিশ্রিত আকারও থাকতে পারে, যা মুখের অভিব্যক্তি এবং মুখের রূপান্তর ম্যাট্রিক্সকে সনাক্ত করা ল্যান্ডমার্কে মুখের প্রভাব প্রয়োগ করতে নির্দেশ করে।
নিম্নলিখিত এই টাস্ক থেকে আউটপুট ডেটার একটি উদাহরণ দেখায়:
FaceLandmarkerResult:
face_landmarks:
NormalizedLandmark #0:
x: 0.5971359014511108
y: 0.485361784696579
z: -0.038440968841314316
NormalizedLandmark #1:
x: 0.3302789330482483
y: 0.29289937019348145
z: -0.09489090740680695
... (478 landmarks for each face)
face_blendshapes:
browDownLeft: 0.8296722769737244
browDownRight: 0.8096957206726074
browInnerUp: 0.00035583582939580083
browOuterUpLeft: 0.00035752105759456754
... (52 blendshapes for each face)
facial_transformation_matrixes:
[9.99158978e-01, -1.23036895e-02, 3.91213447e-02, -3.70770246e-01]
[1.66496094e-02, 9.93480563e-01, -1.12779640e-01, 2.27719707e+01]
...
নিম্নলিখিত চিত্রটি টাস্ক আউটপুটের একটি ভিজ্যুয়ালাইজেশন দেখায়:

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