精华内容
下载资源
问答
  • 人脸相似度对比

    2018-09-09 11:28:49
    人脸对比,两张本地图片的对比,返回两张图片中人脸相似度
  • Python人脸相似度对比

    2018-11-08 16:08:05
    Python直接使用模型,实现一个简易版的人脸对比,非常有趣!
  • face++实现人脸相似度对比

    千次下载 热门讨论 2014-05-08 20:30:31
    通过比较两张人脸相似度判断是否是同一个人,博客说明:http://blog.csdn.net/zhong1113/article/details/25332893
  • 人脸相似度检测

    2019-02-26 17:28:11
    MICROSOFT 基础类库: 人脸相似度检测MFC 项目概述 =============================================================================== 应用程序向导已为您创建了这个 人脸相似度检测MFC 应用程序。此应用程序不仅...
  • 用Python实现一个简单的——人脸相似度对比

    万次阅读 多人点赞 2018-11-08 15:58:58
    近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等。...今天就和大家交流下如何实现一个简易版的人脸对比,非常有趣! 整体思路: 1、预先导入...

    近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等。总体来说,AI的门槛还是比较高,不仅要学会使用框架实现,更重要的是,需要有一定的数学基础,如线性代数,矩阵,微积分等。

    幸庆的是,国内外许多大神都已经给我们造好“轮子”,我们可以直接来使用某些模型。今天就和大家交流下如何实现一个简易版的人脸对比,非常有趣!

    整体思路:

    1、预先导入所需要的人脸识别模型;

    2、遍历循环识别文件夹里面的图片,让模型“记住”人物的样子;

    3、输入一张新的图像,与前一步文件夹里面的图片比对,返回最接近的结果。

    使用到的第三方模块和模型:

    1、模块:os,dlib,glob,numpy;

    2、模型:人脸关键点检测器,人脸识别模型。

    第一步:导入需要的模型。

    这里解释一下两个dat文件:

    它们的本质是参数值(即神经网络的权重)。人脸识别算是深度学习的一个应用,事先需要经过大量的人脸图像来训练。所以一开始我们需要去设计一个神经网络结构,来“记住”人类的脸。

    对于神经网络来说,即便是同样的结构,不同的参数也会导致识别的东西不一样。在这里,这两个参数文件就对应了不同的功能(它们对应的神经网络结构也不同):

    shape_predictor.dat这个是为了检测人脸的关键点,比如眼睛,嘴巴等等;dlib_face_recognition.dat是在前面检测关键点的基础上,生成人脸的特征值。

    所以后面使用dlib模块的时候,其实就是相当于,调用了某个神经网络结构,再把预先训练好的参数传给我们调用的神经网络。顺便提一下,在深度学习领域中,往往动不动会训练出一个上百M的参数模型出来,是很正常的事。

    import os,dlib,glob,numpy
    from skimage import io
    
    # 人脸关键点检测器
    predictor_path = "shape_predictor.dat"
    # 人脸识别模型、提取特征值
    face_rec_model_path = "dlib_face_recognition.dat"
    # 训练图像文件夹
    faces_folder_path ='train_images' 
    
    # 加载模型
    detector = dlib.get_frontal_face_detector()
    sp = dlib.shape_predictor(predictor_path)
    facerec = dlib.face_recognition_model_v1(face_rec_model_path)

    第二步:对训练集进行识别。

    在这一步中,我们要完成的是,对图片文件夹里面的人物图像,计算他们的人脸特征,并放到一个列表里面,为了后面可以和新的图像进行一个距离计算。关键地方会加上注释,应该不难理解。

    candidate = []         # 存放训练集人物名字
    descriptors = []       #存放训练集人物特征列表
    
    for f in glob.glob(os.path.join(faces_folder_path,"*.jpg")):
        print("正在处理: {}".format(f))
        img = io.imread(f)
        candidate.append(f.split('\\')[-1].split('.')[0])
        # 人脸检测
        dets = detector(img, 1)
        for k, d in enumerate(dets): 
            shape = sp(img, d)
            # 提取特征
            face_descriptor = facerec.compute_face_descriptor(img, shape)
            v = numpy.array(face_descriptor) 
            descriptors.append(v)
    
    print('识别训练完毕!')

    当你做完这一步之后,输出列表descriptors看一下,可以看到类似这样的数组,每一个数组代表的就是每一张图片的特征量(128维)。然后我们可以使用L2范式(欧式距离),来计算两者间的距离。

    举个例子,比如经过计算后,A的特征值是[x1,x2,x3],B的特征值是[y1,y2,y3], C的特征值是[z1,z2,z3]。

    那么由于A和B更接近,所以会认为A和B更像。想象一下极端情况,如果是同一个人的两张不同照片,那么它们的特征值是不是应该会几乎接近呢?知道了这一点,就可以继续往下走了。 

    第三步:处理待对比的图片。

    其实是同样的道理,如法炮制,目的就是算出一个特征值出来,所以和第二步差不多。然后再顺便计算出新图片和第二步中每一张图片的距离,再合成一个字典类型,排个序,选出最小值,搞定收工!

    try:
    ##    test_path=input('请输入要检测的图片的路径(记得加后缀哦):')
        img = io.imread(r".\test_images\test6.jpg")
        dets = detector(img, 1)
    except:
        print('输入路径有误,请检查!')
    
    dist = []
    for k, d in enumerate(dets):
        shape = sp(img, d)
        face_descriptor = facerec.compute_face_descriptor(img, shape)
        d_test = numpy.array(face_descriptor) 
        for i in descriptors:                #计算距离
            dist_ = numpy.linalg.norm(i-d_test)
            dist.append(dist_)
    
    # 训练集人物和距离组成一个字典
    c_d = dict(zip(candidate,dist))                
    cd_sorted = sorted(c_d.items(), key=lambda d:d[1])
    print ("识别到的人物最有可能是: ",cd_sorted[0][0])

    这里我用了一张“断水流大师兄”林国斌的照片,识别的结果是,果然,是最接近黎明了(嘻嘻,我爱黎明)。但如果你事先在训练图像集里面有放入林国斌的照片,那么出来的结果就是林国斌了。 

    为什么是黎明呢?我们看一下输入图片里的人物最后与每个明星的距离,输出打印一下:

    {'刘亦菲': 0.5269014581137407,

    '刘诗诗': 0.4779630331578229,

    '唐艺昕': 0.45967444611419184,

    '杨幂': 0.4753850256188804,

    '迪丽热巴': 0.5730399094704894,

    '郑秀妍': 0.40740137304879187,

    '郑秀晶': 0.45325515192940385,

    '郭富城': 0.7624925709626963,

    '黎明': 0.8925473299225084} 

    没错,他和黎明的距离是最小的,所以和他也最像了!

    源码及模型下载:https://download.csdn.net/download/m0_38106923/10772957

    拓展项目:Python+OpenCv实现AI人脸识别身份认证系统

    展开全文
  • 将人脸识别,人脸定位,人脸相似度对比,年龄,性别检测功能封装成REST API服务调用
  • 下方是人脸识别,还添加了画出人脸轮廓的正方形下方是人脸识别,还添加了画出人脸轮廓的正方形 import requests#网络访问控件 from json import JSONDecoder#互联网数据交换标准格式 import cv2 as cv#图像...

    转自https://blog.csdn.net/qq_38181012/article/details/81124217

    1. 使用face++,先获取key和secret
    2. 下方是人脸识别,还添加了画出人脸轮廓的正方形
    import requests#网络访问控件
    from json import JSONDecoder#互联网数据交换标准格式
    import cv2 as cv#图像处理控件
    
    http_url ="https://api-cn.faceplusplus.com/facepp/v3/detect"#face++apiDETECT模块
    key ="自己官网弄"#开发人员识别码
    secret ="同上"
    gender="gender,age"#性别变量
    filepath1 ="c:\\python\\image\\f2.jpg"#图像位置
    data = {"api_key":key, "api_secret": secret, "return_attributes":gender}
    #数据格式化准备发送到face,词典格式json
    
    files = {"image_file": open(filepath1, "rb")}#准备打开
    response = requests.post(http_url, data=data, files=files)#用post方式(还有get)发送数据到网站
    req_con = response.content.decode('utf-8')#网页解码
    req_dict = JSONDecoder().decode(req_con)#把json解码成python词典格式
    print(req_dict)
    w=req_dict["faces"][0]["face_rectangle"]["width"]
    t=req_dict["faces"][0]["face_rectangle"]["top"]
    l=req_dict["faces"][0]["face_rectangle"]["left"]
    h=req_dict["faces"][0]["face_rectangle"]["height"]
    src=cv.imread(filepath1)#打开jpg文件       
    cv.namedWindow('input_image', cv.WINDOW_NORMAL)#弹出窗口命名,窗口自动大小
    cv.rectangle(src,(l,t),(l+w,t+h), (255,0,0),1)#画框
    # height, width, channel=(360, 480, 3)
    h,w,c = src.shape
    cv.resizeWindow('input_image',int(w/3),int(h/3))
    cv.imshow('input_image', src)#显示图形
    #img: 图像,起始坐标,终点坐标,颜色,线宽。 
    cv.waitKey(0)#等键盘动作
    cv.destroyAllWindows() #  关闭所有窗口
    print(req_dict["faces"][0]["attributes"]["gender"]["value"])
    
    1. 人脸对比代码如下:
    import requests#网络访问控件
    from json import JSONDecoder#互联网数据交换标准格式
    import cv2 as cv#图像处理控件
     
    http_url ="https://api-cn.faceplusplus.com/facepp/v3/compare"#face++apiDETECT模块
    key =""#开发人员识别码
    secret =""
    image_file1="c:\\python\\image\\f1.jpg"
    image_file2="c:\\python\\image\\f2.jpg"#图像位置
    data = {"api_key":key, "api_secret": secret}
    #数据格式化准备发送到face,词典格式json
    files = {"image_file1": open(image_file1, "rb"),"image_file2": open(image_file2, "rb")}#准备打开
    response = requests.post(http_url, data=data, files=files)#用post方式(还有get)发送数据到网站
    req_con = response.content.decode('utf-8')#网页解码
    req_dict = JSONDecoder().decode(req_con)#把json解码成python词典格式
    print(req_dict)
     
    image1=cv.imread(image_file1)
    image2=cv.imread(image_file2)       
    cv.namedWindow('image1', cv.WINDOW_NORMAL)#弹出窗口命名,窗口自动大小
    cv.namedWindow('image2', cv.WINDOW_NORMAL)
    h1,w1,c1=image1.shape
    h2,w2,c2=image2.shape
    cv.resizeWindow('image1',int(w1/3),int(h1/3))
    cv.resizeWindow('image2',int(w2/3),int(h2/3))
    cv.moveWindow('image2',int(w1/3),0)
     
    cv.imshow('image1',image1)#显示图形
    cv.imshow('image2',image2)
     
    #img: 图像,起始坐标,终点坐标,颜色,线宽。 
    cv.waitKey(0)#等键盘动作
    cv.destroyAllWindows() #  关闭所有窗口
    
    
    展开全文
  • (本次所用结构与前两次不太一样,但是思路都一样 如果想用获取access_token的方法,可以参考其他文章: 视频人脸锁定、人脸融合、人数识别+标记) 3.解析网络回执 pic1 = "T.jpg" pic2 = "Y.jpg" client = get_...

    一.设计流程
    1.导入模块

    from aip import AipFace
    import base64
    import matplotlib.pyplot as plt
    

    Aipface模块:调用百度AipFace做人脸检测
    base64模块:对图片数据进行base64格式转码
    plt模块:“plt”的设计是为了在不了解python的情况下使用matplotlib轻松绘制科学图形。当前实现将使用json配置文件。

    2.网页请求

    """ 你的APPID,API_KEY和SECRET_KEY """
    APP_ID = '【】'  # 你的APP_ID
    API_KEY = '【】'  # 你的API_KEY
    SECRET_KEY = '【】'  # 你的SECRET_KEY
    
    
    # 封装成函数,返回获取的client对象
    def get_client(APP_ID, API_KEY, SECRET_KEY):
        """
        返回client对象
        :param APP_ID:
        :param API_KEY:
        :param SECRET_KEY:
        :return:
        """
        return AipFace(APP_ID, API_KEY, SECRET_KEY)
    

    这块直接调用AipFace()函数,直接获取网络应答。
    (本次所用结构与前两次不太一样,但是思路都一样
    如果想用获取access_token的方法,可以参考其他文章:
    视频人脸锁定人脸融合人数识别+标记

    3.解析网络回执

    pic1 = "T.jpg"
    pic2 = "Y.jpg"
    client = get_client(APP_ID, API_KEY, SECRET_KEY)
    result = client.match([
        {
            'image': str(base64.b64encode(open(pic1, 'rb').read()), 'utf-8'),
            'image_type': 'BASE64',
        },
        {
            'image': str(base64.b64encode(open(pic2, 'rb').read()), 'utf-8'),
            'image_type': 'BASE64',
        }
    ])
    print(result)
    
    if result['error_msg'] == 'SUCCESS':
        score = result['result']['score']
        print('两张图片相似度:', score)
    else:
        print('错误信息:', result['error_msg'])
    
    pc1 = plt.imread(pic1)
    pc2 = plt.imread(pic2)
    plt.imshow(pc1)
    plt.show()
    plt.imshow(pc2)
    plt.show()
    

    二.结果测试
    在这里插入图片描述

    三.总结

    展开全文
  • python 人脸对比--百度API人脸相似度识别(超简单)

    万次阅读 多人点赞 2019-03-23 22:08:56
    说明:这篇是写使用百度人脸识别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,不是同一人
    
    
    展开全文
  • java实现OpenCV 4.1.0人脸相似度对比

    千次阅读 2019-12-10 14:55:04
    直方图相似度匹配 * */ public class FaceCompare { // 初始化人脸探测器 static CascadeClassifier faceDetector; static { //路径不能包含中文 linux使用libopencv_java410.so String opencvDllName = ...
  • 本地化人脸相似度比对软件是一款专业的人脸相似度对比软件,使用简单,只要在本地选择两张需要对比相似度的人脸图片即可看到相似度,不需要网络,完全可以脱机使用,需要的朋友欢迎前来下载体验! 本地化人脸相似度...
  • face_recognition实现人脸相似度比较

    千次阅读 2021-10-29 14:54:56
    face_recognition 是github上一个非常有名气的人脸识别开源工具包,我们可以通过以下指令安装到python环境内 $ pip install face_recognition 加载人脸图片 image = face_recognition.load_image_file(src) 获取...
  • #将人脸框出来 face_rectangle_1 = req_dict['faces1'][0]['face_rectangle'] # print(face_rectangle_1) face_rectangle_2 = req_dict['faces2'][0]['face_rectangle'] img1 = cv2.imread(faceId1) img2 = cv2....
  • OpenCV识别出两张图片的人脸,并比较出两张人脸相似度,并给出相似值。 包含完整的工程文件,可立即运行!!! 用facedetect功能将两张图片中的人脸检测出来 将人脸部分的图片剪切出来,存到两张只有人脸的图片...
  • 终于到了有实际应用的功能了,有2张图片,里面各有一个人脸,我的目的是比较这两个人脸的相似度,这里用到了facedetect的功能,还有图像转换,图像剪切,以及直方图的比较。具体流程是:  1。分别用facedetect功能...
  • 声纹相似度对比vb源代码
  • 生活中我们经常会看到一些测试自己和明星的相似度啊,或者小情侣有没有夫妻相啊……之类的趣味小测试。其实这些归根结底都是对两张人脸图片相似度的判断。那么,是否可以不下载安装软件就...l 上传两张需要对比相似度
  • c#图像相似度对比

    2019-06-24 11:43:59
    通过网上的例子,加上用灰度直方图方法计算相似度的算法,写了一个例子,经测试效果达到百分之95准确率
  • faceNet : 实现相似度计算 第一步:实现人脸检测功能(MTcnn) 最开始的时候使用的是opencv自带的人脸级联分类器进行人脸检测,但是 后来查一下资料说MTcnn能够实现的效果更好 ,所以尝试着用一下。 对于MTcnn ...
  • 人脸识别相似度计算方法

    万次阅读 2019-04-14 01:13:13
    人脸识别中,我们通常采用欧氏距离和余弦距离来衡量人脸特征的相似度,判别是否为同一个人。 欧氏距离 欧氏距离比较简单,采用欧氏公式直接计算两个点之间的距离,如下: 代码: diff = np.subtract...
  • Fisherfaces使用LDA(Linear Discriminant Analysis,线性判别分析)实现人脸识别。线性判别识别最早由Fisher在1936年提出,是一种经典的线性学习方法,也称为“Fisher判别方法”。 一、基本原理 线性判别分析在对特征...
  • 利用OpenCvSharp实现感知哈希算法进行图片相似度对比及Stitcher类图像拼接生成全景图像 vs2015环境
  • 利用百度开发者平台调用api将本地图片对比之后输出两张图片的相似度
  • 人脸识别7-人脸图片相似度

    千次阅读 2018-10-19 11:48:21
    人脸图片相似度  两张图片相似度比对如“人证合一”场景,其实并不是直接对图片数据进行比较,而是对两张图片分别进行人脸建模特征提取,然后把两个特征进行相似度比对。 用户输入的图片不一定是正面人脸,所以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,614
精华内容 1,445
关键字:

人脸相似度对比