1. 程式人生 > >FDDB人臉資料集/python影象批量處理

FDDB人臉資料集/python影象批量處理

將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