Python人脸识别图片视频

人脸识别技术发展现状及未来趋势

当前,随着人工智能、物联网等前沿技术的迅速发展,智能时代已悄然到来,"刷脸"逐渐成为了新的风潮。在人脸识别技术商业化应用领域不断扩张的趋势下,“刷脸”办事正愈发常见。

人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。

一、人脸识别技术发展背景

人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。除了安防、金融这两大领域外,人脸识别还在交通、教育、医疗、警务、电子商务等诸多场景实现了广泛应用,且呈现出显著应用价值。为了进一步把握人脸识别技术所带来的重大机遇,我国出台了一系列政策予以支撑。

二、人脸识别技术发展历程

人脸识别最初在20世纪60年代已经有研究人员开始研究,真正进入初级的应用阶段是在90年代后期,发展至今其技术成熟度已经达到较高的程度。整个发展过程可以分为机械识别、半自动化识别、非接触式识别及互联网应用阶段。

与其他生物识别方式相比,人脸识别优势在于自然性、不被察觉性等特点。自然性即该识别方式同人类进行个体识别时所利用的生物特征相同。指纹识别、虹膜识别等均不具有自然性。不被察觉的特点使该识别方法不易使人抵触,而指纹识别或虹膜识别需利用电子压力传感器或红外线采集指纹、虹膜图像,在采集过程中体验感不佳。目前人脸识别需要解决的难题是在不同场景、脸部遮挡等应用时如何保证识别率。此外,隐私性和安全性也是值得考虑的问题。人脸识别优势明显,未来将成为识别主导技术。具体来说,相比指纹识别、虹膜识别等传统的生物识别方式,优点主要还集中在四点:非接触性、非侵扰性、硬件基础完善和采集快捷便利,可拓展性好。在复杂环境下,人脸识别精度问题得到解决后,预计人脸识别有望快速替代指纹识别成为市场大规模应用的主流识别技术。

import argparse
import os
import re
import sys
import urllib
import json
import socket
import urllib.request
import urllib.parse
import urllib.error
# 设置超时
import time

time_sleep = 0.1

def handle_baidu_cookie(original_cookie, cookies):
    """
    :param string original_cookie:
    :param list cookies:
    :return string:
    """
    if not cookies:
        return original_cookie
    result = original_cookie
    for cookie in cookies:
        result += cookie.split(';')[0] + ';'
    result.rstrip(';')
    return result

def get_suffix(name):
    m = re.search(r'\.[^\.]*$', name)
    if m.group(0) and len(m.group(0)) <= 5:
        return m.group(0)
    else:
        return '.jpg'

# 保存图片
def save_image(rsp_data, word, max_count):
    if not os.path.exists("./" + word):
        os.mkdir("./" + word)
    # 判断名字是否重复,获取图片长度
    counter = len(os.listdir('./' + word)) + 1
    for image_info in rsp_data['data']:
        try:
            if 'replaceUrl' not in image_info or len(image_info['replaceUrl']) < 1:
                continue
            obj_url = image_info['replaceUrl'][0]['ObjUrl']
            thumb_url = image_info['thumbURL']
            url = 'https://image.baidu.com/search/down?tn=download&ipn=dwnl&word=download&ie=utf8&fr=result&url=%s&thumburl=%s' % (urllib.parse.quote(obj_url), urllib.parse.quote(thumb_url))
            time.sleep(time_sleep)
            suffix = get_suffix(obj_url)
            # 指定UA和referrer,减少403
            opener = urllib.request.build_opener()
            opener.addheaders = [
                ('User-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'),
            ]
            urllib.request.install_opener(opener)
            # 保存图片
            filepath = './%s/%s' % (word, str(counter) + str(suffix))
            urllib.request.urlretrieve(url, filepath)
            if os.path.getsize(filepath) < 5:
                print("下载到了空文件,跳过!")
                os.unlink(filepath)
                continue
        except urllib.error.HTTPError as urllib_err:
            print(urllib_err)
            continue
        except Exception as err:
            time.sleep(1)
            print(err)
            print("产生未知错误,放弃保存")
            continue
        else:
            print("图片下载成功,已有" + str(counter) + "张图片")
            if counter == max_count:
                return
            counter += 1
    return

def pic_num(file_path):
    return len(os.listdir(file_path))

def request_json_str(request_url):
    try:
        user_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0', 'Cookie': ''}
        req = urllib.request.Request(url=request_url, headers=user_headers)
        page = urllib.request.urlopen(req)
        user_headers['Cookie'] = handle_baidu_cookie(user_headers['Cookie'], page.info().get_all('Set-Cookie'))
        rsp = page.read()
        page.close()
    except UnicodeDecodeError as e:
        print(e)
        print('-----UnicodeDecodeErrorurl:', single_page_url)
    except urllib.error.URLError as e:
        print(e)
        print("-----urlErrorurl:", single_page_url)
    except socket.timeout as e:
        print(e)
        print("-----socket timout:", single_page_url)
    else:
        return rsp

def decode_json(json_source):
    try:
        json_data = json.loads(json_source, strict=False)
    except json.decoder.JSONDecodeError:
        try:
            source_replace = str(json_source.decode(encoding='utf8')).replace('\\', '\\\\')
            json_data = json.loads(source_replace, strict=False)
        except json.decoder.JSONDecodeError:
            return None
    return json_data

def download_single_page(word, page_url, max_pic_num):
    print("开始下载" + page_url + "中的数据")
    max_err_num = 5
    err_count = 0
    rsp = request_json_str(page_url)
    rsp_data = decode_json(rsp)
    while(rsp_data == None or 'data' not in rsp_data):
        if rsp_data == None:
            print("JSON字符串错误,尝试重试")
            err_count += 1
        else:
            print("触发反爬机制,正在重试\r", end='')
        if err_count > max_err_num:
            print("JSON错误次数超过", max_err_num, "次,跳过该页")
            return
        rsp = request_json_str(page_url)
        rsp_data = decode_json(rsp)
    save_image(rsp_data, word, max_pic_num)
    print("该页下载完成")

def get_image(word, max_pic_num):
    os.mkdir('./' + word)
    start_page = 1
    per_page = 30
    start_amount = (start_page - 1) * per_page
    search = urllib.parse.quote(word)
    pn = start_amount

    while pic_num('./' + word) < max_pic_num:
        single_page_url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%s&cl=2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

3446013570@qq.com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值