iOS এর জন্য অগমেন্টেড ফেস ডেভেলপার গাইড

আপনার নিজের অ্যাপে কীভাবে অগমেন্টেড ফেস ব্যবহার করবেন তা শিখুন।

পূর্বশর্ত

  • Xcode সংস্করণ 13.0 বা তার পরে
  • Cocoapods 1.4.0 বা তার পরে যদি Cocoapods ব্যবহার করা হয়
  • একটি ARKit-সামঞ্জস্যপূর্ণ Apple ডিভাইস যেটি iOS 12.0 বা তার পরবর্তী সংস্করণে চলে (iOS 12.0 বা তার পরবর্তী সংস্করণের স্থাপনার লক্ষ্য প্রয়োজন)

নমুনা অ্যাপ তৈরি করুন এবং চালান

বিস্তারিত পদক্ষেপের জন্য Quickstart দেখুন।

  1. নমুনা অ্যাপ কোড পেতে GitHub থেকে iOS-এর জন্য ARCore SDK ক্লোন করুন বা ডাউনলোড করুন।
  2. একটি টার্মিনাল উইন্ডো খুলুন এবং Xcode প্রকল্প বিদ্যমান ফোল্ডার থেকে pod install চালান।
  3. Xcode সংস্করণ 10.3 বা তার বেশি সংস্করণে নমুনা অ্যাপটি খুলুন এবং USB এর মাধ্যমে ডিভাইসটিকে আপনার ডেভেলপমেন্ট মেশিনে সংযুক্ত করুন। বিল্ড ত্রুটিগুলি এড়াতে, নিশ্চিত করুন যে আপনি .xcworkspace ফাইল থেকে তৈরি করছেন এবং .xcodeproj ফাইলটি নয়৷
  4. Cmd+R টিপুন বা Run ক্লিক করুন। অগমেন্টেড ফেস এর সাথে কাজ করতে সিমুলেটর নয়, একটি ফিজিক্যাল ডিভাইস ব্যবহার করুন।
  5. নমুনা অ্যাপে ক্যামেরা অ্যাক্সেস দিতে "ঠিক আছে" আলতো চাপুন। অ্যাপটিকে সামনের ক্যামেরাটি খুলতে হবে এবং অবিলম্বে ক্যামেরা ফিডে আপনার মুখটি ট্র্যাক করতে হবে। এটি আপনার কপালের উভয় পাশে শিয়ালের কানের চিত্র স্থাপন করা উচিত এবং আপনার নিজের নাকের উপরে একটি শিয়াল নাক স্থাপন করা উচিত।

আপনার অ্যাপে অগমেন্টেড ফেস প্রয়োগ করার ওভারভিউ

এক্সকোডে *.scn ফাইল আমদানি করুন

আপনার অ্যাপে শনাক্ত করা মুখের সাথে আপনার নিজস্ব সম্পদ যেমন টেক্সচার এবং 3D মডেল যোগ করতে, *.scn সম্পদটিকে Xcode-এ টেনে আনুন।

একটি অগমেন্টেড ফেস সেশন শুরু করুন

আপনার অ্যাপ থেকে Augmented Faces API ব্যবহার করতে, একটি Augmented Faces সেশন শুরু করুন। এই সেশনটি 60 fps এ ক্যামেরা ছবি তোলার জন্য দায়ী, এবং অসিঙ্ক্রোনাসভাবে একটি প্রতিনিধি পদ্ধতিতে মুখের আপডেটগুলি ফিরিয়ে দেবে। আরম্ভ করার সময়, ক্যাপচার ডিভাইসের দৃশ্য ক্ষেত্রটি পাস করুন এবং নিশ্চিত করুন যে আপনি প্রতিনিধি সেট করেছেন।

// Session takes a float for field of view
let faceSession = try? GARAugmentedFaceSession(fieldOfView: cameraFieldOfView)
faceSession?.delegate = self

সেশনে ক্যামেরার ছবি পাঠান

এখন যেহেতু আপনার সেশন শুরু করা হয়েছে এবং সঠিকভাবে কনফিগার করা হয়েছে, আপনার অ্যাপটি সেশনে ক্যামেরার ছবি পাঠানো শুরু করতে পারে। নমুনা অ্যাপটি সামনের ক্যামেরা থেকে ভিডিও ফ্রেম সহ একটি AVCaptureSession তৈরি করে ক্যামেরার ছবি পায়।

নিম্নলিখিত কোড নমুনাটি AVFoundation এর ক্যাপচার আউটপুট প্রতিনিধি পদ্ধতির একটি বাস্তবায়ন দেখায়, যা আপনার মুখের সেশনে চিত্র, একটি টাইমস্ট্যাম্প এবং একটি স্বীকৃতি ঘূর্ণন পাস করে।

