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

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

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

  • الإصدار 13.0 من Xcode أو إصدار أحدث
  • الإصدار 1.4.0 من تطبيق Cocoapods أو إصدار أحدث في حال استخدام 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. انقر على "حسنًا" لمنح الكاميرا إذن الوصول إلى نموذج التطبيق. من المفترض أن يفتح التطبيق الكاميرا الأمامية ويتتبّع وجهك على الفور في خلاصة الكاميرا. في هذه الحالة، يجب وضع صور لأذني الثعلب على جانبَي جبهتك، ووضع أنف الثعلب على أنفك.

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

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

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

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

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

بعد معالجة الصورة، ترسِل واجهة برمجة التطبيقات للوجوه المعززة معاودة الاتصال المفوَّضة التي تعرض الخطأ 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 مناطق مختلفة أو عمليات تحويل يمكنك استخدامها لإرفاق المحتوى بوجه. تتيح لك هذه التحوّلات وضع الأنف ويسار الجبهة ويمين الجبهة في الفضاء العالمي. هنا، يتم استخدام تحويل للأنف لتثبيت كرة في الأنف.

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