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 या उसके बाद के वर्शन में सैंपल ऐप्लिकेशन खोलें और डिवाइस को यूएसबी के ज़रिए डेवलपमेंट मशीन से कनेक्ट करें. बिल्ड से जुड़ी गड़बड़ियों से बचने के लिए, पक्का करें कि .xcodeproj फ़ाइल से नहीं, बल्कि .xcworkspace फ़ाइल से बनाया जा रहा हो.
  4. Cmd+R दबाएं या Run पर क्लिक करें. ऑगमेंटेड फ़ेस की सुविधा का इस्तेमाल करने के लिए, सिम्युलेटर के बजाय किसी फ़िज़िकल डिवाइस का इस्तेमाल करें.
  5. सैंपल ऐप्लिकेशन को कैमरे का ऐक्सेस देने के लिए, “ठीक है” पर टैप करें. इसके बाद, ऐप्लिकेशन आपका सामने वाला कैमरा खोलेगा और कैमरे के फ़ीड में आपके चेहरे को तुरंत ट्रैक करेगा. इसे आपके माथे के दोनों ओर लोमड़ी के कानों के चित्र और अपनी नाक के ऊपर लोमड़ी की नाक होनी चाहिए.

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

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

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

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

अपने ऐप्लिकेशन पर ऑगमेंटेड फ़ेस एपीआई इस्तेमाल करने के लिए, ऑगमेंटेड फ़ेस सेशन शुरू करें. यह सेशन, 60 एफ़पीएस पर कैमरे की इमेज लेने के लिए ज़िम्मेदार है. साथ ही, यह किसी डेलिगेट तरीके को चेहरे के अपडेट असिंक्रोनस तरीके से दिखाएगा. शुरू करते समय, कैप्चर डिवाइस का फ़ील्ड ऑफ़ व्यू पास करें और पक्का करें कि आपने डेलिगेट सेट कर दिया हो.

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