faceScrub 数据库是一个公共的名人人脸数据库,其相对与其他的数据库来说,优点是图像比较多,而且清晰度比较好,共有 107,818 张人脸图像, 涵盖530 个名人, 每个人大约200张图片。
居于版权的信息,该数据只提供了图片的链接,没有提供图片本身,跟另外一个数据库PubFig类似,所以我们需要自己写脚本来完成这个图像提取的功能。
这个数据库的文件在这里:http://vintage.winklerbros.net/facescrub.html 下载,文件不大,压缩后的大小只有8M多。
文件格式如下
name image_id face_id url bbox sha256
Aaron Eckhart 1 1 http://upload.wikimedia.org/wikipedia/commons/5/5d/AaronEckhart10TIFF.jpg 53,177,418,542 dec996994cf1eec33b53c203cff0e8f25638829fa2ad71bb0307d308fa11cdac
Aaron Eckhart 2 2 http://movies.dosthana.com/sites/default/files/image-gallery/Aaron-Eckhart-Image.jpg 80,102,260,282 f84d0c3b1b854a51e6bc031bc353e801834e81df795e85ec1589ca895fb7c1ae
Aaron Eckhart 3 3 http://upload.wikimedia.org/wikipedia/commons/5/52/Aaron_Eckhart_-_002.jpg 203,802,975,1574 8548658ef00f2ac4c384fbfff9d3ae225b4b9e0c2aa45e79a97420381c0f84c9
Aaron Eckhart 4 4 http://25.media.tumblr.com/nJ2vga5sae9o2ks4FltK2lYvo1_400.jpg 62,90,231,259 658d83f35859d2f313ff660c1900427c21eae1c41e3035307428f62b645e64d7
Aaron Eckhart 5 5 http://upload.wikimedia.org/wikipedia/commons/5/5e/Aaron-Eckhart-Traveling.jpg 276,120,492,336 1fa14fed3371280e8785df42cdc5d0335e7923a38f1b0632e3b88a52e850825f
Aaron Eckhart 6 6 http://media.zenfs.com/en_us/Movies/PhotoG/2nd-annual-ampas-governors-awards-2010-aaron-eckhart-53335.jpg 235,158,540,463 121e8bea5caae215b537dc116534bbd2fa7a9a60c1910764d78794ec185aa527
Aaron Eckhart 7 7 http://img2.timeinc.net/people/i/2008/news/080804/aaron_eckhart.jpg 60,57,178,175 bb2e227a9420d6325b67974231d334fc4620e807543a16030d51b35fa8a092f3
所以我们可以很容易的采用提取文本的方法直接去读取和存储图像。
由于最近在学习Python,就用python来完成这个功能吧。
直接贴代码吧。
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 07 15:28:53 2015
@author: Chenriwei
"""
import os
import re
import time
import urllib
def get_all_iamge(filename):
fid=open(filename)
lines=fid.readlines()
for line in lines:
line_split=line.split('\t')
name=line_split[0]
image_id=line_split[1]
face_id=line_split[2]
box=line_split[4]
image_url=line_split[3]
print image_url+'\n'
print box+'\n'
if False == os.path.exists(name):
os.mkdir(name)
try:
urlopen=urllib.URLopener()
fp = urlopen.open(image_url)
data = fp.read()
fp.close()
file=open(name+'/'+image_id+'.jpg','w+b')
file.write(data)
print "下载成功:"+ image_url
file.close()
except IOError:
print "下载失败:"+ image_url
if __name__ == "__main__":
get_all_iamge('facescrub_actors.txt')
当然这里有个不足之处,是只采用了单线程,所以很慢,下载一个人的图像都要好久。