iOS के लिए ऑगमेंटेड फ़ेस की डेवलपर गाइड

अपने ऐप्लिकेशन में ऑगमेंटेड फ़ेस की सुविधा इस्तेमाल करने का तरीका जानें.

ज़रूरी शर्तें

  • Xcode का 13.0 या इसके बाद का वर्शन
  • अगर Cocoapods का इस्तेमाल किया जा रहा है, तो Cocoapods 1.4.0 या उसके बाद का वर्शन
  • iOS 12.0 या इसके बाद के वर्शन पर चलने वाला ARKit के साथ काम करने वाला Apple डिवाइस (iOS 12.0 या इसके बाद के वर्शन का डिप्लॉयमेंट टारगेट ज़रूरी है)

सैंपल ऐप्लिकेशन बनाएं और चलाएं

चरणों के बारे में ज़्यादा जानकारी के लिए क्विकस्टार्ट देखें.

  1. ऐप्लिकेशन का नमूना कोड पाने के लिए, GitHub से iOS के लिए ARCore SDK टूल का क्लोन बनाएं या उसे डाउनलोड करें.
  2. कोई Terminal विंडो खोलें और उस फ़ोल्डर से pod install चलाएं जहां Xcode प्रोजेक्ट मौजूद है.
  3. सैंपल ऐप्लिकेशन को Xcode के 10.3 या इसके बाद वाले वर्शन में खोलें और डिवाइस को यूएसबी की मदद से अपनी डेवलपमेंट मशीन से कनेक्ट करें. बिल्ड से जुड़ी गड़बड़ियों से बचने के लिए, पक्का करें कि .xcodeproj फ़ाइल से नहीं, बल्कि .xcworkspace फ़ाइल से बनाया जा रहा हो.
  4. Cmd+R दबाएं या Run पर क्लिक करें. ऑगमेंटेड फ़ेस की सुविधा के साथ काम करने के लिए, सिम्युलेटर का इस्तेमाल करने के बजाय किसी फ़िज़िकल डिवाइस का इस्तेमाल करें.
  5. सैंपल ऐप्लिकेशन को कैमरे का ऐक्सेस देने के लिए, "ठीक है" पर टैप करें. ऐप्लिकेशन को फ़्रंट कैमरा खोलना होगा और तुरंत कैमरा फ़ीड में आपके चेहरे को ट्रैक करना चाहिए. इसे आपके माथे के दोनों ओर लोमड़ी के कानों के चित्र और अपनी नाक के ऊपर लोमड़ी की नाक होनी चाहिए.

अपने ऐप्लिकेशन में ऑगमेंटेड फ़ेस की सुविधा लागू करने के बारे में खास जानकारी

*.scn फ़ाइलों को Xcode में इंपोर्ट करें

अपने ऐप्लिकेशन में किसी चेहरे पर टेक्सचर और 3D मॉडल जैसी अपनी ऐसेट जोड़ने के लिए, *.scn ऐसेट को Xcode में खींचें और छोड़ें.

ऑगमेंटेड फ़ेस सेशन शुरू करना

अपने ऐप्लिकेशन पर ऑगमेंटेड फ़ेस एपीआई इस्तेमाल करने के लिए, ऑगमेंटेड फ़ेस सेशन शुरू करें. यह सेशन, 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 ऑब्जेक्ट में बदलने के लिए क्लास उपलब्ध कराता है. इस ज्यामिति का इस्तेमाल आसानी से SlingKit नोड को अटैच करने के लिए किया जा सकता है, जिसे आप ऑगमेंटेड फ़ेस के सेंटर ट्रांसफ़ॉर्म पर रखेंगे.

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, तीन अलग-अलग इलाकों या ट्रांसफ़ॉर्म के साथ मिलता है. इनका इस्तेमाल किसी चेहरे पर कॉन्टेंट अटैच करने के लिए किया जा सकता है. ये बदलाव आपको वर्ल्ड स्पेस में नाक, माथे के बाएं, और माथे के दाएं हिस्से में दिखाने की सुविधा देते हैं. यहां, नाक में गोल आकार वाली चकरी को जोड़ने के लिए नोज़ ट्रांसफ़ॉर्म का इस्तेमाल किया जाता है.

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

Xcode में अपने एसेट इंपोर्ट करें

अपने ऐप्लिकेशन में किसी चेहरे पर टेक्सचर और 3D मॉडल जैसी ऐसेट जोड़ने के लिए, पहले Xcode में ऐसेट इंपोर्ट करें.

  1. *.dae (3D मॉडल) फ़ाइल एक्सपोर्ट करें.
  2. *.dae फ़ाइल को Xcode प्रोजेक्ट में खींचें और छोड़ें.
  3. Editor > Convert to SceneKit scene file format (.scn) पर जाकर, Xcode में फ़ाइल को .scn फ़ॉर्मैट में बदलें.