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

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

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

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

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

ज़्यादा जानकारी के लिए, क्विकस्टार्ट देखें.

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

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

Xcode में *.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)
}

इमेज प्रोसेस होने के बाद, Augmented Faces API एक डेलिगेट कॉलबैक भेजता है, जो GARAugmentedFaceFrame दिखाता है. इसमें ऑगमेंटेड फ़ेस ऑब्जेक्ट शामिल होता है, जिससे चेहरे पर इफ़ेक्ट जोड़े जा सकते हैं. इसमें इमेज बफ़र और वह टाइमस्टैंप भी शामिल होता है जिसे आपने अपडेट करने के तरीके में पास किया था. यह इमेज में चेहरे के इफ़ेक्ट सिंक करने के लिए फ़ायदेमंद है. इस ऑब्जेक्ट से आपको डिसप्ले ट्रांसफ़ॉर्म और प्रोजेक्शन मैट्रिक भी मिलती है. इससे यह पक्का किया जा सकता है कि 3D वर्ल्ड और 2D व्यू को इस तरह से सेट अप किया जा सके कि पहचाने गए चेहरे से जुड़े आपके चेहरे के इफ़ेक्ट को आसानी से रेंडर किया जा सके.

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

फ़ेस मेश का ओरिएंटेशन

iOS के लिए, फ़ेस मेश के ओरिएंटेशन पर ध्यान दें:

चेहरे पर 2D टेक्स्चर लागू करना

सैंपल ऐप्लिकेशन में एक क्लास दी गई है, जिसकी मदद से ऑगमेंटेड रिएलिटी (AR) में बदले गए चेहरे को 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 में तीन अलग-अलग क्षेत्र या ट्रांसफ़ॉर्म होते हैं. इनका इस्तेमाल, किसी चेहरे पर कॉन्टेंट अटैच करने के लिए किया जा सकता है. इन ट्रांसफ़ॉर्म की मदद से, नाक, माथे के बाईं ओर, और माथे के दाईं ओर की जानकारी, वर्ल्ड स्पेस में मिलती है. यहां नाक पर गोलाकार आकार जोड़ने के लिए, नाक के ट्रांसफ़ॉर्म का इस्तेमाल किया गया है.

// 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 फ़ॉर्मैट में बदलें.