func captureOutput(_ output: AVCaptureOutput,
                     didOutput sampleBuffer: CMSampleBuffer,
                     from connection: AVCaptureConnection) {

     faceSession.update(with: imageBuffer,
                        timestamp: frameTime,
                        recognitionRotation: rotationDegrees)
}

চিত্রটি প্রক্রিয়া করার পরে, অগমেন্টেড ফেস এপিআই একটি প্রতিনিধি কলব্যাক পাঠায় যা একটি GARAugmentedFaceFrame প্রদান করে। এটিতে একটি অগমেন্টেড ফেস অবজেক্ট রয়েছে যা আপনাকে মুখের সাথে প্রভাব সংযুক্ত করতে সহায়তা করে। এটিতে ইমেজ বাফার এবং টাইমস্ট্যাম্প রয়েছে যা আপনি আপডেট পদ্ধতিতে পাস করেছেন। এটি চিত্রগুলির সাথে মুখের প্রভাবগুলিকে সিঙ্ক্রোনাইজ করার জন্য দরকারী৷ এই অবজেক্টটি আপনাকে একটি ডিসপ্লে ট্রান্সফর্ম এবং একটি প্রজেকশন ম্যাট্রিক্সও দেয় যাতে আপনি এমনভাবে 3D ওয়ার্ল্ড এবং 2D ভিউ সেট আপ করতে পারেন যা সনাক্ত করা মুখের সাথে আপনার মুখের প্রভাবগুলিকে রেন্ডার করা সহজ করে তোলে।

var face: GARAugmentedFace? { get }
var capturedImage: CVPixelBuffer { get }
var timestamp: TimeInterval { get }

ফেস মেশ ওরিয়েন্টেশন

iOS এর জন্য ফেস মেশের অভিযোজন নোট করুন:

মুখে একটি 2D টেক্সচার প্রয়োগ করুন

নমুনা অ্যাপটি আপনার অগমেন্টেড ফেসকে একটি SCNGeometry অবজেক্টে রূপান্তর করার জন্য একটি ক্লাস প্রদান করে। আপনি সহজেই একটি SceneKit নোডের সাথে সংযুক্ত করতে এই জ্যামিতি ব্যবহার করতে পারেন, যা আপনি অগমেন্টেড ফেস সেন্টার ট্রান্সফর্মে স্থাপন করবেন।

let faceNode = SCNNode()

// Gets the most recent frame's face
let face = faceSession.currentFrame?.face

// This is instantiated once, not with every frame
let faceGeometryConverter = FaceMeshGeometryConverter()

// Converts Augmented Face to SCNGeometry object
let faceMesh = faceGeometryConverter.geometryFromFace(face)

// Assigns geometry to node and sets the pose
faceNode.geometry = faceMesh
faceNode.simdTransform = face.centerTransform

2D মুখের টেক্সচারটি একটি UIImage হিসাবে লোড করা হয় এবং একটি উপাদানে সেট করা হয় যা ফেস মেশের জ্যামিতির সাথে সংযুক্ত থাকে।

faceTextureMaterial = SCNMaterial()
faceTextureMaterial.diffuse.contents = UIImage(named:@"face.png")

faceMesh?.firstMaterial = faceTextureMaterial

মুখের সাথে 3D বস্তু সংযুক্ত করুন

প্রতিনিধি কলব্যাক থেকে প্রাপ্ত GARAugmentedFace , 3টি ভিন্ন অঞ্চল প্রদান করে বা রূপান্তর করে, আপনি একটি মুখের সাথে বিষয়বস্তু সংযুক্ত করার জন্য ব্যবহার করতে পারেন। এই রূপান্তরগুলি আপনাকে বিশ্ব মহাকাশে নাক, কপালের বাম এবং কপালের ডানদিকে পেতে অনুমতি দেয়। এখানে, নাকের সাথে একটি গোলক সংযুক্ত করতে একটি নাকের রূপান্তর ব্যবহার করা হয়।

// Create node and add to scene
let node = SCNNode(geometry: SCNSphere(radius: .02))
sceneView.rootNode.addChild(node)

// Every frame updates the node's position
node.simdWorldTransform = session.currentFrame.face.transform(for: .nose)

এক্সকোডে আপনার নিজস্ব সম্পদ আমদানি করুন

আপনার অ্যাপ্লিকেশানে শনাক্ত করা মুখের সাথে টেক্সচার এবং 3D মডেলের মতো সম্পদগুলি যোগ করতে, প্রথমে সম্পদগুলিকে Xcode-এ আমদানি করুন৷

  1. একটি *.dae (3D মডেল) ফাইল রপ্তানি করুন।
  2. Xcode প্রকল্পে *.dae ফাইলটি টেনে আনুন।
  3. Editor > Convert to SceneKit scene file format (.scn) গিয়ে Xcode-এ ফাইলটিকে .scn ফরম্যাটে রূপান্তর করুন।