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')
当然这里有个不足之处,是只采用了单线程,所以很慢,下载一个人的图像都要好久。