def process_extract(arguments): from mainscripts import Extractor Extractor.main(input_dir=arguments.input_dir, output_dir=arguments.output_dir, debug=arguments.debug, detector=arguments.detector, multi_gpu=arguments.multi_gpu, manual_fix=arguments.manual_fix)
def process_extract(arguments): from mainscripts import Extractor Extractor.main(input_dir=arguments.input_dir, output_dir=arguments.output_dir, debug=arguments.debug, face_type=arguments.face_type, detector=arguments.detector, multi_gpu=arguments.multi_gpu, manual_fix=arguments.manual_fix, manual_window_size=arguments.manual_window_size)
def refix(workspace): dst = get_workspace_dst(workspace) dst_aligned = os.path.join(dst, "aligned") recover_filename_if_nessesary(dst_aligned) extract_imgs = [ f if f.endswith(".jpg") or f.endswith(".png") else "" for f in os.listdir(dst) ] max_img_no = int(max(extract_imgs).split(".")[0]) ext = extract_imgs[0].split(".")[1] aligned_imgs = list( sorted( filter(lambda x: x is not None, [ f if f.endswith(".jpg") or f.endswith(".png") else None for f in os.listdir(dst_aligned) ]))) need_fix_no = [] i = 0 # 当前文件下标 j = 1 # 期望文件名 while i <= max_img_no and j <= max_img_no and i < len(aligned_imgs): if aligned_imgs[i].startswith("%05d" % j): i += 1 j += 1 else: # print(aligned_imgs[i], j) need_fix_no.append(j) j += 1 for k in range(j, max_img_no + 1): need_fix_no.append(k) # print(k) if len(need_fix_no) == 0: return fix_workspace = os.path.join(dst, "fix") import shutil if os.path.exists(fix_workspace): shutil.rmtree(fix_workspace) os.mkdir(fix_workspace) for no in need_fix_no: f = os.path.join(dst, "%05d.%s" % (no, ext)) io.log_info(f) shutil.copy(f, fix_workspace) fix_workspace_aligned = os.path.join(fix_workspace, "aligned") from mainscripts import Extractor Extractor.main(fix_workspace, fix_workspace_aligned, detector="manual", manual_fix=False) # Extractor.extract_fanseg(fix_workspace_aligned) dfl.dfl_extract_fanseg(fix_workspace_aligned) for f in os.listdir(fix_workspace_aligned): f = os.path.join(fix_workspace_aligned, f) io.log_info(f) shutil.move(f, dst_aligned) shutil.rmtree(fix_workspace)
def extract_dst_image(workspace): import os from mainscripts import Extractor # 提取人脸 input_dir = os.path.join(workspace, "data_dst") output_dir = os.path.join(workspace, "data_dst/aligned") debug_dir = os.path.join(workspace, "data_dst/aligned_debug") Extractor.main(input_dir, output_dir, debug_dir, "s3fd", manual_fix=True) # fanseg Extractor.extract_fanseg(output_dir)
def prepare(workspace, detector="s3fd", manual_fix=False): import os import shutil from mainscripts import Extractor from mainscripts import VideoEd for f in os.listdir(workspace): ext = os.path.splitext(f)[-1] if ext not in ['.mp4', '.avi']: continue if f.startswith("result"): continue # 获取所有的data_dst文件 tmp_dir = os.path.join(workspace, "_tmp") tmp_aligned = os.path.join(tmp_dir, "aligned") tmp_video_dir = os.path.join(tmp_dir, "video") if os.path.exists(tmp_dir): shutil.rmtree(tmp_dir) if not os.path.exists(tmp_dir): os.mkdir(tmp_dir) os.mkdir(tmp_video_dir) video = os.path.join(workspace, f) # 提取帧 VideoEd.extract_video(video, tmp_dir, "png", 0) # 提取人脸 if detector == "manual": import winsound winsound.Beep(300, 500) Extractor.main(tmp_dir, tmp_aligned, detector=detector, manual_fix=manual_fix) # fanseg Extractor.extract_fanseg(tmp_aligned) if detector != "manual": # # 两组人脸匹配 # skip_by_pitch(os.path.join(workspace, "data_src", "aligned"), os.path.join(tmp_dir, "aligned")) # 排序 dfl.dfl_sort_by_hist(tmp_aligned) # 保存video shutil.copy(video, tmp_video_dir) # 重命名 fname = f.replace(ext, "") dst_dir = os.path.join(workspace, "data_dst_%s_%s" % (get_time_str(), fname)) shutil.move(tmp_dir, dst_dir) # 移动video data_trash = os.path.join(workspace, "../trash_workspace") if not os.path.exists(data_trash): os.mkdir(data_trash) shutil.move(video, data_trash) import winsound winsound.Beep(300, 500)
def process_extract(arguments): from mainscripts import Extractor Extractor.main( arguments.input_dir, arguments.output_dir, arguments.debug, arguments.detector, arguments.manual_fix, arguments.manual_output_debug_fix, arguments.manual_window_size, face_type=arguments.face_type, device_args={'cpu_only' : arguments.cpu_only, 'multi_gpu' : arguments.multi_gpu, } )
def process_extract(arguments): osex.set_process_lowest_prio() from mainscripts import Extractor Extractor.main( detector = arguments.detector, input_path = Path(arguments.input_dir), output_path = Path(arguments.output_dir), output_debug = arguments.output_debug, manual_fix = arguments.manual_fix, manual_output_debug_fix = arguments.manual_output_debug_fix, manual_window_size = arguments.manual_window_size, face_type = arguments.face_type, cpu_only = arguments.cpu_only, force_gpu_idxs = [ int(x) for x in arguments.force_gpu_idxs.split(',') ] if arguments.force_gpu_idxs is not None else None, )
def process_extract(arguments): os_utils.set_process_lowest_prio() from mainscripts import Extractor Extractor.main(arguments.input_dir, arguments.output_dir, arguments.debug_dir, arguments.detector, arguments.manual_fix, arguments.manual_output_debug_fix, arguments.manual_window_size, face_type=arguments.face_type, device_args={ 'cpu_only': arguments.cpu_only, 'multi_gpu': arguments.multi_gpu, }, min_pixel=arguments.min_pixel)
def SPExtractFaceLab(context): args = context.args Extractor.main( args.inputData, args.outputData, debug_dir=None, detector=args.detector, manual_fix=False, manual_output_debug_fix=False, manual_window_size=1368, image_size=256, face_type=args.faceType, device_args={ "cpu_only": args.cpuOnly, "multi_gpu": args.multiGpu }, ) return args.outputData
def extract(): import os import shutil from mainscripts import VideoEd from mainscripts import Extractor from interact import interact as io root_dir = get_root_path() extract_workspace = os.path.join(root_dir, "extract_workspace") target_dir = os.path.join(extract_workspace, "aligned_") valid_exts = [".mp4", ".avi", ".wmv", ".mkv"] fps = io.input_int( "Enter FPS ( ?:help skip:fullfps ) : ", 0, help_message= "How many frames of every second of the video will be extracted.") min_pixel = io.input_int("Enter Min Pixel ( ?:help skip: 512) : ", 512, help_message="Min Pixel") def file_filter(file): if os.path.isdir(os.path.join(extract_workspace, file)): return False ext = os.path.splitext(file)[-1] if ext not in valid_exts: return False return True files = list(filter(file_filter, os.listdir(extract_workspace))) files.sort() pos = 0 for file in files: pos += 1 io.log_info("@@@@@ Start Process %s, %d / %d" % (file, pos, len(files))) # 提取图片 input_file = os.path.join(extract_workspace, file) output_dir = os.path.join(extract_workspace, "extract_images") if not os.path.exists(output_dir): os.mkdir(output_dir) for f in os.listdir(output_dir): os.remove(os.path.join(output_dir, f)) VideoEd.extract_video(input_file, output_dir, output_ext="png", fps=fps) io.log_info("@@@@@ Start Extract %s, %d / %d" % (file, pos, len(files))) # 提取人脸 input_dir = output_dir output_dir = os.path.join(extract_workspace, "_current") debug_dir = os.path.join(extract_workspace, "debug") Extractor.main(input_dir, output_dir, debug_dir, "s3fd", min_pixel=min_pixel) # fanseg io.log_info("@@@@@ Start FanSeg %s, %d / %d" % (file, pos, len(files))) Extractor.extract_fanseg(output_dir) # 复制到结果集 io.log_info("@@@@@ Start Move %s, %d / %d" % (file, pos, len(files))) if not os.path.exists(target_dir): os.mkdir(target_dir) ts = get_time_str() for f in os.listdir(output_dir): src = os.path.join(output_dir, f) dst = os.path.join(target_dir, "%s_%s" % (ts, f)) shutil.move(src, dst) # 全部做完,删除该文件 io.log_info("@@@@@ Finish %s, %d / %d" % (file, pos, len(files))) os.remove(os.path.join(extract_workspace, file)) os.rmdir(output_dir)