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

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

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

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

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

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

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

نظرة عامة على تنفيذ ميزة Augmented Faces في تطبيقك

استيراد *.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).