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))
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)
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')
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') '''