머신러닝,딥러닝

[Faceswap] linux 리눅스에서 하기 / 과정 python faceswap.py

mcdn 2023. 5. 3. 13:41
반응형

젤 중요한 링크 

https://github.com/deepfakes/faceswap/blob/master/USAGE.md

https://github.com/deepfakes/faceswap/blob/master/INSTALL.md

 

Faceswap with Linux

 

linux 설치하고 나서 하나씩 

Extraction 

Train 

Convert

할 때 사용한 코드 정리 

 

python faceswap.py extract -i ./src/dcut_original.mp4 -o ./faces/dcut_original
python faceswap.py extract -i ./src/target_face.mp4 -o ./faces/target_face

python faceswap.py train -A ~/faceswap/faces/dcut_original -B ~/faceswap/faces/target_face -m ~/faceswap/trained_model/

python faceswap.py convert -i ~/faceswap/src/dcut_original.mp4 -o ~/faceswap/converted/ -m ~/faceswap/trained_model/

ffmpeg -i ~/faceswap/converted/dcut_original_%6d.png -c:v libx264 -vf "fps=25,format=yuv420p" no_audio.mp4

ffmpeg -i no_audio.mp4 -i ~/faceswap/src/dcut_original.mp4 -c copy -map 0:v -map 1:a -shortest output.mp4

 

 

가장 먼저 주의할 점은 

bash faceswap setup을 한 후 깔려진

홈위치(cd ~)에 있는 faceswap 폴더로 이동한 후 명령어를 실행해야 한다. 

 

 

1. Extraction

 

Extraction 단계에서는 동영상에서 이미지를 뽑는다.

mp4에서 face를 중심으로 한 영역을 추출하고 alignment.fsa와 png를 저장하는 과정이다. 

python faceswap.py extract -i ./src/dcut_original.mp4 -o ./faces/dcut_original
python faceswap.py extract -i ./src/target_face.mp4 -o ./faces/target_face
python faceswap.py extract -i ./src/dcut_original.mp4 -o ./faces/dcut_original
python faceswap.py extract -i ./src/target_face.mp4 -o ./faces/target_face

 

python faceswap.py extract 를 주면서 옵션 별로 경로를 지정해주면 된다. 

-i 는 인풋 동영상 경로 (.mp4)

-o 는 아웃풋 경로 (directory) 

내 경우는 인풋에는 src에 있고 원하는 아웃풋 사진들은 faces에 디렉토리로 나온다. 

 

 

 

디렉토리가 없다는 에러가 생기면 mkdir dcut_original 명령어를 쳐서 디렉토리 만들고 실행하면 된다. 

 

 

 

결과

faces/dcut_original

faces/target_face

src/alignments.fsa

그러면 이렇게 동영상 두개에 대한 source, target 을 extraction한 이미지 결과가 담긴 디렉토리가 만들어진다. 

안에를 살펴보면 

frame별로 추출한 얼굴 이미지들이 <오리지널 영상 이름_number6d>이름으로 쭉 생겨난다.

원래 한 400~1000장 까지도 나오는데 한 사진에 담기 위해서 현재 000005까지만 있다.

 

원래 src 폴더 안에는 .fsa 포맷의 alignments 파일도 생긴다. (경로 옮기지 말고 그냥 두자) 

 

 

 

2. Train

 

Train 단계에서는 두 개의 얼굴 사이 swap을 학습한다. 

 

방금 우리가 faces 폴더에 저장한 이미지들을 거지고 이제 train을 하면 된다. 

python faceswap.py train -A ~/faceswap/faces/dcut_original -B ~/faceswap/faces/target_face -m ~/faceswap/trained_model/
python faceswap.py train -A ~/faceswap/faces/dcut_original -B ~/faceswap/faces/target_face -m ~/faceswap/trained_model/

 

python faceswap.py train에 옵션 뒤에 경로를 설정해준다. 

-A는 swap할 때 얼굴을 지우는 사람 (dcut_original)

-B는 swap할 때 얼굴을 넣을 사람 (target_face)

-m 은 model을 저장할 경로 위치 (디렉토리)라고 보면 된다. 

 

 

그러면 이렇게 로그가 뜨면서 loss가 계산되기 시작한다! 

gpu로 하면 엄청 빠르다 

 

만약 저장하고 나갈 예정이면 

"S" 키를 눌러 저장하고 

"Enter" 키를 눌러 나가면 된다. (사실 Enter만으로 save and quit가 되긴 한다)

 

 

 

05/03/2023 13:28:24 INFO     [Saved models] - Average loss since last save: face_a: 0.00687, face_b: 0.00462

