将FDDB图片中人脸截取后并保存的结果为
正好5157个标注出的人脸
1.简介
FDDB,最具权威的人脸检测评测平台之一,包含2845张图片,共有5171个人脸作为测试集。测试集范围包括:不同姿势、不同分辨率、旋转和遮挡等图片,同时包括灰度图和彩色图,标准的人脸标注区域为椭圆形。
图片来源:美联社和路透社新闻报道图片,并删除了重复图片
2.人脸标注方式
以椭圆来标注人脸位置,标注的结果如下:
第一个为图片的存放位置,第二个为图片中人脸的数量,第三个为人脸的位置等信息
每个标注的椭圆形人脸由六个元素组成
(ra, rb, Θ, cx, cy, s)
ra,rb:半长轴、半短轴
cx, cy:椭圆中心点坐标
Θ:长轴与水平轴夹角(头往左偏Θ为正,头往右偏Θ为负)
s:置信度得分
3.批量截取人脸
from PIL import Image
import matplotlib.pyplot as plt
filename=(r'C:\Users\Administrator\Desktop\dataset\FDDB\FDDB-folds\FDDB-folds\FDDB-fold-01-ellipseList.txt')
data_list=[]
with open(filename) as f:
for line in f.readlines():
line=line.strip('\n')
lst=line.split(' ')#将str转换为列表
data_list.append(lst)
image_path=[]
face_num=[]
face_xy=[]
i=0
#将图片的存放位置,人脸数目,人脸位置分别存放在三个list中
while i < len(data_list):
image_path.append(data_list[i][0])
face_num.append(data_list[i+1][0])
for n in range(int(data_list[i+1][0])):
face_xy.append(data_list[i+n+2])
i=i+int(data_list[i+1][0])+2
#截取人脸的范围的大小
a=1.2
k=0
n=0
while k <len(image_path):
path=r'C:\Users\Administrator\Desktop\dataset\FDDB\originalPics\{}.jpg'.format(image_path[k])
img=Image.open(path)
j=0
while j <int(face_num[k]):
n=n+1
# 保存截取的人脸的路径
save_path=r'C:\Users\Administrator\Desktop\dataset\faces\{}.jpg'.format(n)
xy=face_xy.pop(0)
#FDDB中给出的人脸位置标注是以椭圆形式给出的,根据椭圆的中心位置以及短轴、长轴的长度算出人脸框位置
x1=int(float(xy[3]))-a*int(float(xy[1]))
y1=int(float(xy[4]))-a*int(float(xy[0]))
x2=int(float(xy[3]))+a*int(float(xy[1]))
y2=int(float(xy[4]))+a*int(float(xy[0]))
box=(x1,y1,x2,y2)
img_cut=img.crop(box)
img_cut.save(save_path)
# plt.imshow(img_cut)
# plt.show()
j=j+1
k=k+1
将这5000多人脸和一些对人脸的描述信息生成tfrecord文件的代码见下一篇创建TFRecord