def E(level=1): if level == 0: from common import level1 as P P = partial(P, FOnly=True) # high order function, here we only test LEVEL-1 F CNN elif level == 1: from common import level1 as P elif level == 2: from common import level2 as P else: from common import level3 as P data = getDataFromTxt(TXT) error = np.zeros((len(data), 5)) for i in range(len(data)): imgPath, bbox, landmarkGt = data[i] img = cv2.imread(imgPath, cv2.CV_LOAD_IMAGE_GRAYSCALE) assert(img is not None) logger("process %s" % imgPath) landmarkP = P(img, bbox) # real landmark landmarkP = bbox.reprojectLandmark(landmarkP) landmarkGt = bbox.reprojectLandmark(landmarkGt) error[i] = evaluateError(landmarkGt, landmarkP, bbox) return error
def geneDataTxt(imgPath,landmarkREF,mode = 'test'): imgTxt = 'dataset/data/testImageList.txt' data = getDataFromTxt(imgTxt,False,False) #image_path,bbox testData = defaultdict(lambda:dict(landmarks=[],patches=[],label=[])) logger("generate 25 positive samples and 500 negative samples for per landmark") testData = generateSamples(testData,data,landmarkREF) for idx,name in types: patches = np.asarray(testData[name]['patches']) landmarks = np.asarray(testData[name]['landmarks']) #label = np.asarray(testData[name]['label']) patches = processImage(patches) shuffle_in_unison_scary(patches,landmarks) createDir('dataset/test/%s' % imgPath[-7:-4]) with h5py.File('dataset/test/%s/%s.h5' % (imgPath[-7:-4],name),'w') as h5: h5['data'] = patches.astype(np.float32) h5['landmark'] = landmarks.astype(np.float32) #h5['label'] = label.astype(np.uint8) with open('dataset/test/%s/%s.txt' % (imgPath[-7:-4],name),'w') as fd: fd.write('dataset/test/%s/%s.h5'% (imgPath[-7:-4],name)) '''with open('dataset/test/%s.txt' % (name),'w') as fd:
def geneDataTxt(imgPath, landmarks): imgTxt = 'dataset/data/testImageList.txt' data = getDataFromTxt(imgTxt, False, False) #image_path,bbox trainData = defaultdict(lambda: dict(landmarks=[], patches=[], label=[])) logger( "generate 25 positive samples and 500 negative samples for per landmark" ) trainData = generateSamples(trainData, data, landmarks) arr = [] for idx, name in types: patches = np.asarray(trainData[name]['patches']) landmarks = np.asarray(trainData[name]['landmarks']) label = np.asarray(trainData[name]['label']) arr1 = landmarks.reshape(1, -1) arr.append(arr1) patches = processImage(patches) shuffle_in_unison_scary(patches, landmarks, label) with open('test/%s.txt' % (name), 'w') as fd: fd.append(landmarks.astype(np.float32)) fd.append(patches.astype(np.float32)) fd.append(label.astype(np.uint8))
def generate_data(ftxt, fname): data = getDataFromTxt(ftxt) F_imgs = [] F_landmarks = [] F_genders = [] F_smiles = [] F_glasses = [] F_poses = [] F_all_attr = [] for (imgPath, bbox, landmarkGt, gender, smile, glasses, pose, all_attr) in data: img = cv2.imread(imgPath, cv2.IMREAD_GRAYSCALE) print(imgPath) assert (img is not None) logger("process %s" % imgPath) f_bbox = bbox #f_bbox = bbox.subBBox(-0.05, 1.05, -0.05, 1.05) f_face = img[f_bbox.top:f_bbox.bottom + 1, f_bbox.left:f_bbox.right + 1] f_face = cv2.resize(f_face, (39, 39)) f_face = f_face.reshape((39, 39, 1)) f_face = f_face / 255.0 f_landmark = landmarkGt.reshape((10)) F_imgs.append(f_face) F_landmarks.append(f_landmark) F_genders.append(gender) F_smiles.append(smile) F_glasses.append(glasses) F_poses.append(pose) F_all_attr.append(all_attr) F_imgs = np.asarray(F_imgs) F_landmarks = np.asarray(F_landmarks) F_genders = np.asarray(F_genders) F_smiles = np.asarray(F_smiles) F_glasses = np.asarray(F_glasses) F_poses = np.asarray(F_poses) F_all_attr = np.asarray(F_all_attr) shuffle_in_unison_scary(F_imgs, F_landmarks, F_genders, F_smiles, F_glasses, F_poses, F_all_attr) logger("generate %s" % fname) with h5py.File(fname, 'w') as h5: h5['data'] = F_imgs.astype(np.float32) h5['landmarks'] = F_landmarks.astype(np.float32) h5['genders'] = F_genders.astype(np.float32) h5['smiles'] = F_smiles.astype(np.float32) h5['glasses'] = F_glasses.astype(np.float32) h5['poses'] = F_poses.astype(np.float32) h5['all_attr'] = F_all_attr.astype(np.float32)
def generate(ftxt, mode, argument=False): ''' 第二阶段数据源制作 :param ftxt: 数据源文件位置和label :param mode: 训练或测试 :param argument: :return: ''' data = getDataFromTxt(ftxt) trainData = defaultdict(lambda: dict(patches=[], landmarks=[])) for (imgPath, bbox, landmarkGt) in data: img = cv2.imread(imgPath, cv2.IMREAD_GRAYSCALE) assert (img is not None) logger("process %s" % imgPath) landmarkPs = randomShiftWithArgument(landmarkGt, 0.05) if not argument: landmarkPs = [landmarkPs[0]] for landmarkP in landmarkPs: for idx, name, padding in types: patch, patch_bbox = getPatch(img, bbox, landmarkP[idx], padding) patch = cv2.resize(patch, (15, 15)) patch = patch.reshape((1, 15, 15)) trainData[name]['patches'].append(patch) _ = patch_bbox.project(bbox.reproject(landmarkGt[idx])) trainData[name]['landmarks'].append(_) for idx, name, padding in types: logger('writing training data of %s' % name) patches = np.asarray(trainData[name]['patches']) landmarks = np.asarray(trainData[name]['landmarks']) patches = processImage(patches) shuffle_in_unison_scary(patches, landmarks) with h5py.File( '/python/face_key_point/data_hdf5/train/2_%s/%s.h5' % (name, mode), 'w') as h5: h5['data'] = patches.astype(np.float32) h5['landmark'] = landmarks.astype(np.float32) with open( '/python/face_key_point/data_hdf5/train/2_%s/%s.txt' % (name, mode), 'w') as fd: fd.write('/python/face_key_point/data_hdf5/train/2_%s/%s.h5' % (name, mode))
def generate(ftxt, mode, argument=False): """ Generate Training Data for LEVEL-3 mode = train or test """ data = getDataFromTxt(ftxt) trainData = defaultdict(lambda: dict(patches=[], landmarks=[])) for (imgPath, bbox, landmarkGt) in data: img = cv2.imread(imgPath, cv2.CV_LOAD_IMAGE_GRAYSCALE) assert (img is not None) logger("process %s" % imgPath) landmarkPs = randomShiftWithArgument(landmarkGt, 0.01) if not argument: landmarkPs = [landmarkPs[0]] for landmarkP in landmarkPs: for idx, name, padding in types: patch, patch_bbox = getPatch(img, bbox, landmarkP[idx], padding) patch = cv2.resize(patch, (15, 15)) patch = patch.reshape((1, 15, 15)) trainData[name]['patches'].append(patch) _ = patch_bbox.project(bbox.reproject(landmarkGt[idx])) trainData[name]['landmarks'].append(_) for idx, name, padding in types: logger('writing training data of %s' % name) patches = np.asarray(trainData[name]['patches']) landmarks = np.asarray(trainData[name]['landmarks']) patches = processImage(patches) shuffle_in_unison_scary(patches, landmarks) with h5py.File( '/home/tyd/下载/deep_landmark/mydataset/mytrain/3_%s/%s.h5' % (name, mode), 'w') as h5: h5['data'] = patches.astype(np.float32) h5['landmark'] = landmarks.astype(np.float32) with open( '/home/tyd/下载/deep_landmark/mydataset/mytrain/3_%s/%s.txt' % (name, mode), 'w') as fd: fd.write( '/home/tyd/下载/deep_landmark/mydataset/mytrain/3_%s/%s.h5' % (name, mode))
def E(): data = getDataFromTxt(TXT) error = np.zeros((len(data), 3)) for i in range(len(data)): imgPath, bbox, landmarkGt = data[i] landmarkGt = landmarkGt[2:, :] img = cv2.imread(imgPath, cv2.CV_LOAD_IMAGE_GRAYSCALE) assert (img is not None) logger("process %s" % imgPath) landmarkP = NM(img, bbox) # real landmark landmarkP = bbox.reprojectLandmark(landmarkP) landmarkGt = bbox.reprojectLandmark(landmarkGt) error[i] = evaluateError(landmarkGt, landmarkP, bbox) return error
def E(): data = getDataFromTxt(TXT) error = np.zeros((len(data), 3)) for i in range(len(data)): imgPath, bbox, landmarkGt = data[i] landmarkGt = landmarkGt[2:, :] img = cv2.imread(imgPath, cv2.CV_LOAD_IMAGE_GRAYSCALE) assert(img is not None) logger("process %s" % imgPath) landmarkP = NM(img, bbox) # real landmark landmarkP = bbox.reprojectLandmark(landmarkP) landmarkGt = bbox.reprojectLandmark(landmarkGt) error[i] = evaluateError(landmarkGt, landmarkP, bbox) return error
def generate(txt, mode, N): """ generate Training Data for LEVEL-2: patches around landmarks mode: train or validate """ assert (mode == 'train') #从txt文件中获取数据 data = getDataFromTxt(txt, True, True) #return [(image_path,landmarks,bbox)] #用defaultdict存储数据 trainData = defaultdict(lambda: dict(landmarks=[], patches=[], label=[])) logger( "generate 25 positive samples and 500 negative samples for per landmark" ) #产生正负训练样本 trainData = generateSamples(trainData, data) print 'All data:' + str(len(trainData)) #print trainData['L1'] #arr = [] for idx, name in types: #19个点 logger('writing training data of %s' % name) patches = np.asarray(trainData[name]['patches']) landmarks = np.asarray(trainData[name]['landmarks']) label = np.asarray(trainData[name]['label']) #arr1 = landmarks.reshape(1,-1) #arr.append(arr1) patches = processImage(patches) shuffle_in_unison_scary(patches, landmarks, label) #将训练数据保存为hdf5格式 with h5py.File('train/2_%s/%s.h5' % (name, mode), 'w') as h5: h5['data'] = patches.astype(np.float32) h5['landmark'] = landmarks.astype(np.float32) h5['label'] = label.astype(np.uint8) with open('train/2_%s/%s.txt' % (name, mode), 'w') as fd: fd.write('train/2_%s/%s.h5' % (name, mode)) #暂时只产生一个点的数据 if idx == 1: break
def E(level=1): if level == 1: from common import level1 as P elif level == 2: from common import level2 as P data = getDataFromTxt(TXT) error = np.zeros((len(data), 19)) for i in range(len(data)): imgPath, bbox, landmarkGt = data[i] img = cv2.imread(imgPath, cv2.CV_LOAD_IMAGE_GRAYSCALE) assert (img is not None) logger("process %s" % imgPath) landmarkP = P(img, bbox) #real landmark landmarkP = bbox.reprojectLandmark(landmarkP) landmarkGt = bbox.reprojectLandmark(landmarkGt) error[i] = evaluateError(landmarkGt, landmarkP, bbox) return error
def generate(ftxt, mode, argument=False): """ Generate Training Data for LEVEL-3 mode = train or test """ data = getDataFromTxt(ftxt) trainData = defaultdict(lambda: dict(patches=[], landmarks=[])) for (imgPath, bbox, landmarkGt) in data: img = cv2.imread(imgPath, cv2.CV_LOAD_IMAGE_GRAYSCALE) assert(img is not None) logger("process %s" % imgPath) landmarkPs = randomShiftWithArgument(landmarkGt, 0.01) if not argument: landmarkPs = [landmarkPs[0]] for landmarkP in landmarkPs: for idx, name, padding in types: patch, patch_bbox = getPatch(img, bbox, landmarkP[idx], padding) patch = cv2.resize(patch, (15, 15)) patch = patch.reshape((1, 15, 15)) trainData[name]['patches'].append(patch) _ = patch_bbox.project(bbox.reproject(landmarkGt[idx])) trainData[name]['landmarks'].append(_) for idx, name, padding in types: logger('writing training data of %s'%name) patches = np.asarray(trainData[name]['patches']) landmarks = np.asarray(trainData[name]['landmarks']) patches = processImage(patches) shuffle_in_unison_scary(patches, landmarks) with h5py.File('train/3_%s/%s.h5'%(name, mode), 'w') as h5: h5['data'] = patches.astype(np.float32) h5['landmark'] = landmarks.astype(np.float32) with open('train/3_%s/%s.txt'%(name, mode), 'w') as fd: fd.write('train/3_%s/%s.h5'%(name, mode))
def generate_hdf5(ftxt, output, fname, argument=False): data = getDataFromTxt(ftxt) F_imgs = [] F_landmarks = [] EN_imgs = [] EN_landmarks = [] NM_imgs = [] NM_landmarks = [] for (imgPath, bbox, landmarkGt) in data: img = cv2.imread(imgPath, cv2.IMREAD_GRAYSCALE) #读取灰度图 assert (img is not None) logger("process %s" % imgPath) # F f_bbox = bbox.subBBox(-0.05, 1.05, -0.05, 1.05) f_face = img[f_bbox.top:f_bbox.bottom + 1, f_bbox.left:f_bbox.right + 1] #截图 ## data argument if argument and np.random.rand() > -1: ### flip face_flipped, landmark_flipped = flip( f_face, landmarkGt) #图片翻转,数据增强,相应坐标也要发生变换 face_flipped = cv2.resize(face_flipped, (39, 39)) #固定图片大小 F_imgs.append(face_flipped.reshape(( 1, 39, 39))) #caffe要求输入的格式 ['batch_size','channel','height','width'] F_landmarks.append(landmark_flipped.reshape(10)) #把10个关键坐标点值变成一维向量 ### rotation # if np.random.rand() > 0.5: # face_rotated_by_alpha, landmark_rotated = rotate(img, f_bbox, # bbox.reprojectLandmark(landmarkGt), 5) # landmark_rotated = bbox.projectLandmark(landmark_rotated) # face_rotated_by_alpha = cv2.resize(face_rotated_by_alpha, (39, 39)) # F_imgs.append(face_rotated_by_alpha.reshape((1, 39, 39))) # F_landmarks.append(landmark_rotated.reshape(10)) # ### flip with rotation # face_flipped, landmark_flipped = flip(face_rotated_by_alpha, landmark_rotated) # face_flipped = cv2.resize(face_flipped, (39, 39)) # F_imgs.append(face_flipped.reshape((1, 39, 39))) # F_landmarks.append(landmark_flipped.reshape(10)) # ### rotation # if np.random.rand() > 0.5: # face_rotated_by_alpha, landmark_rotated = rotate(img, f_bbox, # bbox.reprojectLandmark(landmarkGt), -5) # landmark_rotated = bbox.projectLandmark(landmark_rotated) # face_rotated_by_alpha = cv2.resize(face_rotated_by_alpha, (39, 39)) # F_imgs.append(face_rotated_by_alpha.reshape((1, 39, 39))) # F_landmarks.append(landmark_rotated.reshape(10)) # ### flip with rotation # face_flipped, landmark_flipped = flip(face_rotated_by_alpha, landmark_rotated) # face_flipped = cv2.resize(face_flipped, (39, 39)) # F_imgs.append(face_flipped.reshape((1, 39, 39))) # F_landmarks.append(landmark_flipped.reshape(10)) f_face = cv2.resize(f_face, (39, 39)) en_face = f_face[:31, :] nm_face = f_face[8:, :] f_face = f_face.reshape((1, 39, 39)) f_landmark = landmarkGt.reshape((10)) F_imgs.append(f_face) F_landmarks.append(f_landmark) # EN # en_bbox = bbox.subBBox(-0.05, 1.05, -0.04, 0.84) # en_face = img[en_bbox.top:en_bbox.bottom+1,en_bbox.left:en_bbox.right+1] ## data argument if argument and np.random.rand() > 0.5: ### flip face_flipped, landmark_flipped = flip(en_face, landmarkGt) face_flipped = cv2.resize(face_flipped, (31, 39)).reshape( (1, 31, 39)) landmark_flipped = landmark_flipped[:3, :].reshape((6)) EN_imgs.append(face_flipped) EN_landmarks.append(landmark_flipped) en_face = cv2.resize(en_face, (31, 39)).reshape((1, 31, 39)) en_landmark = landmarkGt[:3, :].reshape((6)) EN_imgs.append(en_face) EN_landmarks.append(en_landmark) # NM # nm_bbox = bbox.subBBox(-0.05, 1.05, 0.18, 1.05) # nm_face = img[nm_bbox.top:nm_bbox.bottom+1,nm_bbox.left:nm_bbox.right+1] ## data argument if argument and np.random.rand() > 0.5: ### flip face_flipped, landmark_flipped = flip(nm_face, landmarkGt) face_flipped = cv2.resize(face_flipped, (31, 39)).reshape( (1, 31, 39)) landmark_flipped = landmark_flipped[2:, :].reshape((6)) NM_imgs.append(face_flipped) NM_landmarks.append(landmark_flipped) nm_face = cv2.resize(nm_face, (31, 39)).reshape((1, 31, 39)) nm_landmark = landmarkGt[2:, :].reshape((6)) NM_imgs.append(nm_face) NM_landmarks.append(nm_landmark) #imgs, landmarks = process_images(ftxt, output) F_imgs, F_landmarks = np.asarray(F_imgs), np.asarray(F_landmarks) EN_imgs, EN_landmarks = np.asarray(EN_imgs), np.asarray(EN_landmarks) NM_imgs, NM_landmarks = np.asarray(NM_imgs), np.asarray(NM_landmarks) F_imgs = processImage(F_imgs) #数据标准化 shuffle_in_unison_scary(F_imgs, F_landmarks) #随机打乱 EN_imgs = processImage(EN_imgs) shuffle_in_unison_scary(EN_imgs, EN_landmarks) NM_imgs = processImage(NM_imgs) shuffle_in_unison_scary(NM_imgs, NM_landmarks) # full face base = join(OUTPUT, '1_F') createDir(base) output = join(base, fname) #D:.\deep_landmark\dataset\train\1_F\train.h5 logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = F_imgs.astype(np.float32) h5['landmark'] = F_landmarks.astype(np.float32) # eye and nose base = join(OUTPUT, '1_EN') createDir(base) output = join(base, fname) logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = EN_imgs.astype(np.float32) h5['landmark'] = EN_landmarks.astype(np.float32) # nose and mouth base = join(OUTPUT, '1_NM') createDir(base) output = join(base, fname) logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = NM_imgs.astype(np.float32) h5['landmark'] = NM_landmarks.astype(np.float32)
h5['landmark'] = landmarks.astype(np.float32) #h5['label'] = label.astype(np.uint8) with open('dataset/test/%s/%s.txt' % (imgPath[-7:-4],name),'w') as fd: fd.write('dataset/test/%s/%s.h5'% (imgPath[-7:-4],name)) '''with open('dataset/test/%s.txt' % (name),'w') as fd: fd.write(landmarks.astype(np.float32)) fd.write(patches.astype(np.float32)) fd.write(label.astype(np.uint8))''' TXT = 'dataset/data/' if __name__ == '__main__': txtFile = os.path.join(TXT,'testImageList.txt') data = getDataFromTxt(txtFile,with_landmark=False) #imgPath,bbox for imgPath,bbox in data: print imgPath img = cv2.imread(imgPath,cv2.CV_LOAD_IMAGE_GRAYSCALE) assert(img is not None) #landmarks = level1(img,bbox) #正常情况下,应该用level1学习出来的坐标作为初始化 landmarkREF = [[835,996],[1473,1029],[1289,1279],[604,1228],[1375,1654], [1386,2019],[1333,2200],[1263,2272],[1305,2252],[694,1805], [1460,1870],[1450,1864],[1588,1753],[1569,2013],[1514,1620], [1382,2310],[944,1506],[1436,1569],[664,1340]]#随机选取的坐标,这里用了第一张作为初始化 landmarkREF = np.array(landmarkREF,dtype=int) drawBBoxLandmark(img,bbox,landmarkREF,color=(0,255,0)) geneDataTxt(imgPath,landmarkREF)#test/L1.txt
def generate_hdf5(ftxt, output, fname, argument=False): data = getDataFromTxt(ftxt) F_imgs = [] F_landmarks = [] EN_imgs = [] EN_landmarks = [] NM_imgs = [] NM_landmarks = [] for (imgPath, bbox, landmarkGt) in data: img = cv2.imread(imgPath, cv2.CV_LOAD_IMAGE_GRAYSCALE) assert(img is not None) logger("process %s" % imgPath) # F f_bbox = bbox.subBBox(-0.05, 1.05, -0.05, 1.05) f_face = img[f_bbox.top:f_bbox.bottom+1,f_bbox.left:f_bbox.right+1] ## data argument if argument and np.random.rand() > -1: ### flip face_flipped, landmark_flipped = flip(f_face, landmarkGt) face_flipped = cv2.resize(face_flipped, (39, 39)) F_imgs.append(face_flipped.reshape((1, 39, 39))) F_landmarks.append(landmark_flipped.reshape(10)) ### rotation if np.random.rand() > 0.5: face_rotated_by_alpha, landmark_rotated = rotate(img, f_bbox, \ bbox.reprojectLandmark(landmarkGt), 5) landmark_rotated = bbox.projectLandmark(landmark_rotated) face_rotated_by_alpha = cv2.resize(face_rotated_by_alpha, (39, 39)) F_imgs.append(face_rotated_by_alpha.reshape((1, 39, 39))) F_landmarks.append(landmark_rotated.reshape(10)) ### flip with rotation face_flipped, landmark_flipped = flip(face_rotated_by_alpha, landmark_rotated) face_flipped = cv2.resize(face_flipped, (39, 39)) F_imgs.append(face_flipped.reshape((1, 39, 39))) F_landmarks.append(landmark_flipped.reshape(10)) ### rotation if np.random.rand() > 0.5: face_rotated_by_alpha, landmark_rotated = rotate(img, f_bbox, \ bbox.reprojectLandmark(landmarkGt), -5) landmark_rotated = bbox.projectLandmark(landmark_rotated) face_rotated_by_alpha = cv2.resize(face_rotated_by_alpha, (39, 39)) F_imgs.append(face_rotated_by_alpha.reshape((1, 39, 39))) F_landmarks.append(landmark_rotated.reshape(10)) ### flip with rotation face_flipped, landmark_flipped = flip(face_rotated_by_alpha, landmark_rotated) face_flipped = cv2.resize(face_flipped, (39, 39)) F_imgs.append(face_flipped.reshape((1, 39, 39))) F_landmarks.append(landmark_flipped.reshape(10)) f_face = cv2.resize(f_face, (39, 39)) en_face = f_face[:31, :] nm_face = f_face[8:, :] f_face = f_face.reshape((1, 39, 39)) f_landmark = landmarkGt.reshape((10)) F_imgs.append(f_face) F_landmarks.append(f_landmark) # EN # en_bbox = bbox.subBBox(-0.05, 1.05, -0.04, 0.84) # en_face = img[en_bbox.top:en_bbox.bottom+1,en_bbox.left:en_bbox.right+1] ## data argument if argument and np.random.rand() > 0.5: ### flip face_flipped, landmark_flipped = flip(en_face, landmarkGt) face_flipped = cv2.resize(face_flipped, (31, 39)).reshape((1, 31, 39)) landmark_flipped = landmark_flipped[:3, :].reshape((6)) EN_imgs.append(face_flipped) EN_landmarks.append(landmark_flipped) en_face = cv2.resize(en_face, (31, 39)).reshape((1, 31, 39)) en_landmark = landmarkGt[:3, :].reshape((6)) EN_imgs.append(en_face) EN_landmarks.append(en_landmark) # NM # nm_bbox = bbox.subBBox(-0.05, 1.05, 0.18, 1.05) # nm_face = img[nm_bbox.top:nm_bbox.bottom+1,nm_bbox.left:nm_bbox.right+1] ## data argument if argument and np.random.rand() > 0.5: ### flip face_flipped, landmark_flipped = flip(nm_face, landmarkGt) face_flipped = cv2.resize(face_flipped, (31, 39)).reshape((1, 31, 39)) landmark_flipped = landmark_flipped[2:, :].reshape((6)) NM_imgs.append(face_flipped) NM_landmarks.append(landmark_flipped) nm_face = cv2.resize(nm_face, (31, 39)).reshape((1, 31, 39)) nm_landmark = landmarkGt[2:, :].reshape((6)) NM_imgs.append(nm_face) NM_landmarks.append(nm_landmark) #imgs, landmarks = process_images(ftxt, output) F_imgs, F_landmarks = np.asarray(F_imgs), np.asarray(F_landmarks) EN_imgs, EN_landmarks = np.asarray(EN_imgs), np.asarray(EN_landmarks) NM_imgs, NM_landmarks = np.asarray(NM_imgs),np.asarray(NM_landmarks) F_imgs = processImage(F_imgs) shuffle_in_unison_scary(F_imgs, F_landmarks) EN_imgs = processImage(EN_imgs) shuffle_in_unison_scary(EN_imgs, EN_landmarks) NM_imgs = processImage(NM_imgs) shuffle_in_unison_scary(NM_imgs, NM_landmarks) # full face base = join(OUTPUT, '1_F') createDir(base) output = join(base, fname) logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = F_imgs.astype(np.float32) h5['landmark'] = F_landmarks.astype(np.float32) # eye and nose base = join(OUTPUT, '1_EN') createDir(base) output = join(base, fname) logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = EN_imgs.astype(np.float32) h5['landmark'] = EN_landmarks.astype(np.float32) # nose and mouth base = join(OUTPUT, '1_NM') createDir(base) output = join(base, fname) logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = NM_imgs.astype(np.float32) h5['landmark'] = NM_landmarks.astype(np.float32)
from common import level1, level2, level3 TXT = 'dataset/test/lfpw_test_249_bbox.txt' if __name__ == '__main__': assert(len(sys.argv) == 2) level = int(sys.argv[1]) if level == 0: P = partial(level1, FOnly=True) elif level == 1: P = level1 elif level == 2: P = level2 else: P = level3 OUTPUT = 'dataset/test/out_{0}'.format(level) createDir(OUTPUT) data = getDataFromTxt(TXT, with_landmark=False) for imgPath, bbox in data: img = cv2.imread(imgPath) assert(img is not None) imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) logger("process %s" % imgPath) landmark = P(imgGray, bbox) landmark = bbox.reprojectLandmark(landmark) drawLandmark(img, bbox, landmark) cv2.imwrite(os.path.join(OUTPUT, os.path.basename(imgPath)), img)
def generate_hdf5(ftxt, output, fname, argument=False): data = getDataFromTxt(ftxt) F_imgs = [] F_landmarks = [] EN_imgs = [] EN_landmarks = [] NM_imgs = [] NM_landmarks = [] for (imgPath, bbox, landmarkGt) in data: img = cv2.imread(imgPath, cv2.CV_LOAD_IMAGE_GRAYSCALE) assert (img is not None) logger("process %s" % imgPath) # F f_bbox = bbox.subBBox(-0.05, 1.05, -0.05, 1.05) f_face = img[f_bbox.top:f_bbox.bottom + 1, f_bbox.left:f_bbox.right + 1] ## data argument if argument and np.random.rand() > -1: ### flip face_flipped, landmark_flipped = flip(f_face, landmarkGt) face_flipped = cv2.resize(face_flipped, (39, 39)) F_imgs.append(face_flipped.reshape((1, 39, 39))) F_landmarks.append(landmark_flipped.reshape(10)) ### rotation if np.random.rand() > 0.5: face_rotated_by_alpha, landmark_rotated = rotate(img, f_bbox, \ bbox.reprojectLandmark(landmarkGt), 5) landmark_rotated = bbox.projectLandmark(landmark_rotated) face_rotated_by_alpha = cv2.resize(face_rotated_by_alpha, (39, 39)) F_imgs.append(face_rotated_by_alpha.reshape((1, 39, 39))) F_landmarks.append(landmark_rotated.reshape(10)) ### flip with rotation face_flipped, landmark_flipped = flip(face_rotated_by_alpha, landmark_rotated) face_flipped = cv2.resize(face_flipped, (39, 39)) F_imgs.append(face_flipped.reshape((1, 39, 39))) F_landmarks.append(landmark_flipped.reshape(10)) ### rotation if np.random.rand() > 0.5: face_rotated_by_alpha, landmark_rotated = rotate(img, f_bbox, \ bbox.reprojectLandmark(landmarkGt), -5) landmark_rotated = bbox.projectLandmark(landmark_rotated) face_rotated_by_alpha = cv2.resize(face_rotated_by_alpha, (39, 39)) F_imgs.append(face_rotated_by_alpha.reshape((1, 39, 39))) F_landmarks.append(landmark_rotated.reshape(10)) ### flip with rotation face_flipped, landmark_flipped = flip(face_rotated_by_alpha, landmark_rotated) face_flipped = cv2.resize(face_flipped, (39, 39)) F_imgs.append(face_flipped.reshape((1, 39, 39))) F_landmarks.append(landmark_flipped.reshape(10)) f_face = cv2.resize(f_face, (39, 39)) en_face = f_face[:31, :] nm_face = f_face[8:, :] f_face = f_face.reshape((1, 39, 39)) f_landmark = landmarkGt.reshape((10)) F_imgs.append(f_face) F_landmarks.append(f_landmark) # EN # en_bbox = bbox.subBBox(-0.05, 1.05, -0.04, 0.84) # en_face = img[en_bbox.top:en_bbox.bottom+1,en_bbox.left:en_bbox.right+1] ## data argument if argument and np.random.rand() > 0.5: ### flip face_flipped, landmark_flipped = flip(en_face, landmarkGt) face_flipped = cv2.resize(face_flipped, (31, 39)).reshape( (1, 31, 39)) landmark_flipped = landmark_flipped[:3, :].reshape((6)) EN_imgs.append(face_flipped) EN_landmarks.append(landmark_flipped) en_face = cv2.resize(en_face, (31, 39)).reshape((1, 31, 39)) en_landmark = landmarkGt[:3, :].reshape((6)) EN_imgs.append(en_face) EN_landmarks.append(en_landmark) # NM # nm_bbox = bbox.subBBox(-0.05, 1.05, 0.18, 1.05) # nm_face = img[nm_bbox.top:nm_bbox.bottom+1,nm_bbox.left:nm_bbox.right+1] ## data argument if argument and np.random.rand() > 0.5: ### flip face_flipped, landmark_flipped = flip(nm_face, landmarkGt) face_flipped = cv2.resize(face_flipped, (31, 39)).reshape( (1, 31, 39)) landmark_flipped = landmark_flipped[2:, :].reshape((6)) NM_imgs.append(face_flipped) NM_landmarks.append(landmark_flipped) nm_face = cv2.resize(nm_face, (31, 39)).reshape((1, 31, 39)) nm_landmark = landmarkGt[2:, :].reshape((6)) NM_imgs.append(nm_face) NM_landmarks.append(nm_landmark) #imgs, landmarks = process_images(ftxt, output) F_imgs, F_landmarks = np.asarray(F_imgs), np.asarray(F_landmarks) EN_imgs, EN_landmarks = np.asarray(EN_imgs), np.asarray(EN_landmarks) NM_imgs, NM_landmarks = np.asarray(NM_imgs), np.asarray(NM_landmarks) F_imgs = processImage(F_imgs) shuffle_in_unison_scary(F_imgs, F_landmarks) EN_imgs = processImage(EN_imgs) shuffle_in_unison_scary(EN_imgs, EN_landmarks) NM_imgs = processImage(NM_imgs) shuffle_in_unison_scary(NM_imgs, NM_landmarks) # full face base = join(OUTPUT, '1_F') createDir(base) output = join(base, fname) logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = F_imgs.astype(np.float32) h5['landmark'] = F_landmarks.astype(np.float32) # eye and nose base = join(OUTPUT, '1_EN') createDir(base) output = join(base, fname) logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = EN_imgs.astype(np.float32) h5['landmark'] = EN_landmarks.astype(np.float32) # nose and mouth base = join(OUTPUT, '1_NM') createDir(base) output = join(base, fname) logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = NM_imgs.astype(np.float32) h5['landmark'] = NM_landmarks.astype(np.float32)
def generate_hdf5(ftxt, output, fname, argument=False): ''' 生成hdf5 :param ftxt: 图片路径对应人脸框和左眼睛、右眼睛、鼻子、左嘴角、右嘴角对应坐标 :param output: hdf5存放位置 :param fname: 保存名称 :param argument: :return: ''' data = getDataFromTxt(ftxt) # 全局图片 F_imgs = [] # 全局坐标 F_landmarks = [] # 只包含了eye nose的图片 EN_imgs = [] # 只包含了eye nose的坐标 EN_landmarks = [] # 只包含nose mouth的图片 NM_imgs = [] # 只包含了nose mouth的坐标 NM_landmarks = [] for (imgPath, bbox, landmarkGt) in data: img = cv2.imread(imgPath, cv2.IMREAD_GRAYSCALE) assert(img is not None) logger("process %s" % imgPath) # 人脸框有点小,扩大一点 f_bbox = bbox.subBBox(-0.05, 1.05, -0.05, 1.05) # 人脸框里面的图像 f_face = img[int(f_bbox.top):int(f_bbox.bottom+1),int(f_bbox.left):int(f_bbox.right+1)] ## data argument if argument and np.random.rand() > -1: ### flip 图片水平翻转,数据增强 face_flipped, landmark_flipped = flip(f_face, landmarkGt) face_flipped = cv2.resize(face_flipped, (39, 39)) # 1表示通道 F_imgs.append(face_flipped.reshape((1, 39, 39))) # 5*2的关键点转换为一位数组 F_landmarks.append(landmark_flipped.reshape(10)) ### rotation if np.random.rand() > 0.5: face_rotated_by_alpha, landmark_rotated = rotate(img, f_bbox, \ bbox.reprojectLandmark(landmarkGt), 5) landmark_rotated = bbox.projectLandmark(landmark_rotated) face_rotated_by_alpha = cv2.resize(face_rotated_by_alpha, (39, 39)) F_imgs.append(face_rotated_by_alpha.reshape((1, 39, 39))) F_landmarks.append(landmark_rotated.reshape(10)) ### flip with rotation face_flipped, landmark_flipped = flip(face_rotated_by_alpha, landmark_rotated) face_flipped = cv2.resize(face_flipped, (39, 39)) F_imgs.append(face_flipped.reshape((1, 39, 39))) F_landmarks.append(landmark_flipped.reshape(10)) ### rotation if np.random.rand() > 0.5: face_rotated_by_alpha, landmark_rotated = rotate(img, f_bbox, \ bbox.reprojectLandmark(landmarkGt), -5) landmark_rotated = bbox.projectLandmark(landmark_rotated) face_rotated_by_alpha = cv2.resize(face_rotated_by_alpha, (39, 39)) F_imgs.append(face_rotated_by_alpha.reshape((1, 39, 39))) F_landmarks.append(landmark_rotated.reshape(10)) ### flip with rotation face_flipped, landmark_flipped = flip(face_rotated_by_alpha, landmark_rotated) face_flipped = cv2.resize(face_flipped, (39, 39)) F_imgs.append(face_flipped.reshape((1, 39, 39))) F_landmarks.append(landmark_flipped.reshape(10)) f_face = cv2.resize(f_face, (39, 39)) # 眼睛和鼻子 en_face = f_face[:31, :] # 鼻子和嘴巴 nm_face = f_face[8:, :] f_face = f_face.reshape((1, 39, 39)) f_landmark = landmarkGt.reshape((10)) F_imgs.append(f_face) F_landmarks.append(f_landmark) # EN # en_bbox = bbox.subBBox(-0.05, 1.05, -0.04, 0.84) # en_face = img[en_bbox.top:en_bbox.bottom+1,en_bbox.left:en_bbox.right+1] ## data argument if argument and np.random.rand() > 0.5: ### flip face_flipped, landmark_flipped = flip(en_face, landmarkGt) face_flipped = cv2.resize(face_flipped, (31, 39)).reshape((1, 31, 39)) landmark_flipped = landmark_flipped[:3, :].reshape((6)) EN_imgs.append(face_flipped) EN_landmarks.append(landmark_flipped) en_face = cv2.resize(en_face, (31, 39)).reshape((1, 31, 39)) en_landmark = landmarkGt[:3, :].reshape((6)) EN_imgs.append(en_face) EN_landmarks.append(en_landmark) # NM # nm_bbox = bbox.subBBox(-0.05, 1.05, 0.18, 1.05) # nm_face = img[nm_bbox.top:nm_bbox.bottom+1,nm_bbox.left:nm_bbox.right+1] ## data argument if argument and np.random.rand() > 0.5: ### flip face_flipped, landmark_flipped = flip(nm_face, landmarkGt) face_flipped = cv2.resize(face_flipped, (31, 39)).reshape((1, 31, 39)) landmark_flipped = landmark_flipped[2:, :].reshape((6)) NM_imgs.append(face_flipped) NM_landmarks.append(landmark_flipped) nm_face = cv2.resize(nm_face, (31, 39)).reshape((1, 31, 39)) nm_landmark = landmarkGt[2:, :].reshape((6)) NM_imgs.append(nm_face) NM_landmarks.append(nm_landmark) #imgs, landmarks = process_images(ftxt, output) F_imgs, F_landmarks = np.asarray(F_imgs), np.asarray(F_landmarks) EN_imgs, EN_landmarks = np.asarray(EN_imgs), np.asarray(EN_landmarks) NM_imgs, NM_landmarks = np.asarray(NM_imgs),np.asarray(NM_landmarks) F_imgs = processImage(F_imgs) shuffle_in_unison_scary(F_imgs, F_landmarks) EN_imgs = processImage(EN_imgs) shuffle_in_unison_scary(EN_imgs, EN_landmarks) NM_imgs = processImage(NM_imgs) shuffle_in_unison_scary(NM_imgs, NM_landmarks) # full face base = join(OUTPUT, '1_F') createDir(base) output = join(base, fname) logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = F_imgs.astype(np.float32) h5['landmark'] = F_landmarks.astype(np.float32) # eye and nose base = join(OUTPUT, '1_EN') createDir(base) output = join(base, fname) logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = EN_imgs.astype(np.float32) h5['landmark'] = EN_landmarks.astype(np.float32) # nose and mouth base = join(OUTPUT, '1_NM') createDir(base) output = join(base, fname) logger("generate %s" % output) with h5py.File(output, 'w') as h5: h5['data'] = NM_imgs.astype(np.float32) h5['landmark'] = NM_landmarks.astype(np.float32)
from common import getDataFromTxt, createDir, logger, drawLandmark from common import level1, level2, level3 TXT = 'dataset/test/lfpw_test_249_bbox.txt' if __name__ == '__main__': assert (len(sys.argv) == 2) level = int(sys.argv[1]) if level == 0: P = partial(level1, FOnly=True) elif level == 1: P = level1 elif level == 2: P = level2 else: P = level3 OUTPUT = 'dataset/test/out_{0}'.format(level) createDir(OUTPUT) data = getDataFromTxt(TXT, with_landmark=False) for imgPath, bbox in data: img = cv2.imread(imgPath) assert (img is not None) imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) logger("process %s" % imgPath) landmark = P(imgGray, bbox) landmark = bbox.reprojectLandmark(landmark) drawLandmark(img, bbox, landmark) cv2.imwrite(os.path.join(OUTPUT, os.path.basename(imgPath)), img)