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

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

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

ऑगमेंटेड फ़ेस की सुविधा इस्तेमाल करने के लिए, आपको इनकी ज़रूरत होगी:

  • Xcode का 10.3 या इसके बाद का वर्शन

  • कोकोपॉड

  • iOS 11.0 या इसके बाद के वर्शन पर चलने वाला ARKit के साथ काम करने वाला Apple डिवाइस (iOS 10.0 या इसके बाद के वर्शन का डिप्लॉयमेंट टारगेट ज़रूरी है)

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

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

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

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