FaceSwap은 원래 바르샤바 공과대학교의 "멀티미디어 수학" 학생들을 위한 연습용으로 만든 앱입니다. 이 앱은 Python으로 작성되었으며 얼굴 정렬, Gauss Newton 최적화 및 이미지 혼합을 사용하여 카메라에 보이는 사람의 얼굴을 제공된 이미지에 있는 사람의 얼굴과 교환합니다.
아래 비디오에서 프로그램의 기능에 대한 짧은 프리젠테이션을 볼 수 있습니다(YouTube로 이동하려면 클릭).
프로그램을 시작하려면 zad2.py(연습 2는 폴란드어)라는 Python 스크립트를 실행해야 합니다. 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 방식을 기반으로 하며, GPU에서 실행 시 현재 사용되는 방식보다 빠르고 안정적이고 정확한 얼굴 랜드마크를 제공합니다. 설정 지침은 Deep Alignment Network의 GitHub 저장소를 참조하세요.
조만간 이 더 빠른 버전을 저장소 코드에 포함할 시간을 찾고 싶습니다.
방법의 일반적인 개요는 다음과 같습니다.
먼저 입력 이미지(자신의 얼굴에서 보고 싶은 사람의 이미지)를 가져와 얼굴 영역과 랜드마크를 찾습니다. 일단 우리가 3D 모델을 해당 랜드마크에 맞추면(나중에 자세히 설명) 이미지 공간에 투영된 해당 모델의 정점이 텍스처 좌표가 됩니다.
작업이 완료되고 모든 것이 초기화되면 카메라는 이미지 캡처를 시작합니다. 캡처된 각 이미지에 대해 다음 단계가 수행됩니다.
전체 프로세스에서 가장 중요한 요소는 3D 모델을 피팅하는 것입니다. 모델 자체는 다음으로 구성됩니다.
모델은 다음 방정식을 사용하여 이미지 공간에 투영됩니다.
여기서 s 는 투영된 모양, a 는 스케일링 매개변수, P 는 3D 얼굴 모양을 회전하는 회전 행렬의 처음 두 행, S_0 은 중립 얼굴 모양, w_1-n 은 블렌드 모양 가중치, S_1-n 은 blendshapes, t 는 2D 변환 벡터이고 n은 blendshapes의 수입니다.
모델 피팅은 투영된 모양과 국부적인 랜드마크 간의 차이를 최소화하여 수행됩니다. 최소화는 Gauss Newton 방법을 사용하여 블렌드셰이프 가중치, 크기 조절, 회전 및 이동과 관련하여 수행됩니다.
코드는 MIT 라이선스에 따라 라이선스가 부여되며, 프로젝트의 일부 데이터는 제3자 웹사이트에서 다운로드됩니다.
도움이 필요하거나 앱이 유용하다고 생각되면 주저하지 말고 알려주세요.
마렉 코왈스키(Marek Kowalski) [email protected], 홈페이지: http://home.elka.pw.edu.pl/~mkowals6/