gavinyuan
delete: GPEN example images
523fb10
raw
history blame
2.86 kB
import os
import cv2
import numpy as np
import glob
import tqdm
import shutil
import argparse
from face_enhancement import FaceEnhancement
def process_video(target_path, out_path, faceenhancer):
fps = 25.0
os.makedirs(out_path, exist_ok=True)
original_vid_path = target_path
vid_name = "out.mp4"
if not os.path.isdir(target_path):
vid_name = target_path.split("/")[-1]
vidcap = cv2.VideoCapture(target_path)
fps = vidcap.get(cv2.CAP_PROP_FPS)
try:
for match in glob.glob(os.path.join("./tmp/", "*.png")):
os.remove(match)
for match in glob.glob(os.path.join(out_path, "*.png")):
os.remove(match)
except Exception as e:
print(e)
os.makedirs("./tmp/", exist_ok=True)
os.system(
f"ffmpeg -i {target_path} -qscale:v 1 -qmin 1 -qmax 1 -vsync 0 ./tmp/frame_%d.png"
)
target_path = "./tmp/"
else:
print("folder not implemented.")
exit()
globbed_images = sorted(glob.glob(os.path.join(target_path, "*.png")))
for image in tqdm.tqdm(globbed_images):
name = image.split("/")[-1]
filename = os.path.join(out_path, name)
im = cv2.imread(image, cv2.IMREAD_COLOR) # BGR
h, w, _ = im.shape
# im = cv2.resize(im, (0,0), fx=2, fy=2) #optional
img, orig_faces, enhanced_faces = faceenhancer.process(im)
img = cv2.resize(img, (w, h))
cv2.imwrite(filename, img)
# merge frames to video
video_save_path = os.path.join(out_path, vid_name)
os.system(
f"ffmpeg -y -r {fps} -i {out_path}/frame_%d.png -i {original_vid_path}"
f" -map 0:v:0 -map 1:a? -c:a copy -c:v libx264 -r {fps} -pix_fmt yuv420p {video_save_path}"
)
# delete tmp file
shutil.rmtree("./tmp/")
for match in glob.glob(os.path.join(out_path, "*.png")):
os.remove(match)
if __name__ == "__main__":
model = {
"name": "GPEN-BFR-512",
"in_size": 512,
"out_size": 512,
"channel_multiplier": 2,
"narrow": 1,
}
parser = argparse.ArgumentParser()
parser.add_argument("--indir", type=str, required=True, help="input file")
parser.add_argument(
"--outdir",
type=str,
required=True,
help="Please provide output folder which has no more than one parent dir that has not been created.",
)
args = parser.parse_args()
os.makedirs(args.outdir, exist_ok=True)
faceenhancer = FaceEnhancement(
use_sr=True,
in_size=model["in_size"],
out_size=model["out_size"],
model=model["name"],
channel_multiplier=model["channel_multiplier"],
narrow=model["narrow"],
)
process_video(
args.indir,
args.outdir,
faceenhancer,
)