mirror of
https://github.com/s0md3v/roop.git
synced 2025-10-04 16:02:52 +08:00
GPU support and couple of addons
This commit is contained in:
@@ -1,5 +1,4 @@
|
|||||||
import insightface
|
import insightface
|
||||||
import onnxruntime
|
|
||||||
import core.globals
|
import core.globals
|
||||||
|
|
||||||
face_analyser = insightface.app.FaceAnalysis(name='buffalo_l', providers=core.globals.providers)
|
face_analyser = insightface.app.FaceAnalysis(name='buffalo_l', providers=core.globals.providers)
|
||||||
|
@@ -1,11 +1,14 @@
|
|||||||
|
import os
|
||||||
import cv2
|
import cv2
|
||||||
import insightface
|
import insightface
|
||||||
import onnxruntime
|
|
||||||
import core.globals
|
import core.globals
|
||||||
from core.config import get_face
|
from core.config import get_face
|
||||||
from core.utils import rreplace
|
from core.utils import rreplace
|
||||||
|
|
||||||
face_swapper = insightface.model_zoo.get_model('inswapper_128.onnx', providers=core.globals.providers)
|
if os.path.isfile('inswapper_128.onnx'):
|
||||||
|
face_swapper = insightface.model_zoo.get_model('inswapper_128.onnx', providers=core.globals.providers)
|
||||||
|
else:
|
||||||
|
quit('File "inswapper_128.onnx" does not exist!')
|
||||||
|
|
||||||
|
|
||||||
def process_video(source_img, frame_paths):
|
def process_video(source_img, frame_paths):
|
||||||
@@ -23,7 +26,7 @@ def process_video(source_img, frame_paths):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('E', end='', flush=True)
|
print('E', end='', flush=True)
|
||||||
pass
|
pass
|
||||||
print(flush=True)
|
|
||||||
|
|
||||||
def process_img(source_img, target_path):
|
def process_img(source_img, target_path):
|
||||||
frame = cv2.imread(target_path)
|
frame = cv2.imread(target_path)
|
||||||
|
@@ -17,6 +17,7 @@ def run_command(command, mode="silent"):
|
|||||||
return os.system(command)
|
return os.system(command)
|
||||||
return os.popen(command).read()
|
return os.popen(command).read()
|
||||||
|
|
||||||
|
|
||||||
def detect_fps(input_path):
|
def detect_fps(input_path):
|
||||||
input_path = path(input_path)
|
input_path = path(input_path)
|
||||||
output = os.popen(f'ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate "{input_path}"').read()
|
output = os.popen(f'ffprobe -v error -select_streams v -of default=noprint_wrappers=1:nokey=1 -show_entries stream=r_frame_rate "{input_path}"').read()
|
||||||
@@ -58,6 +59,7 @@ def add_audio(output_dir, target_path, keep_frames, output_file):
|
|||||||
def is_img(path):
|
def is_img(path):
|
||||||
return path.lower().endswith(("png", "jpg", "jpeg", "bmp"))
|
return path.lower().endswith(("png", "jpg", "jpeg", "bmp"))
|
||||||
|
|
||||||
|
|
||||||
def rreplace(s, old, new, occurrence):
|
def rreplace(s, old, new, occurrence):
|
||||||
li = s.rsplit(old, occurrence)
|
li = s.rsplit(old, occurrence)
|
||||||
return new.join(li)
|
return new.join(li)
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
numpy==1.24.3
|
numpy==1.24.3
|
||||||
opencv-python==4.7.0.72
|
opencv-python==4.7.0.72
|
||||||
onnx==1.14.0
|
onnx==1.14.0
|
||||||
onnxruntime==1.15.0
|
onnxruntime-gpu==1.15.0
|
||||||
insightface==0.7.3
|
insightface==0.7.3
|
||||||
psutil==5.9.5
|
psutil==5.9.5
|
||||||
tk==0.1.0
|
tk==0.1.0
|
||||||
|
torch==2.0.1
|
13
run.py
Normal file → Executable file
13
run.py
Normal file → Executable file
@@ -1,4 +1,7 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
import sys
|
import sys
|
||||||
|
import time
|
||||||
|
import torch
|
||||||
import shutil
|
import shutil
|
||||||
import core.globals
|
import core.globals
|
||||||
|
|
||||||
@@ -31,7 +34,8 @@ parser.add_argument('-f', '--face', help='use this face', dest='source_img')
|
|||||||
parser.add_argument('-t', '--target', help='replace this face', dest='target_path')
|
parser.add_argument('-t', '--target', help='replace this face', dest='target_path')
|
||||||
parser.add_argument('-o', '--output', help='save output to this file', dest='output_file')
|
parser.add_argument('-o', '--output', help='save output to this file', dest='output_file')
|
||||||
parser.add_argument('--keep-fps', help='maintain original fps', dest='keep_fps', action='store_true', default=False)
|
parser.add_argument('--keep-fps', help='maintain original fps', dest='keep_fps', action='store_true', default=False)
|
||||||
parser.add_argument('--gpu', help='use gpu', dest='gpu', action='store_true', default=False)
|
if torch.cuda.is_available():
|
||||||
|
parser.add_argument('--gpu', help='use gpu', dest='gpu', action='store_true', default=False)
|
||||||
parser.add_argument('--keep-frames', help='keep frames directory', dest='keep_frames', action='store_true', default=False)
|
parser.add_argument('--keep-frames', help='keep frames directory', dest='keep_frames', action='store_true', default=False)
|
||||||
|
|
||||||
for name, value in vars(parser.parse_args()).items():
|
for name, value in vars(parser.parse_args()).items():
|
||||||
@@ -44,8 +48,12 @@ if os.name == "nt":
|
|||||||
|
|
||||||
|
|
||||||
def start_processing():
|
def start_processing():
|
||||||
|
start_time = time.time()
|
||||||
if args['gpu']:
|
if args['gpu']:
|
||||||
process_video(args['source_img'], args["frame_paths"])
|
process_video(args['source_img'], args["frame_paths"])
|
||||||
|
end_time = time.time()
|
||||||
|
print(flush=True)
|
||||||
|
print(f"Processing time: {end_time - start_time:.2f} seconds", flush=True)
|
||||||
return
|
return
|
||||||
frame_paths = args["frame_paths"]
|
frame_paths = args["frame_paths"]
|
||||||
n = len(frame_paths)//(psutil.cpu_count()-1)
|
n = len(frame_paths)//(psutil.cpu_count()-1)
|
||||||
@@ -57,6 +65,9 @@ def start_processing():
|
|||||||
p.get()
|
p.get()
|
||||||
pool.close()
|
pool.close()
|
||||||
pool.join()
|
pool.join()
|
||||||
|
end_time = time.time()
|
||||||
|
print(flush=True)
|
||||||
|
print(f"Processing time: {end_time - start_time:.2f} seconds", flush=True)
|
||||||
|
|
||||||
|
|
||||||
def select_face():
|
def select_face():
|
||||||
|
Reference in New Issue
Block a user