人脸识别--数据制作(一)

一、获取明星名字列表

安装模块:
(base) C:\Users\Administrator>pip3 install requests


安装模块

安装 icrawler:
(base) C:\Users\Administrator>pip3 install icrawler


安装 icrawler
  1. 首先从百度搜索栏中搜索“明星”,显示出明星栏目,地区包括内地、香港、台湾、韩国和日本,如下图:


    百度搜索
  2. 使用python爬虫将这些明星的名字爬取下来,代码如下所示:

import requests
import json
import urllib

def getManyPages(pages):
    params = []
    for i in range(0, 12 * pages + 12, 12):
        params.append({
            'resource_id': 28266,
            'from_mid': 1,
            'format': 'json',
            'ie': 'utf-8',
            'oe': 'utf-8',
            'query': '明星',
            'sort_key': '',
            'sort_type': 1,
            'stat0': '',
            'stat1': '内地',
            'stat2': '',
            'stat3': '',
            'pn': i,
            'rn': 12
        })
    url = 'https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php'
    #    names = []
    #    img_results = []
    x = 0
    file = open('starName.txt', 'w',encoding='utf-8')
    paths ="downloadFace/"
    for param in params:
        try:
            response = requests.get(url, params=param)
            response.encoding ="utf-8"
            js = json.loads(response.text)
            results = js.get('data')[0].get('result')
        except AttributeError as e:
            print(e)
            continue
        for result in results:
            img_name = result['ename']
            img_url = result['pic_4n_78']
            #            img_result =  [img_name,img_url]
            #            img_results.append(img_result)
            file.write("downloadFace/"+img_name + '\n')
            # 打开imglist中保存的图片网址,并下载图片保存在本地,format格式化字符串
            urllib.request.urlretrieve(img_url,'{0}{1}.jpg'.format(paths, img_name+str(x)))
            x = x + 1
        if x % 10 == 0:
            print('第%d页......' % x)
        x += 1
    file.close()


if __name__ == '__main__':
    # 10为页数
    getManyPages(10)

结果

注意:params里的‘query’:‘台湾明星’;‘start1’:‘台湾’,对应台湾地区的明星,修改这两个值可以获得‘内地’、‘香港’、‘韩国’等地区的明星。从图一可以看出,每页有12位明星,getManyPages(400)是获取400页的明星名单结果,也就是12*400=4800位明星名单,通过修改获取页码值来获取更多明星的名单,将获取的明星名单保存成文本文件,在后续操作中将会用到,同时也能避免代码终止又要重新爬取。

常见错误:

  1. 无法导入ssl模块
    下载:Win64OpenSSL安装
    https://slproweb.com/products/Win32OpenSSL.html

二、使用icrawler爬取数据

创建文件:KoreaStarName.txt
添加内容:
明星

import os
from icrawler.builtin import BingImageCrawler

path = r'BingImage/'
# 创建文件
file = open('KoreaStarName.txt', 'r',encoding='utf-8')
# 读取文件内容
lines = file.readlines()
for i, line in enumerate(lines):
    name = line.strip('\n')
    # 文件路径
    file_path = os.path.join(path, name)
    if not os.path.exists(file_path):
        os.makedirs(file_path)
        # 定义文件 存储路径
    bing_storage = {'root_dir': file_path}
    #
    bing_crawler = BingImageCrawler(parser_threads=2, downloader_threads=4, storage=bing_storage)
    bing_crawler.crawl(keyword=name, max_num=10)
    print('第{}位明星:{}'.format(i, name))
icrawler爬取数据

三、数据清洗

主要针对非人脸图像的清洗,由于爬取的图像里有可能出现非人像图片,需要对它进行删除,通过对图像人脸判断来确认是否包含人脸图像,其中,使用face_recognition库检测图像上是否有人脸,new_path为清洗后保存到的人脸图像目录。
安装:
(base) C:\Users\Administrator>pip3 install face_recognition

import os
#(base) C:\Users\Administrator>pip3 install face_recognition
import face_recognition
from PIL import Image
from PIL import ImageFile
import threading

ImageFile.LOAD_TRUNCATED_IMAGES = True

def process_img(path, new_path):
    dirs = os.listdir(path)
    for pic_dir in dirs:
        print(pic_dir)
        dir_path = os.path.join(path, pic_dir)
        pics = os.listdir(dir_path)
        for pic in pics:
            pic_path = os.path.join(dir_path, pic)
            image = face_recognition.load_image_file(pic_path)
            # 图像检测
            face_locations = face_recognition.face_locations(image)
            if len(face_locations) == 0:
                continue
            img = Image.open(pic_path)
            new_pic_path = os.path.join(new_path, pic_dir)
            if not os.path.exists(new_pic_path):
                os.makedirs(new_pic_path)
            if len(img.split()) == 4:
                # 利用split和merge将通道从四个转换为三个
                r, g, b, a = img.split()
                toimg = Image.merge("RGB", (r, g, b))
                toimg.save(new_pic_path + '\\' + pic)
            else:
                try:
                    img.save(new_pic_path + '\\' + pic)
                except:
                    continue
        print('Finish......!')


def lock_test(path, new_path):
    mu = threading.Lock()
    if mu.acquire(True):
        process_img(path, new_path)
        mu.release()

x=0
if __name__ == '__main__':
    file_dir = r'downloadFace/'
    def file_name(file_dir):
        for root, dirs, files in os.walk(file_dir):
            for file in files:
                my_thread = threading.Thread(target=lock_test, args=(file, "newFace"+str(x)))
                x = x + 1
                my_thread.start()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容