GPU support and couple of addons

This commit is contained in:
Somdev Sangwan
2023-05-30 05:33:06 +05:30
committed by GitHub
6 changed files with 23 additions and 7 deletions

View File

@@ -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)

View File

@@ -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
if os.path.isfile('inswapper_128.onnx'):
face_swapper = insightface.model_zoo.get_model('inswapper_128.onnx', providers=core.globals.providers) 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)

View File

@@ -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)

View File

@@ -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

11
run.py Normal file → Executable file
View 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,6 +34,7 @@ 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)
if torch.cuda.is_available():
parser.add_argument('--gpu', help='use gpu', dest='gpu', action='store_true', default=False) 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)
@@ -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():