一、图片准备
二、图片预处理
2.1 代码
import dlib
import numpy as np
import cv2
import os
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('D:/ProgramData/wenjian/shape_predictor_68_face_landmarks.dat')
path_read = "D:\\**\\genki4k\\files"
num=0
for file_name in os.listdir(path_read):
aa=(path_read +"/"+file_name)
img=cv2.imdecode(np.fromfile(aa, dtype=np.uint8), cv2.IMREAD_UNCHANGED)
img_shape=img.shape
img_height=img_shape[0]
img_width=img_shape[1]
path_save="D:\\**\\genki4k\\files1"
dets = detector(img,1)
print("人脸数:", len(dets))
for k, d in enumerate(dets):
if len(dets)>1:
continue
num=num+1
pos_start = tuple([d.left(), d.top()])
pos_end = tuple([d.right(), d.bottom()])
height = d.bottom()-d.top()
width = d.right()-d.left()
img_blank = np.zeros((height, width, 3), np.uint8)
for i in range(height):
if d.top()+i>=img_height:
continue
for j in range(width):
if d.left()+j>=img_width:
continue
img_blank[i][j] = img[d.top()+i][d.left()+j]
img_blank = cv2.resize(img_blank, (200, 200), interpolation=cv2.INTER_CUBIC)
cv2.imencode('.jpg', img_blank)[1].tofile(path_save+"\\"+"file"+str(num)+".jpg")
2.2 实验结果
- 共识别出3878张图片。
某些图片没有识别出人脸(运行结果中显示人脸数0),所以没有裁剪保存,可以自行添加图片补充。
三、划分数据集
3.1 代码
import os, shutil
original_dataset_dir = 'D:\\**\\genki4k\\files1'
base_dir = 'D:\\**\\genki4k\\files2'
os.mkdir(base_dir)
train_dir = os.path.join(base_dir, 'train')
os.mkdir(train_dir)
validation_dir = os.path.join(base_dir, 'validation')
os.mkdir(validation_dir)
test_dir = os.path.join(base_dir, 'test')
os.mkdir(test_dir)
train_cats_dir = os.path.join(train_dir, 'smile')
os.mkdir(train_cats_dir)
train_dogs_dir = os.path.join(train_dir, 'unsmile')
os.mkdir(train_dogs_dir)
validation_cats_dir = os.path.join(validation_dir, 'smile')
os.mkdir(validation_cats_dir)
validation_dogs_dir = os.path.join(validation_dir, 'unsmile')
os.mkdir(validation_dogs_dir)
test_cats_dir = os.path.join(test_dir, 'smile')
os.mkdir(test_cats_dir)
test_dogs_dir = os.path.join(test_dir, 'unsmile')
os.mkdir(test_dogs_dir)
fnames = ['file{}.jpg'.format(