본문 바로가기
TensorFlow OpenCV

Tensorflow로 faceswap을 해보자

by BABEL-II 2019. 10. 5.

Anaconda 3 사용.
Tensorflow 환경 진입.
> activate tensorflow

필요 패키지 설치
> pip install scandir
> pip install face_recognition
> pip install keras
> pip install h5py

(tensorflow) D:\download\deepfake\faceswap>python faceswap.py extract
Input Directory: 
input
Output Directory: output
Starting, this may take a while...
Input directory not found. Please ensure it exists.
input 디렉터리를 만들어주어야 하는구나..

python faceswap.py extract  -i src -o input_B
src에 있는 그림에서 얼굴 추출해서 input_B에 넣는다.

1단계:
트와이스 비디오에서 사진 추출. photo_A에 저장
(tensorflow) D:\download\deepfake\faceswap>D:\download\deepfake\ffmpeg\bin\ffmpe
g.exe  -i "TWICE _Heart Shaker_ M_V.mp4" -vf fps=2 "face_A\%06d.png"

2단계:
베이비복스에서 추출. photo_B에 저장
(tensorflow) D:\download\deepfake\faceswap>D:\download\deepfake\ffmpeg\bin\ffmpe
g.exe  -i "Baby_VOX_Yayaya_MV.mp4" -vf fps=2 "photo_B\%06d.png"

3단계:
photo_A에서 얼굴만 추출, face_A에 저장
(tensorflow) D:\download\deepfake\faceswap>python faceswap.py extract -i photo_A  -o face_A

4단계:
photo_B에서 얼굴만 추출, face_B에 저장
(tensorflow) D:\download\deepfake\faceswap>python faceswap.py extract -i photo_B  -o face_B

5단계:
Training
(tensorflow) D:\download\deepfake\faceswap>python faceswap.py train -A face_A -B face_B -s 10
-s 10은 10번마다 한 번 저장하라고 지시하는 것임

6단계: 변환
(tensorflow) D:\download\deepfake\faceswap>python faceswap.py convert -i photo_A
이렇게 호출하면 photo_A에 있는 그림이 변환이 되어 output에 저장된다.

7단계: 비디오 만들기
> cd twice_full
> D:\download\deepfake\ffmpeg\bin\ffmpeg.exe -r 24 -f image2 -start_number 100 -i %05d.png -vframes 500 -vcodec libx264 -crf 25  -pix_fmt yuv420p ..\test2.mp4

이러면 비디오가 만들어집니다.
통째로 다 만들 것이면
> D:\download\deepfake\ffmpeg\bin\ffmpeg.exe -r 24 -f image2 -i %05d.png -vcodec libx264 -crf 25  -pix_fmt yuv420p ..\test2.mp4

8단계: 원본에서 오디오를 추출해서 변형된 파일에 넣어봅시다.
오디오 추출하기
> D:\download\deepfake\ffmpeg\bin\ffmpeg.exe -i "TWICE _Heart Shaker_ M_V.mp4" -vn -acodec copy output-audio.aac

9단계:
비디오 만들면서 오디오랑 합치기
> D:\download\deepfake\ffmpeg\bin\ffmpeg.exe -r 24 -f image2 -i %05d.png -i ..\output-audio.aac -vcodec libx264 -crf 25  -pix_fmt yuv420p  -acodec copy ..\OUTPUT.mp4

결과에서 소리는 뺐습니다. 물론 영상 압축도 일부만 했습니다.

영상은 삭제했습니다.
문제가 생길 거 같아서 ㅎㅎㅎ

https://github.com/deepfakes/faceswap
출처 :

 

Build software better, together

GitHub is where people build software. More than 27 million people use GitHub to discover, fork, and contribute to over 77 million projects.

github.com