Ejemplo n.º 1
0
 def process_extract_fanseg(arguments):
     os_utils.set_process_lowest_prio()
     from mainscripts import Extractor
     Extractor.extract_fanseg(arguments.input_dir,
                              device_args={
                                  'cpu_only': arguments.cpu_only,
                                  'multi_gpu': arguments.multi_gpu,
                              })
Ejemplo n.º 2
0
def auto_fanseg():
    from mainscripts import Extractor
    workspace = os.path.join(get_root_path(), "workspace")
    for f in os.listdir(workspace):
        if f.startswith("data_dst_"):
            dst = os.path.join(workspace, f, "aligned")
            Extractor.extract_fanseg(dst)
            break
Ejemplo n.º 3
0
Archivo: F.py Proyecto: wa407/YML
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)
    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)
Ejemplo n.º 4
0
Archivo: F.py Proyecto: 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)
Ejemplo n.º 5
0
Archivo: F.py Proyecto: 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)
Ejemplo n.º 6
0
def fanseg(align_dir):
    from mainscripts import Extractor
    Extractor.extract_fanseg(align_dir)
Ejemplo n.º 7
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)