前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬取人脸识别图片数据集/py

python爬取人脸识别图片数据集/py

作者头像
py3study
发布2020-01-07 10:31:10
1.3K0
发布2020-01-07 10:31:10
举报
文章被收录于专栏:python3

前言

最近在做机器学习下的人脸识别的学习,机器学习这个东西有点暴力,很大程度上靠训练的数据量来决定效果。为了找数据,通过一个博客的指导,浏览了几个很知名的数据集。

几个大型数据集是通过发邮件申请进行下载,几个小型数据集直接在网页的链接下载,还有一个Pubfig数据集则是提供了大量图片的链接来让我们自己写程序来下载。

权衡了数据量的需求,最后选择Pubfig的数据集,于是就自己写了一个python图片采集程序,里面用了urllib和requests两种方法.

分析Pubfig提供的下载文件的特点

people
people

这个数据文件提供了在数据集中出现的所有人物

urls
urls

这个数据文件提供了每个人的urls

可以看出来这个数据集的处理其实非常简单了,可以通过readlines的方式存进列表用空格分开一下数据就可以把urls提取出来了。

处理一下urls文件

urls在文件的中后部,写个文件把它单纯地提取出来,方便使用。 我单独把Miley_Cyrus的部分提取出来放了一个txt文件

代码语言:javascript
复制
pic_url = []
with open('./Miley_Cyrus.txt') as f:
    for i in f.readlines():
        pic_url.append(i.strip('\r\n'))

urls = []
for s in pic_url:
    _, _, _, url, _, _ = s.split()
    urls.append(url)

# 写入到文件里面
with open('url.data', 'w') as f:
    for i in urls:
        f.write(i)
        f.write('\n')

爬取urls图片

1. Urllibs方法

代码语言:javascript
复制
import urllib.request as request
import socket
import os

# 在同级目录新建文件夹存图片
os.mkdir('./img')

# 为请求增加一下头
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'
headers = ('User-Agent', user_agent)
opener = request.build_opener()
opener.addheaders = [headers]
request.install_opener(opener)

# 设定一下无响应时间,防止有的坏图片长时间没办法下载下来
timeout = 20
socket.setdefaulttimeout(timeout)

# 从文件里面读urls
urls = []
with open('./url.data') as f:
    for i in f.readlines():
        if i != '':
            urls.append(i)
        else:
            pass

# 通过urllibs的requests获取所有的图片
count = 1
bad_url = []
for url in urls:
    url.rstrip('\n')
    print(url)
    try:
        pic = request.urlretrieve(url, './img3/%d.jpg' % count)
        print('pic %d' % count)
        count += 1
    except Exception as e:
        print(Exception, ':', e)
        bad_url.append(url)
    print('\n')
print('got all photos that can be got')

# 把没有抓取到的urls保存起来
with open('bad_url3.data', 'w') as f:
    for i in bad_url:
        f.write(i)
        f.write('\n')
    print('saved bad urls')

2. Requests方法

代码语言:javascript
复制
import requests
import socket
import os

# 在同级目录新建文件夹存图片
os.mkdir('./img')

# 设定一下无响应时间,防止有的坏图片长时间没办法下载下来
timeout = 20
socket.setdefaulttimeout(timeout)

# 从文件里面读urls
urls = []
with open('./url.data') as f:
    for i in f.readlines():
        if i != '':
            urls.append(i)
        else:
            pass

# 为请求增加一下头,获取图片
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'
headers = {
    'User-Agent': user_agent
}
bad_url = []
count = 1
for url in urls:
    url.rstrip('\n')
    print(url)
    try:
        pic = requests.get(url, headers=headers)
        with open('./img2/%d.jpg' % count, 'wb') as f:
            f.write(pic.content)
            f.flush()
        print('pic %d' % count)
        count += 1
    except Exception as e:
        print(Exception, ':', e)
        bad_url.append(url)
    print('\n')
print('got all photos that can be got')

# 保存坏链接
with open('bad_url.data', 'w') as f:
    for i in bad_url:
        f.write(i)
        f.write('\n')
    print('saved bad urls')
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析Pubfig提供的下载文件的特点
  • 处理一下urls文件
  • 爬取urls图片
    • 1. Urllibs方法
      • 2. Requests方法
      相关产品与服务
      人脸识别
      腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档