나는 loss가 0.006~ 0.004가 될 때까지 100,0000 iteration을 돌렸다. (그러면 최고 12시간 정도 소모됨)

 

 

3. Convert

 

마지막 단계에서는 Convert를 한다. 

 

python faceswap.py convert -i ~/faceswap/src/dcut_original.mp4 -o ~/faceswap/converted/ -m ~/faceswap/trained_model/
python faceswap.py convert -i ~/faceswap/src/dcut_original.mp4 -o ~/faceswap/converted/ -m ~/faceswap/trained_model/

 

python faceswap.py convert 에서 옵션별로 또 경로를 정확하게 지정해주면 된다. 

-i original.mp4 원래 오디오가 있던 소스 

-o frame별로 swap시킨 얼굴 이미지를 저장할 위치 

-m 은 전단계에서 trained model을 저장한 경로를 설정해주면 된다. 

 

 

 

근데 converted를 다 수행한 결과가 동영상이 아니라 프레임마다 이미지다! 

이걸 다시 영상을 만들기 위해서는 ffmpeg라는 명령어를 사용해야 한다. 

 

 

 

ffmpeg -i ~/faceswap/converted/dcut_original_%6d.png -c:v libx264 -vf "fps=25,format=yuv420p" no_audio.mp4

ffmpeg -i no_audio.mp4 -i ~/faceswap/src/dcut_original.mp4 -c copy -map 0:v -map 1:a -shortest output.mp4
ffmpeg -i ~/faceswap/converted/dcut_original_%6d.png -c:v libx264 -vf "fps=25,format=yuv420p" no_audio.mp4

ffmpeg -i no_audio.mp4 -i ~/faceswap/src/dcut_original.mp4 -c copy -map 0:v -map 1:a -shortest output.mp4

 

이 두 개를 거치면 output.mp4가 최종적으로 나오고 

다운로드해서 활용하면 된다. 

 

 

만약 아래와 같은 오류가 뜬다면 

Could find no file with path '/home/home/faceswap/converted/dcut_original_%d.png' and index in the range 0-4
Could find no file with path '/home/home/faceswap/converted/dcut_original_%d.png' and index in the range 0-4

 

이건 뒤에 000001 이미지의 숫자를 잘못 파악해서 그러므로 뒤에 자릿수만큼을 %6d에서 수정하면 된다. 

ex) name_001.png, name_002.png ...이렇게 되어 있으면 

ffmpeg -i ~/faceswap/converted/dcut_original_%3d.png -c:v libx264 -vf "fps=25,format=yuv420p" no_audio.mp4

%3d.png로 수정하면 된다. 

 

 

Reference : 

https://stackoverflow.com/questions/61568273/ffmpeg-could-find-no-file-with-path-and-no-such-file-or-directory

 

FFMPEG "Could find no file with path" and "No such file or directory"

I try to convert a sequence of pictures to video file. But I get from ffmpeg the response, that no such file or directory Does someone have a solution for it? My command line: ffmpeg -r 1/5 -

stackoverflow.com

https://superuser.com/questions/277642/how-to-merge-audio-and-video-file-in-ffmpeg

 

How to merge audio and video file in ffmpeg

I want to merge an audio file (.wav or .au format) with a video file (.mp4 format). Please suggest me how to achieve this. I want to merge these file to new .mp4 video file. An ffmpeg command woul...

superuser.com

https://github.com/deepfakes/faceswap/issues/63

 

Plugin to merge frame to video with audio · Issue #63 · deepfakes/faceswap

HI , can we add a plugin to merge frame to video with audio?

github.com

https://www.quora.com/How-can-I-use-FFmpeg-to-turn-a-file-into-a-video-that-can-be-decoded-back-into-the-original-file-like-the-link-I-put-on-this-question

 

How can I use FFmpeg to turn a file into a video that can be decoded back into the original file, like the link I put on this qu

Answer (1 of 3): The command to generate that video is basically the opposite of the command to decode it: [code]ffmpeg -s 120x90 -framerate 30 -f rawvideo -pix_fmt monob -i yt_dl.tar.gz -vf scale=1440:-1,eq=contrast=10 -sws_flags neighbor -pix_fmt gray8 -

www.quora.com

https://github.com/deepfakes/faceswap/blob/master/USAGE.md

 

GitHub - deepfakes/faceswap: Deepfakes Software For All

Deepfakes Software For All. Contribute to deepfakes/faceswap development by creating an account on GitHub.

github.com

https://github.com/deepfakes/faceswap/blob/master/INSTALL.md

 

GitHub - deepfakes/faceswap: Deepfakes Software For All

Deepfakes Software For All. Contribute to deepfakes/faceswap development by creating an account on GitHub.

github.com

 

 

 

반응형