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

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

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

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

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

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

  1. ऐप्लिकेशन का नमूना कोड पाने के लिए, GitHub से iOS के लिए ARCore SDK टूल को क्लोन करें या डाउनलोड करें.
  2. टर्मिनल विंडो खोलें और उस फ़ोल्डर से pod install चलाएं जहां Xcode प्रोजेक्ट मौजूद है.
  3. नमूना ऐप्लिकेशन को Xcode वर्शन 10.3 या उसके बाद वाले वर्शन में खोलें और डिवाइस को USB के ज़रिए अपनी डेवलपमेंट मशीन से कनेक्ट करें. बिल्ड की गड़बड़ियों से बचने के लिए, पक्का करें कि डेटा को .xcworkspace फ़ाइल से बनाया जा रहा हो, न कि .xcodeproj फ़ाइल से.
  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 ऑब्जेक्ट में बदलने के लिए एक क्लास उपलब्ध कराता है. किसी सीनकिट नोड में आसानी से अटैच करने के लिए इस ज्यामिति का इस्तेमाल किया जा सकता है, जिसे आपको ऑगमेंटेड फ़ेस सेंटर के ट्रांसफ़ॉर्म वाले हिस्से में रखा जाएगा.

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