示例#1
0
def main():
    import sys
    args = get_FaceSR_opt()
    img_path = args.image
    img = utils.read_cv2_img(img_path)
    sr_model = SRGANModel(args, is_train=False)
    sr_model.load()

    def sr_forward(img, padding=0.5, moving=0.1):
        img_aligned, M = dlib_detect_face(img,
                                          padding=padding,
                                          image_size=(128, 128),
                                          moving=moving)
        input_img = torch.unsqueeze(_transform(Image.fromarray(img_aligned)),
                                    0)
        sr_model.var_L = input_img.to(sr_model.device)
        sr_model.test()
        output_img = sr_model.fake_H.squeeze(0).cpu().numpy()
        output_img = np.clip((np.transpose(output_img,
                                           (1, 2, 0)) / 2.0 + 0.5) * 255.0, 0,
                             255).astype(np.uint8)
        rec_img = face_recover(output_img, M * 4, img)
        return output_img, rec_img

    output_img, rec_img = sr_forward(img)
    utils.save_image(output_img, 'output_face.jpg')
    utils.save_image(rec_img, 'output_img.jpg')
def generate_img_dir(img_dir, out_dir):
    """
    处理视频文件夹,输出至文件夹
    """
    # img_dir = os.path.join(DATA_DIR, 'imgs')
    # out_dir = os.path.join(DATA_DIR, 'outs')
    mkdir_if_not_exist(out_dir)
    paths_list, names_list = traverse_dir_files(img_dir)

    ig = ImgGenerator()

    count = 0
    for path, name in zip(paths_list, names_list):
        print('[Info] 图像路径: {}'.format(path))
        # img_path = os.path.join(DATA_DIR, 'imgs', 'input_4.jpg')
        sr_name = name.split('.')[0] + '.jpg'
        out_path = os.path.join(out_dir, sr_name)

        try:
            img = utils.read_cv2_img(path)
            rec_img = ig.sr_forward(img=img)  # 超分辨率图像
            utils.save_image(rec_img, out_path)
        except Exception as e:
            print('[Info] 异常: {}'.format(e))
            print('[Info] 图像: {}'.format(path))

        count += 1
        if count % 100 == 0:
            print('[Info] count {}'.format(count))

    print('[Info] 视频文件处理完成!')
    print('[Info] 输出文件夹: {}'.format(out_dir))
示例#3
0
def main():
    # ---------------------------Test ---------------------------------
    print("Start SR test")
    img = utils.read_cv2_img(i)
    #img = img.resize((128,128))
    in_img = torch.unsqueeze(_transform(Image.fromarray(img)), 0)
    sr_model.var_L = in_img.to(sr_model.device)
    sr_model.test()
    #visuals = sr_model.fake_H.squeeze(0).cpu().numpy()
    visuals = sr_model.fake_H.detach().float().cpu()
    image_numpy = utils.tensor2im(visuals, show_size=317)
    image_numpy = np.reshape(image_numpy, (-1, 317, 3))
    image_numpy = cv2.resize(image_numpy, (img.shape[0], img.shape[1]))
    print('End test')
    print()
    # ----------------------------------End test--------------------------

    # -----------------------------SR img combine Original img --------------------------------------------
    #row,cols, channels = crop_img.shape
    start_x = result[i][j]['box'][0]
    start_y = result[i][j]['box'][1]
    end_x = result[i][j]['box'][0] + result[i][j]['box'][2]
    end_y = result[i][j]['box'][1] + result[i][j]['box'][3]
    area = (start_x, start_y, end_x, end_y)
    crop_img = crop_img.resize((int(end_x - start_x), int(end_y - start_y)))

    px = f_img.load()
    c_px = crop_img.load()
    c_x = 0
    c_x_max = crop_img.width
    c_y = 0
    c_y_max = crop_img.height
    # print(crop_img.width,crop_img.height)
    # print(end_x-start_x,end_y-start_y)
    for q in range(start_x, end_x):
        c_y = 0
        for k in range(start_y, end_y):
            # print(c_px[c_x,c_y])
            try:
                px[q, k] = c_px[c_x, c_y]
                if (c_y < c_y_max):
                    c_y = c_y + 1
            except:
                if (c_y < c_y_max):
                    c_y = c_y + 1
                pass
        if (c_x < c_x_max):
            c_x = c_x + 1
    my_count = my_count + 1
    # f_img.save('/content/drive/MyDrive/Face-Super-Resolution/Video_test/final/{}.png'.format(i.split('/')[-1].split('.')[0]))
    f_img.save(args.final_path +
               '/{}.png'.format(i.split('/')[-1].split('.')[0]))
    r_c = r_c + 1
    # cv2.imwrite("/content/drive/MyDrive/PARK/IP-FSRGAN/final/{}.png".format(r_c),f_img)
    print("End SR img combine to ori img")
    print()
    # -----------------------------SR img combine Original img End --------------------------------------------
    end_time = time.time()

    print("time = {}".format(end_time - start_time))
