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

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

ज़रूरी बातें

ऑगमेंटेड रिएलिटी (एआर) का इस्तेमाल करने के लिए, आपको इनकी ज़रूरत होगी:{0/}

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

  • कोकोपॉड

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

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

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

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

आपके ऐप्लिकेशन में ऑगमेंटेड फ़ेस (एआर) को लागू करने के बारे में खास जानकारी

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

अपने ऐप्लिकेशन में, पहचानी गई चेहरे की बनावट और 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 फ़ॉर्मैट में बदलें.