Exemple #1
0
 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)
Exemple #2
0
 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)
Exemple #3
0
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)
Exemple #4
0
Fichier : F.py Projet : wa407/YML
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)
Exemple #5
0
Fichier : F.py Projet : wa407/YML
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)
Exemple #6
0
 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,
                                 }
                   )
Exemple #7
0
 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,
                   )
Exemple #8
0
 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)
Exemple #9
0
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
Exemple #10
0
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)