face_recognition

face_recognition 是github上一个非常有名气的人脸识别开源工具包,我们可以通过以下指令安装到python环境内

$ pip install face_recognition

加载人脸图片

image = face_recognition.load_image_file(src)

获取图片人脸定位[(top,right,bottom,left )]

face_locations = face_recognition.face_locations(image)
img  = image[face_locations[0][0]:face_locations[0][2],face_locations[0][3]:face_locations[0][1]]

对人脸图片进行编码

face_encoding = face_recognition.face_encodings(image, face_locations)[0]

说明:给定想要识别的人脸的图片并对其进行编码(每个人只需要一张),并将这些不同的人脸编码构建成一个列表。编码其实就是将人脸图片映射成一个128维的特征向量。

简单判断人脸相似度,内置函数

def theSamePerson(one_pic,two_pic):'''给定两张图片,判断是否是同一个人'''chenglong = face_recognition.load_image_file(one_pic)unknown_image = face_recognition.load_image_file(two_pic)biden_encoding = face_recognition.face_encodings(chenglong)[0]unknown_encoding = face_recognition.face_encodings(unknown_image)[0]results = face_recognition.compare_faces([biden_encoding], unknown_encoding,tolerance=0.35)print('results: ',results)return results[0]

自定义余弦相似度比较人脸相似度

def getFaceEncoding(src):image = face_recognition.load_image_file(src)face_locations = face_recognition.face_locations(image)img_  = image[face_locations[0][0]:face_locations[0][2],face_locations[0][3]:face_locations[0][1]]#人脸范围face_encoding = face_recognition.face_encodings(image, face_locations)[0]return face_encoding
def simcos(A,B):A=np.array(A)B=np.array(B)dist = np.linalg.norm(A - B) # 二范数sim = 1.0 / (1.0 + dist) #return sim
def main():src1,src2 = sys.argv[1],sys.argv[2]#两张图片路径xl1=getFaceEncoding(src1)xl2=getFaceEncoding(src2)face_distances = face_recognition.face_distance([xl1], xl2)value=simcos(xl1,xl2)if value>0.75:print(True)else:print(False)

完整代码

import face_recognition
import numpy as np
import sys
import cv2def display(img):#查看图片cv2.imshow("img",img)cv2.waitKey()cv2.destroyAllWindows()
def getFaceEncoding(src):image = face_recognition.load_image_file(src)face_locations = face_recognition.face_locations(image)img_  = image[face_locations[0][0]:face_locations[0][2],face_locations[0][3]:face_locations[0][1]]img_ = cv2.cvtColor(img_, cv2.COLOR_BGR2RGB)#display(img_)face_encoding = face_recognition.face_encodings(image, face_locations)[0]return face_encoding
def simcos(A,B):A=np.array(A)B=np.array(B)dist = np.linalg.norm(A - B) # 二范数sim = 1.0 / (1.0 + dist) #return simdef theSamePerson(one_pic,two_pic):'''给定两张图片,判断是否是同一个人'''chenglong = face_recognition.load_image_file(one_pic)unknown_image = face_recognition.load_image_file(two_pic)biden_encoding = face_recognition.face_encodings(chenglong)[0]unknown_encoding = face_recognition.face_encodings(unknown_image)[0]results = face_recognition.compare_faces([biden_encoding], unknown_encoding,tolerance=0.35)print('results: ',results)return results[0]def main():src1,src2 = sys.argv[1],sys.argv[2]#theSamePerson(src1,src2)xl1=getFaceEncoding(src1)xl2=getFaceEncoding(src2)face_distances = face_recognition.face_distance([xl1], xl2)value=simcos(xl1,xl2)if value>0.75:print(True)else:print(False)main()



说明:以上图片全部为stylegan生成的虚假图片。

延申

可以用作门禁系统或人脸登录方面

import face_recognition
import os
import numpy as npcache_dir = "output/cache"def save_file(vector,name):root = os.path.dirname(name)if(not os.path.exists(root)):os.mkdir(root)np.save(name,vector)def getFaceEncoding(src):name = "output/cache/" +os.path.basename(src).split(".")[0]image = face_recognition.load_image_file(src)face_locations = face_recognition.face_locations(image)face_encoding = face_recognition.face_encodings(image, face_locations)[0]save_file(face_encoding,name)return face_encodingdef theSamePerson(pic,cache_dir):'''给定两张图片,判断是否是同一个人'''pic1 = face_recognition.load_image_file(pic)face_locations = face_recognition.face_locations(pic1)face_encoding = face_recognition.face_encodings(pic1, face_locations)[0]all_meber = os.listdir(cache_dir)for meber in all_meber:current_name = meber.split(".")[0]current_file = cache_dir + "/" + mebercurrent_meber_encoding = np.load(current_file)results = face_recognition.compare_faces([face_encoding],current_meber_encoding,tolerance=0.35)if (results == [True]):return current_namereturn "not exists!"def main():#file = "output/jingjing.png"#getFaceEncoding(file)file1 = "output/image0000-target.png"name = theSamePerson(file1,cache_dir)print ("This meber is ",name)main()


思路:我们将人脸编码储存起来,建立人脸信息库。
随后我们给定一张图片进行测试。

