دليل مطوّري ميزة "الوجوه المعززة" لنظام التشغيل iOS

تعرَّف على كيفية استخدام ميزة "الوجوه المعزّزة" في تطبيقاتك.

المتطلبات الأساسية

  • الإصدار 13.0 من Xcode أو إصدار أحدث
  • Cocoapods 1.4.0 أو إصدار أحدث في حال استخدام Cocoapods
  • جهاز Apple متوافق مع ARKit يعمل بالإصدار 12.0 من نظام التشغيل iOS أو إصدار أحدث (يجب أن يكون هدف النشر هو الإصدار 12.0 من نظام التشغيل iOS أو إصدار أحدث)

إنشاء تطبيق النموذج وتشغيله

اطّلِع على دليل البدء السريع للحصول على خطوات تفصيلية.

  1. استنسِخ ARCore SDK لنظام التشغيل iOS أو نزِّله من GitHub للحصول على نموذج رمز التطبيق.
  2. افتح نافذة Terminal (الطرفية) وشغِّل pod install من المجلد الذي يتوفّر فيه مشروع Xcode.
  3. افتح نموذج التطبيق في الإصدار 10.3 من Xcode أو إصدار أحدث، واربط الجهاز بجهاز التطوير عبر USB. لتجنُّب أخطاء التصميم، تأكَّد من أنّك تُنشئ التطبيق من ملف .xcworkspace وليس ملف .xcodeproj.
  4. اضغط على Cmd+R أو انقر على Run. استخدِم جهازًا فعليًا، وليس المحاكي، للعمل مع ميزة "الوجوه المعزّزة".
  5. انقر على "حسنًا" لمنح التطبيق المستخدَم كنموذج إذن الوصول إلى الكاميرا. من المفترض أن يفتح التطبيق الكاميرا الأمامية ويتتبّع وجهك على الفور في خلاصة الكاميرا. من المفترض أن تظهر صور آذان الثعلب على جانبَي جبهتك، وأن يظهر أنف الثعلب فوق أنفك.

نظرة عامة على تنفيذ ميزة "الوجوه المعزّزة" في تطبيقك

استيراد *.scn ملف إلى Xcode

لإضافة مواد العرض الخاصة بك، مثل الزخارف والنماذج الثلاثية الأبعاد، إلى وجه تم رصده في تطبيقك، اسحب مادة العرض "*.scn" إلى Xcode.

إعداد جلسة "وجوه معززة"

لاستخدام Augmented Faces API من تطبيقك، عليك إعداد جلسة Augmented Faces. تتحمّل هذه الجلسة مسؤولية التقاط صور الكاميرا بمعدّل 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)
}

بعد معالجة الصورة، ترسل Augmented Faces API معاودة اتصال مفوَّضة لعرض الرمز GARAugmentedFaceFrame. ويحتوي التطبيق على كائن وجه معزّز يساعدك في إرفاق تأثيرات بالوجه. ويتضمّن أيضًا المخزن المؤقت للصور والطابع الزمني الذي أدخلته في طريقة التحديث. ويُعدّ ذلك مفيدًا لمزامنة تأثيرات الوجه مع الصور. يمنحك هذا العنصر أيضًا عملية تحويل للعرض ومصفّفة إسقاط للتأكّد من أنّه يمكنك إعداد العرض الثلاثي الأبعاد وطرق العرض ثنائية الأبعاد بطريقة تسهّل عرض تأثيرات الوجه التي تظهر مرفقة بالوجه الذي تم رصده.

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

اتجاه شبكة الوجه

لاحظ اتجاه الشبكة المتداخلة للوجه لنظام التشغيل iOS:

تطبيق زخرفة ثنائية الأبعاد على الوجه

يوفّر نموذج التطبيق فئة لتحويل الوجه المعدّل إلى عنصر 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

يتم تحميل نسيج الوجه ثنائي الأبعاد كملف UIImage ويتم ضبطه على مادة مرتبطة بقياسات شبكة الوجه.

faceTextureMaterial = SCNMaterial()
faceTextureMaterial.diffuse.contents = UIImage(named:@"face.png")

faceMesh?.firstMaterial = faceTextureMaterial

إرفاق عناصر ثلاثية الأبعاد بالوجه

إنّ GARAugmentedFace الذي يتم تلقّيه من معاودة الاتصال المفوَّضة يوفر 3 مناطق مختلفة أو يحوّل 3 مناطق يمكنك استخدامها لإرفاق محتوى بوجهٍ ما. تتيح لك هذه التغييرات الحصول على الأنف واليسار من الجبهة وعلى يمين الجبهة في أفق العالم. في هذه الحالة، يتم استخدام تحويل الأنف لتثبيت كرة بالأنف.

// 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

لإضافة مواد عرض، مثل الزخارف والنماذج الثلاثية الأبعاد إلى وجه تم رصده في تطبيقك، عليك أولاً استيراد مواد العرض إلى Xcode.

  1. تصدير ملف *.dae (تصميم ثلاثي الأبعاد)
  2. اسحب ملف *.dae إلى مشروع Xcode.
  3. حوِّل الملف إلى تنسيق .scn في Xcode بالانتقال إلى Editor > Convert to SceneKit scene file format (.scn).