FaceSwap adalah aplikasi yang awalnya saya buat sebagai latihan untuk mahasiswa saya di bidang "Matematika dalam Multimedia" di Universitas Teknologi Warsawa. Aplikasi ini ditulis dengan Python dan menggunakan perataan wajah, optimasi Gauss Newton, dan pencampuran gambar untuk menukar wajah seseorang yang terlihat oleh kamera dengan wajah seseorang dalam gambar yang disediakan.
Anda akan menemukan presentasi singkat kemampuan program dalam video di bawah ini (klik untuk membuka YouTube):
Untuk memulai program, Anda harus menjalankan skrip Python bernama zad2.py (bahasa Polandia untuk latihan 2). Anda harus menginstal Python 3 dan beberapa perpustakaan tambahan. Setelah Python ada di mesin Anda, Anda seharusnya dapat menginstal pustaka secara otomatis dengan menjalankan pip install -r requirements.txt
di direktori root repo.
Anda juga harus mengunduh model penyelarasan wajah dari sini: http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 dan membongkarnya ke direktori proyek utama.
Versi FaceSwap yang lebih cepat dan stabil tersedia di Dropbox di sini. Versi baru ini didasarkan pada metode Deep Alignment Network, yang lebih cepat dibandingkan metode yang digunakan saat ini jika dijalankan pada GPU dan memberikan penanda wajah yang lebih stabil dan presisi. Silakan lihat repositori GitHub Deep Alignment Network untuk petunjuk pengaturan.
Saya berharap dapat segera meluangkan waktu untuk menyertakan versi yang lebih cepat ini ke dalam kode repo.
Garis besar metode ini adalah sebagai berikut:
Pertama kita ambil gambar masukan (gambar wajah seseorang yang ingin kita lihat) dan temukan wilayah wajah serta landmarknya. Setelah kita memilikinya, kita menyesuaikan model 3D dengan landmark tersebut (lebih lanjut tentang itu nanti) simpul dari model yang diproyeksikan ke ruang gambar akan menjadi koordinat tekstur kita.
Setelah selesai dan semuanya diinisialisasi, kamera mulai mengambil gambar. Untuk setiap gambar yang diambil, langkah-langkah berikut diambil:
Elemen terpenting dari keseluruhan proses adalah penyesuaian model 3D. Modelnya sendiri terdiri dari:
Model diproyeksikan ke dalam ruang gambar menggunakan persamaan berikut:
dimana s adalah bentuk yang diproyeksikan, a adalah parameter penskalaan, P adalah dua baris pertama dari matriks rotasi yang memutar bentuk wajah 3D, S_0 adalah bentuk wajah netral, w_1-n adalah bobot blendshape, S_1-n adalah blendshapes, t adalah vektor terjemahan 2D dan n adalah jumlah blendshapes.
Penyesuaian model dilakukan dengan meminimalkan perbedaan antara bentuk yang diproyeksikan dan landmark yang dilokalisasi. Minimisasi dilakukan sehubungan dengan bobot bentuk campuran, penskalaan, rotasi dan translasi, menggunakan metode Gauss Newton.
Kode ini dilisensikan di bawah lisensi MIT, beberapa data dalam proyek diunduh dari situs web pihak ketiga:
Jika butuh bantuan atau menurut Anda aplikasi ini berguna, jangan ragu untuk memberi tahu saya.
Marek Kowalski [email protected], beranda: http://home.elka.pw.edu.pl/~mkowals6/