face_recognition实现人脸相似度比较相关推荐

  1. C#打开摄像头后获取图片,调用face_recognition进行人脸识别

    运行效果如截图:左边和保存的图片做对比,打印相似度,部分打印内容为python中的打印输出,可以用来做结果判断.右边打开摄像头后,可以单张图片进行人脸识别,或者一直截图镜头中的图片进行比对.期中pyt ...

  2. 人脸识别python face_recognize_【python+face_recognition】人脸识别初始

    [python+face_recognition]人脸识别初始 发布时间:2018-09-01 12:03, 浏览次数:366 , 标签: python face recognition face_r ...

  3. python人脸识别对比_python 人脸对比--百度API人脸相似度识别(超简单)

    说明:这篇是写使用百度人脸识别API进行人脸相似度识别对比,如 给两个人物照片,判断是否是同一个人.简单的4步完成. 1,获取百度人脸识别API的API Key和Secret Key.(10分钟内完成 ...

  4. python中文相似度_python 人脸对比--百度API人脸相似度识别(超简单)-Go语言中文社区...

    说明:这篇是写使用百度人脸识别API进行人脸相似度识别对比,如 给两个人物照片,判断是否是同一个人.简单的4步完成. 1,获取百度人脸识别API的API Key和Secret Key.(10分钟内完成 ...

  5. 调包侠系列之—调用face_recognition进行人脸识别

    文章目录 face_recognition 是啥 face_recognition 安装与配置 安装dlib 检测人脸,并用框框框起来 众里寻他千百度,查看此人在不在 百变星君,美颜美图随心所欲 总结 ...

  6. Face_recognition与人脸识别解决方案

    Face_recognition 与人脸识别解决方案 很久之前做的,好像是从github上参考一老外的,用到了当前比较火的face_recognition第三方库,我在此基础上做了一些改进 现在可以在 ...

  7. CV之FR之MTCNN:基于TF框架利用MTCNN算法检测并对齐人脸图像进(人脸识别/人脸相似度)而得出人脸特征向量从而计算两张人脸图片距离案例应用之详细攻略

    CV之FR之MTCNN:基于TF框架利用MTCNN算法检测并对齐人脸图像进(人脸识别/人脸相似度)而得出人脸特征向量从而计算两张人脸图片距离案例应用之详细攻略 目录 基于TF框架利用MTCNN算法检测 ...

  8. Python 基于OpenCV+face_recognition实现人脸捕捉与人脸识别

    1.安装包依赖 pip install opencv-python pip install face-recognition 如果安装face_recognition过程中报错,提示:"CM ...

  9. 人工智能之基于face_recognition的人脸检测与识别

    不久乘高铁出行,看见高铁火车站已经实现了"刷脸进站",而且效率很高,很感兴趣,今天抽时间研究一下,其实没那么复杂. 我基本上是基于https://github.com/ageitg ...

  10. 人脸识别python face_recognize_python2.7使用face_recognition做人脸识别

    偶然看到一篇文章,说是可以实时人脸识别,很有兴趣就自己按照文章开始动手人脸识别,但是实现过程中遇到了几个问题这里做个总结,希望可以帮助到大家 安装face_recognition这个之前需要先安装编译 ...

最新文章

  1. android蓝牙4.0BLE
  2. 一个XOR问题的实例---神经网络的权重到底是如何变化的
  3. 关于Python编程的一些问答
  4. jQuery HighchartsTableHTML表格转Highcharts图表插件
  5. 2018-2019-1 20165315 实验三 实时系统
  6. [转贴]Ultimate List of Free Windows Software from Microsoft
  7. 从0到1写RT-Thread内核——临界段的保护
  8. Docker Dirty Cow逃逸
  9. java外部类_Java里什么叫内部类什么叫外部类
  10. 如何绘制逻辑图 — 5. 要素的属性:系统与模块
  11. 飞鸽传书:造假与成功
  12. 最近很火的桌面小猫代打器 人性化UI设置界面
  13. 《国民经济行业分类GB/T 4754—2017》官网下载地址
  14. matlab按图像边缘抠图_不会抠图?保姆级抠图教程!手把手教你抠图(二)
  15. linux下vi命令大全
  16. 各地的公安接口的配置说明书
  17. Springboot使用J2Cache,整合ehcache和redis缓存框架,实现两级缓存
  18. 收藏模板:开发工程师提测申请模板
  19. 指针的指针(简单易懂)
  20. 关于STM32L476位带操作的说明

热门文章

  1. 数据库之如何解决SQL Server 2008 R2连接不上服务器?
  2. 金融产品经理的能力修炼精进指南
  3. linux oracle 强制覆盖_赤兔Oracle数据库恢复软件下载-赤兔Oracle数据库恢复软件v11.6免费版...
  4. ie浏览器升级的正确姿势
  5. 安装ie9提示未能完成安装_ie11/ie10/ie9安装程序无法验证安装文件
  6. 免费录屏、直播推流软件之OBS Studio
  7. id导出pdf失败_InDesign 导出印刷用PDF时如何设置?
  8. 从DLL导出LIB文件
  9. matlab 实现批量修改文件后缀名 案例
  10. MySQL自动生成Oracle建表语句脚本