FaceSwap เป็นแอปที่ฉันสร้างขึ้นมาเพื่อเป็นแบบฝึกหัดสำหรับนักเรียนของฉันในวิชา "คณิตศาสตร์ในมัลติมีเดีย" ที่มหาวิทยาลัยเทคโนโลยีวอร์ซอ แอปนี้เขียนด้วยภาษา Python และใช้การจัดตำแหน่งใบหน้า การเพิ่มประสิทธิภาพ Gauss Newton และการผสมผสานรูปภาพเพื่อสลับใบหน้าของบุคคลที่กล้องมองเห็นกับใบหน้าของบุคคลในรูปภาพที่ให้มา
คุณจะพบการนำเสนอสั้นๆ เกี่ยวกับความสามารถของโปรแกรมในวิดีโอด้านล่าง (คลิกเพื่อไปที่ YouTube):
ในการเริ่มต้นโปรแกรม คุณจะต้องเรียกใช้สคริปต์ Python ชื่อ zad2.py (ภาษาโปแลนด์สำหรับแบบฝึกหัดที่ 2) คุณต้องติดตั้ง Python 3 และติดตั้งไลบรารีเพิ่มเติมบางตัว เมื่อ Python อยู่บนเครื่องของคุณ คุณควรจะสามารถติดตั้งไลบรารี่ได้โดยอัตโนมัติโดยการรัน pip install -r requirements.txt
ในไดเร็กทอรีรากของ repo
คุณจะต้องดาวน์โหลดโมเดลการจัดตำแหน่งใบหน้าจากที่นี่: http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 และแตกไฟล์ลงในไดเร็กทอรีโปรเจ็กต์หลัก
FaceSwap เวอร์ชันที่เร็วและเสถียรยิ่งขึ้นมีให้ใช้งานบน Dropbox ที่นี่ เวอร์ชันใหม่นี้ใช้วิธี Deep Alignment Network ซึ่งเร็วกว่าวิธีที่ใช้อยู่ในปัจจุบันหากทำงานบน GPU และให้จุดสังเกตบนใบหน้าที่เสถียรและแม่นยำยิ่งขึ้น โปรดดูที่เก็บ GitHub ของ Deep Alignment Network สำหรับคำแนะนำในการตั้งค่า
ฉันหวังว่าจะหาเวลารวมเวอร์ชันที่เร็วกว่านี้ไว้ในโค้ด repo เร็วๆ นี้
โครงร่างทั่วไปของวิธีการมีดังนี้:
ขั้นแรกเรานำภาพอินพุต (ภาพของบุคคลที่เราต้องการเห็นบนใบหน้าของเราเอง) และค้นหาบริเวณใบหน้าและจุดสังเกต เมื่อเราได้โมเดล 3 มิติเข้ากับจุดสังเกตเหล่านั้นแล้ว (จะมีรายละเอียดเพิ่มเติมในภายหลัง) จุดยอดของโมเดลนั้นที่ฉายในพื้นที่ภาพจะเป็นพิกัดพื้นผิวของเรา
เมื่อเสร็จสิ้นและเตรียมใช้งานทุกอย่างแล้ว กล้องจะเริ่มจับภาพ สำหรับภาพที่ถ่ายแต่ละภาพ จะมีการดำเนินการตามขั้นตอนต่อไปนี้:
องค์ประกอบที่สำคัญที่สุดของกระบวนการทั้งหมดคือการปรับโมเดล 3 มิติให้เหมาะสม ตัวแบบประกอบด้วย:
แบบจำลองถูกฉายลงในพื้นที่ภาพโดยใช้สมการต่อไปนี้:
โดยที่ s คือรูปร่างที่ฉายไว้ a คือพารามิเตอร์การปรับขนาด P คือสองแถวแรกของเมทริกซ์การหมุนที่หมุนรูปร่างใบหน้า 3 มิติ S_0 คือรูปร่างใบหน้าที่เป็นกลาง w_1-n คือน้ำหนักของรูปร่างผสมผสาน S_1-n คือ blendshapes, t คือเวกเตอร์การแปล 2D และ n คือจำนวน blendshapes
การปรับโมเดลให้เหมาะสมทำได้โดยการลดความแตกต่างระหว่างรูปร่างที่ฉายและจุดสังเกตที่แปลเป็นภาษาท้องถิ่นให้เหลือน้อยที่สุด การย่อขนาดสามารถทำได้โดยคำนึงถึงน้ำหนักของรูปร่างการผสม การปรับขนาด การหมุน และการแปล โดยใช้วิธี Gauss Newton
รหัสนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT ข้อมูลบางส่วนในโครงการจะถูกดาวน์โหลดจากเว็บไซต์บุคคลที่สาม:
หากต้องการความช่วยเหลือหรือคุณพบว่าแอปมีประโยชน์ อย่าลังเลที่จะแจ้งให้เราทราบ
Marek Kowalski [email protected] หน้าแรก: http://home.elka.pw.edu.pl/~mkowals6/