تعرَّف على كيفية استخدام ميزة "الوجوه المعزّزة" في تطبيقاتك.
المتطلبات الأساسية
- الإصدار 13.0 من Xcode أو إصدار أحدث
- Cocoapods 1.4.0 أو إصدار أحدث في حال استخدام Cocoapods
- جهاز Apple متوافق مع ARKit يعمل بالإصدار 12.0 من نظام التشغيل iOS أو إصدار أحدث (يجب أن يكون هدف النشر هو الإصدار 12.0 من نظام التشغيل iOS أو إصدار أحدث)
إنشاء تطبيق النموذج وتشغيله
اطّلِع على البدء السريع للاطّلاع على الخطوات التفصيلية.
- يمكنك استنساخ حزمة تطوير البرامج (SDK) لـ ARCore لنظام التشغيل iOS أو تنزيلها من GitHub للحصول على نموذج رمز التطبيق.
- افتح نافذة Terminal (الطرفية) وشغِّل
pod install
من المجلد الذي يتوفّر فيه مشروع Xcode. - افتح نموذج التطبيق في الإصدار 10.3 من Xcode أو إصدار أحدث، واربط الجهاز بجهاز التطوير عبر USB. لتجنُّب أخطاء التصميم، تأكَّد من أنّك تُنشئ التطبيق من ملف
.xcworkspace
وليس ملف.xcodeproj
. - اضغط على Cmd+R أو انقر على Run. استخدِم جهازًا فعليًا، وليس المحاكي، للعمل مع ميزة "الوجوه المعزّزة".
- انقر على "حسنًا" لمنح تطبيق النموذج إذن الوصول إلى الكاميرا. من المفترض أن يفتح التطبيق الكاميرا الأمامية ويتتبّع وجهك على الفور في خلاصة الكاميرا. من المفترض أن تضع صورًا لأذنَي الثعلب على جانبَي جبهتك، وأن تضع أنف ثعلب فوق أنفك.
نظرة عامة على تنفيذ ميزة "الوجوه المعزّزة" في تطبيقك
استيراد ملفات *.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 مناطق أو عمليات تحويل مختلفة يمكنك استخدامها لإرفاق محتوى بوجه. تتيح لك عمليات التحويل هذه الحصول على الأنف وجانبي الجبهة الأيمن والأيسر في مساحة العالم. في ما يلي، يتم استخدام تحويل الأنف لإرفاق كرة بالأنف.
// 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.
- تصدير ملف
*.dae
(تصميم ثلاثي الأبعاد) - اسحب ملف
*.dae
إلى مشروع Xcode. - حوِّل الملف إلى تنسيق
.scn
في Xcode بالانتقال إلى Editor > Convert to SceneKit scene file format (.scn).