FaceSwap هو تطبيق قمت بإنشائه في الأصل كتمرين لطلابي في "الرياضيات في الوسائط المتعددة" في جامعة وارسو للتكنولوجيا. التطبيق مكتوب بلغة Python ويستخدم محاذاة الوجه وتحسين Gauss Newton ومزج الصور لتبديل وجه الشخص الذي تراه الكاميرا بوجه شخص في الصورة المتوفرة.
ستجدون عرضًا قصيرًا لإمكانيات البرنامج في الفيديو أدناه (اضغط للذهاب إلى اليوتيوب):
لبدء البرنامج، سيتعين عليك تشغيل برنامج Python النصي المسمى zad2.py (بالبولندية للتمرين 2). يجب أن يكون لديك Python 3 وبعض المكتبات الإضافية مثبتة. بمجرد وجود Python على جهازك، يجب أن تكون قادرًا على تثبيت المكتبات تلقائيًا عن طريق تشغيل pip install -r requirements.txt
في الدليل الجذر لمستودع الريبو.
سيتعين عليك أيضًا تنزيل نموذج محاذاة الوجه من هنا: http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 وفك ضغطه إلى دليل المشروع الرئيسي.
يتوفر إصدار أسرع وأكثر استقرارًا من FaceSwap على Dropbox هنا. يعتمد هذا الإصدار الجديد على طريقة Deep Alignment Network، وهي أسرع من الطريقة المستخدمة حاليًا إذا تم تشغيلها على وحدة معالجة الرسومات وتوفر معالم وجه أكثر استقرارًا وأكثر دقة. يرجى الاطلاع على مستودع GitHub الخاص بشبكة Deep Alignment للحصول على تعليمات الإعداد.
آمل أن أجد وقتًا لتضمين هذا الإصدار الأسرع في رمز الريبو قريبًا.
والمخطط العام للطريقة هو كما يلي:
أولاً نأخذ الصورة المدخلة (صورة الشخص الذي نريد رؤيته على وجهنا) ونجد منطقة الوجه ومعالمها. بمجرد أن نلائم النموذج ثلاثي الأبعاد مع تلك المعالم (سنتحدث أكثر عن ذلك لاحقًا)، فإن رؤوس هذا النموذج المسقطة على مساحة الصورة ستكون إحداثيات النسيج الخاصة بنا.
بمجرد الانتهاء من ذلك وتهيئة كل شيء، تبدأ الكاميرا في التقاط الصور. يتم اتخاذ الخطوات التالية لكل صورة تم التقاطها:
العنصر الأكثر أهمية في العملية برمتها هو تركيب النموذج ثلاثي الأبعاد. يتكون النموذج نفسه من:
يتم عرض النموذج في مساحة الصورة باستخدام المعادلة التالية:
حيث s هو الشكل المسقط، وa هي معلمة القياس، و P هما أول صفين من مصفوفة التدوير التي تقوم بتدوير شكل الوجه ثلاثي الأبعاد، و S_0 هو شكل الوجه المحايد، و w_1-n هي أوزان الشكل الممزوج، و S_1-n هي Blendshapes، t عبارة عن ناقل ترجمة ثنائي الأبعاد و n هو عدد أشكال المزج.
يتم إنجاز تركيب النموذج عن طريق تقليل الفرق بين الشكل المتوقع والمعالم المحلية. يتم تحقيق التصغير فيما يتعلق بأوزان الشكل الممزوج، والقياس، والتدوير، والترجمة، باستخدام طريقة غاوس نيوتن.
تم ترخيص الكود بموجب ترخيص MIT، ويتم تنزيل بعض البيانات الموجودة في المشروع من مواقع الطرف الثالث:
إذا كنت بحاجة إلى مساعدة أو وجدت التطبيق مفيدًا، فلا تتردد في إخباري بذلك.
ماريك كوالسكي [email protected]، الصفحة الرئيسية: http://home.elka.pw.edu.pl/~mkowals6/