|
import math
|
|
import os
|
|
import cv2
|
|
import numpy as np
|
|
|
|
|
|
root_dir = '/export2/home/wht/oulu_images_crop/'
|
|
|
|
img_root = '/export2/home/wht/oulu_images/train_img_flod/'
|
|
map_root = '/export2/home/wht/oulu_images/train_depth_flod/'
|
|
bbox_root = '/export2/home/wht/oulu_images/train_bbox_flod/'
|
|
|
|
|
|
def crop_face_from_scene(image, face_name_full, scale):
|
|
f = open(face_name_full, 'r')
|
|
lines = f.readlines()
|
|
lines = lines[0].split(' ')
|
|
y1, x1, w, h = [int(ele) for ele in lines[:4]]
|
|
f.close()
|
|
y2 = y1 + w
|
|
x2 = x1 + h
|
|
|
|
y_mid = (y1 + y2) / 2.0
|
|
x_mid = (x1 + x2) / 2.0
|
|
h_img, w_img = image.shape[0], image.shape[1]
|
|
|
|
w_scale = scale * w
|
|
h_scale = scale * h
|
|
y1 = y_mid - w_scale / 2.0
|
|
x1 = x_mid - h_scale / 2.0
|
|
y2 = y_mid + w_scale / 2.0
|
|
x2 = x_mid + h_scale / 2.0
|
|
y1 = max(math.floor(y1), 0)
|
|
x1 = max(math.floor(x1), 0)
|
|
y2 = min(math.floor(y2), w_img)
|
|
x2 = min(math.floor(x2), h_img)
|
|
|
|
|
|
region = image[x1:x2, y1:y2]
|
|
return region
|
|
|
|
|
|
def crop_face_from_scene_prnet(image, face_name_full, scale):
|
|
h_img, w_img = image.shape[0], image.shape[1]
|
|
f = open(face_name_full, 'r')
|
|
lines = f.readlines()
|
|
lines = lines[0].split(' ')
|
|
l, r, t, b = [int(ele) for ele in lines[:4]]
|
|
if l < 0:
|
|
l = 0
|
|
if r > w_img:
|
|
r = w_img
|
|
if t < 0:
|
|
t = 0
|
|
if b > h_img:
|
|
b = h_img
|
|
y1 = l
|
|
x1 = t
|
|
w = r - l
|
|
h = b - t
|
|
f.close()
|
|
y2 = y1 + w
|
|
x2 = x1 + h
|
|
|
|
y_mid = (y1 + y2) / 2.0
|
|
x_mid = (x1 + x2) / 2.0
|
|
|
|
w_scale = scale * w
|
|
h_scale = scale * h
|
|
y1 = y_mid - w_scale / 2.0
|
|
x1 = x_mid - h_scale / 2.0
|
|
y2 = y_mid + w_scale / 2.0
|
|
x2 = x_mid + h_scale / 2.0
|
|
y1 = max(math.floor(y1), 0)
|
|
x1 = max(math.floor(x1), 0)
|
|
y2 = min(math.floor(y2), w_img)
|
|
x2 = min(math.floor(x2), h_img)
|
|
|
|
|
|
region = image[x1:x2, y1:y2]
|
|
return region
|
|
|
|
|
|
vedio_list = os.listdir(bbox_root)
|
|
for i, vedio_name in enumerate(vedio_list):
|
|
print(i)
|
|
bbox_list = os.listdir(os.path.join(bbox_root, vedio_name))
|
|
for bbox_name in bbox_list:
|
|
|
|
face_scale = np.random.randint(12, 15)
|
|
face_scale = face_scale / 10.0
|
|
|
|
|
|
|
|
bbox_path = os.path.join(bbox_root, vedio_name, bbox_name)
|
|
|
|
img_path = os.path.join(img_root, vedio_name, bbox_name[:-4] + '.jpg')
|
|
|
|
img = cv2.imread(img_path)
|
|
img_crop = cv2.resize(crop_face_from_scene_prnet(img, bbox_path, face_scale), (256, 256))
|
|
|
|
img_crop_path = os.path.join(root_dir, 'train_img_flod')
|
|
|
|
if not os.path.exists(os.path.join(img_crop_path, vedio_name)):
|
|
os.makedirs(os.path.join(img_crop_path, vedio_name))
|
|
|
|
cv2.imwrite(os.path.join(img_crop_path, vedio_name, bbox_name[:-4] + '.jpg'), img_crop)
|
|
|
|
map_path = os.path.join(map_root, vedio_name, bbox_name[:-9] + 'depth1D.jpg')
|
|
|
|
map = cv2.imread(map_path, 0)
|
|
map_crop = cv2.resize(crop_face_from_scene_prnet(map, bbox_path, face_scale), (32, 32))
|
|
map_crop_path = os.path.join(root_dir, 'train_depth_flod')
|
|
if not os.path.exists(os.path.join(map_crop_path, vedio_name)):
|
|
os.makedirs(os.path.join(map_crop_path, vedio_name))
|
|
cv2.imwrite(os.path.join(map_crop_path, vedio_name, bbox_name[:-9] + 'depth1D.jpg'), map_crop)
|
|
|