精华内容
下载资源
问答
  • python人脸对比

    2019-10-03 03:39:52
     #人脸对比API  url = 'https://aip.baidubce.com/rest/2.0/face/v2/match?access_token='+token    params = imgdata(file1path,file2path)  #urlencode处理需提交的数据  data = parse.urlencode(params)...

    import sys  
    import ssl  
    from urllib import request,parse  
     
    # client_id 为官网获取的AK, client_secret 为官网获取的SK  
    #获取token  
    def get_token():  
        client_id =API Key
        client_secret =Secret Key
        host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s'%(client_id,client_secret)  
        req = request.Request(host)  
        req.add_header('Content-Type', 'application/json; charset=UTF-8')  
        response = request.urlopen(req)  
        #获得请求结果  
        content = response.read()  
        #结果转化为字符  
        content = bytes.decode(content)  
        #转化为字典  
        content = eval(content[:-1])  
        return content['access_token']  
     
     
    #转换图片  
    #读取文件内容,转换为base64编码  
    #二进制方式打开图文件  
    def imgdata(file1path,file2path):  
        import base64  
        f=open(r'%s' % file1path,'rb')   
        pic1=base64.b64encode(f.read())   
        f.close()  
        f=open(r'%s' % file2path,'rb')   
        pic2=base64.b64encode(f.read())  
        f.close()  
        #将图片信息格式化为可提交信息,这里需要注意str参数设置  
        params = {"images":str(pic1,'utf-8') + ',' + str(pic2,'utf-8')}  
        return params  
     
    #提交进行对比获得结果  
    def img(file1path,file2path):  
        token = get_token()  
        #人脸识别API  
        #url = 'https://aip.baidubce.com/rest/2.0/face/v2/detect?access_token='+token  
        #人脸对比API  
        url = 'https://aip.baidubce.com/rest/2.0/face/v2/match?access_token='+token  
        params = imgdata(file1path,file2path)  
        #urlencode处理需提交的数据  
        data = parse.urlencode(params).encode('utf-8')  
        req = request.Request(url,data=data)  
        req.add_header('Content-Type', 'application/x-www-form-urlencoded')  
        response = request.urlopen(req)  
        content = response.read()  
        content = bytes.decode(content)  
        content = eval(content)
        print(content)
        #获得分数  
        score = content['result'][0]['score']  
        if score>80:  
            return '照片相似度:'+str(score)+',同一个人'  
        else:  
            return '照片相似度:'+str(score)+',不是同一个人'  
     
    if __name__ == '__main__':  
        file1path = 'd:/ym1.jpg'  
        file2path = 'd:/ym2.jpg'  
        res = img(file1path,file2path)  
        print(res) 

    转载于:https://www.cnblogs.com/chenlove/p/8996546.html

    展开全文
  • python人脸对比.zip

    2021-04-07 17:39:49
    Python人脸识别
  • 人脸对比与人脸检测人脸对比查看API文档获取Access Token图片转为base64格式请求参数调用返回示例人脸检测代码返回示例错误识别错误码 人脸对比 两张人脸1 :1对比,得到人脸相识度。 查看API文档 人脸识别接口分为...

    人脸对比

    两张人脸1 :1对比,得到人脸相识度。

    查看API文档

    人脸识别接口分为V2和V3两个版本,本文档为V3版本接口的说明文档,请确认您在百度云后台获得的是V3版本接口权限,再来阅读本文档。

    辨别接口版本的方法是:在百度云后台进入【应用列表】,点击【应用名称】,在【API列表】中可以看到【请求地址】,若请求地址中带有【v3】标识,则您具有的是v3权限,可以阅读本文档;若请求地址中带有【v2】标识,则您具有的是v2权限,应该去阅读v2文档。

    Base64编码:请求的图片需经过Base64编码,图片的base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。您可以首先得到图片的二进制,然后用Base64格式编码即可。
    图片格式:现支持PNG、JPG、JPEG、BMP,不支持GIF图片。

    获取Access Token

    向API服务地址使用POST发送请求,必须在URL中带上参数access_token,可通过后台的API Key和Secret Key生成。

    API_Key = '自己的API_Key'
    Secret_Key = '自己的Secret_Key '
    def get_token_baidu():
    	client_id = API_Key
    	client_secret = Secret_Key
    	host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s'%(API_Key,Secret_Key)
    	response = requests.get(host)
    	if response:
    		print(response.json())
    		return response.json()['access_token']
    

    图片转为base64格式

    def get_imgdata(file1path, file2path):
    	f = open(r'%s'%file1path,'rb')
    	pic1 = base64.b64encode(f.read())
    	f.close()
    
    	f = open(r'%s'%file2path,'rb')
    	pic2 = base64.b64encode(f.read())
    	f.close()
    
    	strp1 = str(pic1,'UTF-8')
    	strp2 = str(pic2,'UTF-8')
    	return strp1,strp2
    

    请求参数

    两张图片上传时的JSON格式
    [
        {
            "image": "sfasq35sadvsvqwr5q...",通过BASE64转码后得到的图片文件
            "image_type": "BASE64",
            "face_type": "LIVE",
            "quality_control": "LOW",
            "liveness_control": "HIGH"
        },
        {
            "image": "sfasq35sadvsvqwr5q...",
            "image_type": "BASE64",
            "face_type": "IDCARD",
            "quality_control": "LOW",
            "liveness_control": "HIGH"
        }
    ]
    

    人脸对比函数,传入两张合法的格式图片(PNG、JPG、JPEG、BMP),通过get_ingdata()函数得到base64转码后的图片。

    def myface_compare(file1path, file2path):
    	strp1,strp2 = get_imgdata(file1path, file2path)
    	
    	#HTTP方法:POST
    	#URL: https://aip.baidubce.com/rest/2.0/face/v3/match
    	request_url = "https://aip.baidubce.com/rest/2.0/face/v3/match"
    	
    	#Body中放置请求参数
    	params = "[{\"image\": \"%s\", \"image_type\": \"BASE64\", \"face_type\": \"LIVE\", \"quality_control\": \"LOW\"},{\"image\": \"%s\", \"image_type\": \"BASE64\", \"face_type\": \"IDCARD\", \"quality_control\": \"LOW\"}]"%(strp1,strp2)
    	access_token = get_token_baidu()
    	request_url = request_url + "?access_token=" + access_token
    	headers = {'content-type': 'application/json'}
    	response = requests.post(request_url, data=params, headers=headers)
    	if response:
    		#print(response.json())
    		myret = response.json()
    		#print(type(myret))
    		print(myret)
    		score = myret['result']['score']
    		print(score)
    		return score
    

    调用

    #传进去两张图片的路径
    myface_compare("3.jpg","4.jpg")
    

    返回示例

    {
        "score": 44.3,
        "face_list": [  //返回的顺序与传入的顺序保持一致
            {
                "face_token": "fid1"
            },
            {
                "face_token": "fid2"
            }
        ]
    }
    

    在这里插入图片描述

    人脸检测

    接口能力
    人脸检测:检测图片中的人脸并标记出位置信息;
    人脸关键点:展示人脸的核心关键点信息,及150个关键点信息。
    人脸属性值:展示人脸属性信息,如年龄、性别等。
    人脸质量信息:返回人脸各部分的遮挡、光照、模糊、完整度、置信度等信息。

    获取Access Token和图片转码与人脸对比方法一致,不同的是这里请求参数;

    HTTP方法:POST
    请求URL: https://aip.baidubce.com/rest/2.0/face/v3/detect
    

    在这里插入图片描述
    需要检测人脸的什么信息,添加相应的参数就可以了:
    max_face_num=10,最大处理人脸的个数
    face_fields=age,beauty,expression,faceshape,gender,glasses,race,quality,emotion,mask,landmark150(年龄、样貌得分、表情、脸型…)

    代码

    使用之前注意更换自己的API_key,Secret_Key

    import os
    import sys
    import ssl
    import base64
    import requests
    from urllib import request
    
    def get_token_baidu():
        client_id='自己的API_Key'
        client_secret='自己的secret_key'
        host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s'%(client_id,client_secret)
        response = requests.get(host)
        if response:
            print(response.json())
            return response.json()['access_token']
    
    def get_imgdata(file1path):
        f = open(r'%s'%file1path,'rb')
        print(f)
        pic1 = base64.b64encode(f.read())
        f.close()
        strp1 = str(pic1,'UTF-8')
        return strp1
    
    def myface_compare(file1path):
        strp1= get_imgdata(file1path)
        request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
    
        params = "{\"image\":\"%s\",\"image_type\":\"BASE64\",\"max_face_num\":10,\"face_field\":\"age,beauty,expression,face_shape,gender,glasses,landmark,landmark150,race,\
    quality,eye_status,emotion,face_type,mask,spoofing\"}"%(strp1)
        access_token = get_token_baidu()
        request_url = request_url + "?access_token=" + access_token
        headers = {'content-type': 'application/json'}
        response = requests.post(request_url, data=params, headers=headers)
        j=1
        if response:
            #print (response.json())
            print (response.json()['result'])
            print(response.json()['result']['face_num'])
            for i in response.json()['result']['face_list']:
                print("第%d张脸:"%j,i['face_token'])
                print("age:",i['age'])
                print("beauty:",i['beauty'])
                print("expression:",i['expression']['type'])
                print("gender:",i['gender']['type'])
                print("glasses:",i['glasses']['type'])
                j+=1
    myface_compare("5.jpg")
    

    返回示例

    在这里插入图片描述

    这里从返回结果中提取了face_token、年龄、beauty(样貌得分)、表情、性别、有无眼镜。

    这个API可以获取颜值得分哦,想要知道自己颜值能得多少分,人脸检测帮你检测,亲测可以使用。

    错误识别错误码

    请参考人脸识别错误码

    展开全文
  • 说明:这篇是写使用百度人脸识别API进行人脸相似度识别对比,如 给两个人物照片,判断是否是同一个人。简单的4步完成。 1,获取百度人脸识别API的API Key和Secret Key。 使用百度账号登录百度AI平台,网址:...
    说明:这篇是写使用百度人脸识别API进行人脸相似度识别对比,如 给两个人物照片,判断是否是同一个人。简单的4步完成。
    1,获取百度人脸识别API的API Key和Secret Key。(10分钟内完成)

    使用百度账号登录百度AI平台,网址:http://ai.baidu.com/tech/face,
    若没有直接注册一个账号。登录后需要点击“创建应用”填写命名一下,完成后返回,点击“管理应用”,就可以看到已经申请的[应用名称、AppID、API Key、Secret Key].

    2,获取Access Token

    1.向授权服务地址:https://aip.baidubce.com/oauth/2.0/token?发送请求 并在此URL后带上以下参数:
    · grant_type: 必须参数,固定为client_credentials;
    · client_id: 必须参数,应用的API Key;
    · client_secret: 必须参数,应用的Secret Key;
    例如:你申请的API Key是Va5yQRHlA4Fq5eR30vV4,
    Secret Key是0rDSjzQ20XUj5itV6WRtznPQSzr5pV,进行如下拼接:

    https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR30vV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pV
    此url 为向授权服务请求的完整地址,先命名为 api1
    

    2,获取access_token的完整内容

     response=requests.get(api1)
     print( response)
     # 打印结果如下:
     { "refresh_token":   "25.b55fe1d287227ca97aab219bb249b8ab.315360000.1798284651.282335-8574074",
    "expires_in": 2592000,
    "scope": "public wise_adapt",
    "session_key": "9mzdDZXu3dENdFZQurfg0Vz8slgSgvvOAUebNFzyzcpQ5EnbxbF+hfG9DQkpUVQdh4p6HbQcAiz5RmuBAja1JJGgIdJI",
    "access_token": "24.6c5e1ff107f0e8bcef8c46d3424a0e78.2592000.1485516651.282335-8574074",
    "session_secret": "dfac94a3489fe9fca7c3221cbf7525ff"      } 
    # 我们需要其中的 access_token 
    

    3, 人脸匹配相似度的地址:“https://aip.baidubce.com/rest/2.0/face/v3/match

    # 2,获取token值,拼接API
    import requests
    def get_token():
        response=requests.get(api1)
        access_token=eval(response.text)['access_token']   #eval函数将字符串转化为字典
        api2="https://aip.baidubce.com/rest/2.0/face/v3/match"+"?access_token="+access_token
        return api2
    
    3,读取图片数据
    import base64
    import json
    def read_img(img1,img2):                        #  两个图片参数
        with open(img1,'rb') as f:                  # 读取图片数据
            pic1=base64.b64encode(f.read())         # 图片数据编码为base64格式数据
        with open(img2,'rb') as f:
            pic2=base64.b64encode(f.read())
        params=json.dumps([                          # 将字典数据转化为字符串 
            {"image":str(pic1,"utf-8"),"image_type":'BASE64',"face_type":"LIVE"},
            {"image":str(pic2,"utf-8"),"image_type":'BASE64',"face_type":"IDCARD"}
        ])
        return params`在这里插入代码片`
    
    4,发起请求拿到对比结果
    def analyse_img(file1,file2):
        params=read_img(file1,file2)                 # 调用第一个函数的结果api
        api=get_token()                              # 调用第二个函数的图片数据
        content=requests.post(api,params).text       # 获取对比详细结果
        print(content)
        
    analyse_img("zly01.jpg","zly02.jpg"):            # 找的两张 赵丽颖的照片
      
    # 打印content内容如下:
    {"error_code":0,"error_msg":"SUCCESS","log_id":1345050733350687141,"timestamp":1553335068,"cached":0,
    "result":{"score":95.51683807,"face_list",[{"face_token":"938e0c197a7f53d9eced7551c6cd6c50"},{"face_token":"81ab41769b6fc5877d944415e380e326"}]}}
    # 我们需要的是"score":95.51683807",相似度95.5,可以确认是同一个人。
    

    找的图片:赵丽颖2张(zly01.jpg,zly02.jpg),刘亦菲一张(lyf01.jpg)
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    完整代码:
    import requests
    import base64
    import json
    # 1,准备好申请的人脸识别api,API Key, Secret Key
    api1=“https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR30vV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pV”
    # api2="https://aip.baidubce.com/rest/2.0/face/v3/match"
    
    # 2,获取token值,拼接API
    def get_token():
        response=requests.get(api1)
        access_token=eval(response.text)['access_token']
        api2="https://aip.baidubce.com/rest/2.0/face/v3/match"+"?access_token="+access_token
        return api2
    
    # 3,读取图片数据
    def read_img(img1,img2):
        with open(img1,'rb') as f:
            pic1=base64.b64encode(f.read())
        with open(img2,'rb') as f:
            pic2=base64.b64encode(f.read())
        params=json.dumps([
            {"image":str(pic1,"utf-8"),"image_type":'BASE64',"face_type":"LIVE"},
            {"image":str(pic2,"utf-8"),"image_type":'BASE64',"face_type":"IDCARD"}
        ])
        return params
    
    # 4,发起请求拿到对比结果
    def analyse_img(file1,file2):
        params=read_img(file1,file2)
        api=get_token()
        content=requests.post(api,params).text
        # print(content)
        score=eval(content)['result']['score']
        if score>80:
            print('图片识别相似度度为'+str(score)+',是同一人')
        else:
            print('图片识别相似度度为'+str(score)+',不是同一人')
    
    analyse_img("zly01.jpg","zly02.jpg")
    
    # 打印执行结果:图片识别相似度度为88.23068237,是同一人
    # 换图片zly02.jpg和lyf01.jpg:图片识别相似度度为29.28668785,不是同一人
    
    
    展开全文
  • 引言 两个人在一起久了,由于环境因素,行为习惯,无意识的模仿对方,两个人就会...点击控制台,登录百度账号,进入控制台,进入人脸识别。 温馨提示:账号与百度搜索、百度贴吧、百度云盘、百度知道、百度文库...

    引言

    两个人在一起久了,由于环境因素,行为习惯,无意识的模仿对方,两个人就会越来越像,这个程序就会告诉你,你和你的女神有多像。
    也可以测一下自己和自己心里最深处的那个人有多像,科技告诉你,ta是不是你的菜。

    实现原理

    百度AI

    网站:https://ai.baidu.com

    点击控制台,登录百度账号,进入控制台,进入人脸识别。

    温馨提示:账号与百度搜索、百度贴吧、百度云盘、百度知道、百度文库等产品账号通用。

    在这里插入图片描述
    在这里插入图片描述
    进入创建应用后,按照里面的步骤,创建一个人脸识别的应用。

    查看人脸对比API文档

    网站:https://cloud.baidu.com/doc/FACE/s/Lk37c1tpf

    向API服务地址使用POST发送请求,必须在URL中带上参数access_token。需要自行获取Access Token,Access Token可通过应用的API Key和Secret Key生成。对官方文档做个更改,更改过后access_token直接输出的就是所需要的access_token的值。

     # encoding:utf-8
    import requests 
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
    response = requests.get(host)
    if response:
        access_token = response.json()['access_token']
        print(access_token)
    

    注意:access_token的有效期为30天,切记需要每30天进行定期更换,或者每次请求都拉取新access_token。

    API中获取access_token的代码做了一些修改,使各位阅读者更快的获取到access_token的值

    Python代码

    可视化窗口代码

    注释可以说很全面了。

    from tkinter import *
    root=Tk()   # 实例化一个Tk
    root.title ('人脸相似度对比')    # 设置窗体的标题栏
    root.geometry('400x270+550+300')   #设置窗口的大小及初始位置
    label_1=Label(root, text='路径1:', font=('宋体',20))   #设置label键,显示文本
    label_1.grid(row=0,column=0)     #label位置
    entry_1=Entry(root,font=('宋体',20))    #单行文本框,输入路径
    entry_1.grid(row=0,column=1)     #确定文本框位置
    label_2=Label(root, text='路径2:', font=('宋体',20))
    label_2.grid(row=1,column=0)
    entry_2=Entry(root,font=('宋体',20))
    entry_2.grid(row=1,column=1)
    text = Text(root,width=55, height=6,font=('宋体',10))   #多行文本框,放置注意事项
    text.insert("insert","注意事项:"+"\r\n"+"路径格式:D:\pycharm\picture\XXX.jpg"+"\r\n"+"路径1:已知图片*_*_*路径2:需要对比的图片"+"\r\n"+"路径1与路径2图片路径可以互换*_*哈哈哈"+"\r\n"+"路径最好手动打出并且不能出现python内置函数,例如:反斜杠t、反斜杠1、反斜杠User,为什么不能出现反斜杠User我也不知道。")
    text.grid(row=2,columnspan=2)
    button=Button(root,text='对  比',font=('宋体',20),command =change)   #按钮
    button.grid(row=3,column=0,sticky=W)
    button1=Button(root,text='退  出',font=('宋体',20),command=root.quit)
    button1.grid(row=3,column=1,sticky=E)
    text = Listbox(root, font=('楷书', 16), width=35, heigh=3)   #显示输出结果
    # 定位 columnspan 组件横跨的列数
    text.grid(row=4, columnspan=2)
    root.mainloop()   #进入消息循环,必不可少
    

    运行代码后,就构建出这样的窗口。
    在这里插入图片描述

    路径转换代码

    def change():
        picture_1 = entry_1.get()   #从可视化代码的单行文本框获取路径信息
        path_1 = picture_1.replace('\\', '/')   #将"D:\pycharm\study\ceshi.jpg"中的'\'装换成'/'
        picture_2 = entry_2.get()
        path_2 = picture_2.replace('\\', '/')
        #异常处理,当路径中出现python关键字时可能无法转换
        try:
            img_base(path_1,path_2)  
        except:
            text.insert(END, '路径格式错误,请按注意事项检查。')  
            # 文本框滚动
            text.see(END)
            # 更新
            text.update()
    

    源代码

    GitHub地址:https://github.com/i7366464/python/blob/face_compare/face_compare3.0.py
    百度网盘:链接:https://pan.baidu.com/s/1qBKyI9x1l1kBTdvHr_7eRg
    提取码:9gxs
    百度网盘中提供普通版本。。

    效果

    路径格式正确运行结果

    在这里插入图片描述

    路径格式错误输出结果

    在这里插入图片描述

    结语

    代码中只进行了一种异常的处理,就是python无法将输入路径转换为python可识别路径的地异常。代码编写的比较理想化,就是路径所指向的图片中一定有人脸,但是事实不一定如此,可能画质较低,无法识别到人脸或者根本没有人脸,这种异常并未进行异常处理。

    展开全文
  • 说明:这篇是写使用百度人脸识别API进行人脸相似度识别对比,如 给两个人物照片,判断是否是同一个人。简单的4步完成。1,获取百度人脸识别API的API Key和Secret Key。(10分钟内完成)使用百度账号登录百度AI平台,...
  • Python人脸相似度对比

    2018-11-08 16:08:05
    Python直接使用模型,实现一个简易版的人脸对比,非常有趣!
  • 最近iPhone X博人眼球,其中最绝妙的设计就是人脸识别解锁,本文主要为大家详细介绍了Python人脸识别初探的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。1.利用opencv库sudo apt...
  • Python人脸识别和对比

    2021-03-04 15:38:11
    直接上代码 import face_recognition... 对比两张图片是否属于同一人 ''' face_encoding1 = [] is_face1 = face_recognition.face_encodings(face_recognition.load_image_file(face1)) if (len(is_face1) <= 0
  • 首先给大家推荐一本书:机器学习算法原理与编程实践 本文内容全部转载于书中,相当于一个读书笔记了吧绪论1992年麻省理工学院通过实验对比了基于结构特征的方法与基于模版匹配的方法,发现模版匹配的方法要优于基于...
  • 简单几步用Python实现人脸对比 说明:这是我暑假应实习单位需求使用百度api编写的一个简单的人脸相似度对比,其间处理了十万左右的照片,主要是为了判断是否为同一人 a.获取百度人脸识别api的api key 和secret key ...
  • 什么是人脸识别人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,054
精华内容 2,821
关键字:

python人脸对比

python 订阅