def generate_img(img_path, out_path):
    print('[Info] 图像路径: {}'.format(img_path))
    # 图像
    img = utils.read_cv2_img(img_path)
    img_name = img_path.split('/')[-1].split('.')[0]

    # 输出文件夹
    outs_dir = os.path.join(DATA_DIR, 'outs')
    mkdir_if_not_exist(outs_dir)

    ig = ImgGenerator()

    rec_img = ig.sr_forward(img=img)  # 超分辨率图像

    # 输出图像
    # out_path = os.path.join(outs_dir, '{}.output.2.jpg'.format(img_name))
    utils.save_image(rec_img, out_path)
示例#5
0
    parser.add_argument('--D_nf', type=int, default=64)

    # data dir
    parser.add_argument('--pretrain_model_G', type=str, default='90000_G.pth')
    parser.add_argument('--pretrain_model_D', type=str, default=None)

    args = parser.parse_args()

    return args


sr_model = SRGANModel(get_FaceSR_opt(), is_train=False)
sr_model.load()

def sr_forward(img, padding=0.5, moving=0.1):
    img_aligned, M = dlib_detect_face(img, padding=padding, image_size=(128, 128), moving=moving)
    input_img = torch.unsqueeze(_transform(Image.fromarray(img_aligned)), 0)
    sr_model.var_L = input_img.to(sr_model.device)
    sr_model.test()
    output_img = sr_model.fake_H.squeeze(0).cpu().numpy()
    output_img = np.clip((np.transpose(output_img, (1, 2, 0)) / 2.0 + 0.5) * 255.0, 0, 255).astype(np.uint8)
    rec_img = face_recover(output_img, M * 4, img)
    return output_img, rec_img

img_path = 'input.jpg'
img = utils.read_cv2_img(img_path)
output_img, rec_img = sr_forward(img)
utils.save_image(output_img, 'output_face.jpg')
utils.save_image(rec_img, 'output_img.jpg')

示例#6
0
    sr_model.test()
    output_img = sr_model.fake_H.squeeze(0).cpu().numpy()
    output_img = np.clip((np.transpose(output_img,
                                       (1, 2, 0)) / 2.0 + 0.5) * 255.0, 0,
                         255).astype(np.uint8)
    rec_img = face_recover(output_img, M * 4, img)
    return output_img, rec_img


#cut으로 나눴을 때, 폴더안에 들어가있는 14장의 디렉토리 (단, 14장 따로 있어서
# 이를 포괄하는 디렉토리를 지정해줘야함.)

# 그리고, 화질이 안좋은 사진 14개는 change_image의 하위폴더인 original에 담겨있어야함
# 또, 이미지 화질 보정을 통한 사진이 저장될 경로로  빈폴더 resolution도 존재해야한다.
img_path = r'C:\Users\YongTaek\Desktop\change_image'
origin_path = os.path.join(img_path, 'original')
list_photo = os.listdir(origin_path)

for i in range(len(list_photo)):
    img = os.path.join(origin_path, list_photo[i])
    img = utils.read_cv2_img(img)
    output_img, rec_img = sr_forward(img)
    utils.save_image(
        rec_img, os.path.join(img_path, 'resolution',
                              'resol_' + list_photo[i]))
'''
img = utils.read_cv2_img(img_path)
output_img, rec_img = sr_forward(img)
utils.save_image(output_img, 'output_face.jpg')
utils.save_image(rec_img, 'output_img.jpg')
'''