1. 人脸检测

  2. 人脸特征点提取

  3. 人脸对比,等于两张人脸对比,识别

封装的所有识别函数,直接看下面调用就好了。

# coding:utf-8
'''
本本次封装,我主要是做两张人脸对比。
就只人脸识别部分,简单应用。
# 调用注意事项,因为模型底层是外国人写的。所以路径图片名字千万别使用中文,这样它直接找不到
好像是OpenCV的问题吧,一直没有解决。中文他会乱码。真的坑。
''' import dlib
import cv2
import glob
import numpy as np class face_recognition:
'''
模型路径
predictor_path = "./face_model/shape_predictor_68_face_landmarks.dat"
face_rec_model_path = "./face_model/dlib_face_recognition_resnet_model_v1.dat" # 调用注意事项,因为模型底层是外国人写的。所以路径图片名字千万别使用中文,这样它直接找不到
好像是OpenCV的问题吧,一直没有解决。中文他会乱码。真的坑。
''' def __init__(self,predictor_path,face_rec_model_path):
self.predictor_path = predictor_path
self.face_rec_model_path = face_rec_model_path
self.detector = dlib.get_frontal_face_detector()
self.shape_predictor = dlib.shape_predictor(self.predictor_path)
self.face_rec_model = dlib.face_recognition_model_v1(self.face_rec_model_path) def face_detection(self,url_img_1,url_img_2):
img_path_list = [url_img_1,url_img_2]
dist = []
for img_path in img_path_list:
img = cv2.imread(img_path)
# 转换rgb顺序的颜色。
b, g, r = cv2.split(img)
img2 = cv2.merge([r, g, b])
# 检测人脸
faces = self.detector(img, 1)
if len(faces):
for index, face in enumerate(faces):
# # 提取68个特征点
shape = self.shape_predictor(img2, face)
# 计算人脸的128维的向量
face_descriptor = self.face_rec_model.compute_face_descriptor(img2, shape) dist.append(list(face_descriptor))
else:
pass
return dist # 欧式距离
def dist_o(self,dist_1,dist_2):
dis = np.sqrt(sum((np.array(dist_1)-np.array(dist_2))**2))
return dis def score(self,url_img_1,url_img_2):
url_img_1 = glob.glob(url_img_1)[0]
url_img_2 = glob.glob(url_img_2)[0]
data = self.face_detection(url_img_1,url_img_2)
goal = self.dist_o(data[0],data[1])
# 判断结果,如果goal小于0.6的话是同一个人,否则不是。我所用的是欧式距离判别
return 1-goal

  

调用封装识别函数进行,判别

# 调用 模型下载地址:http://dlib.net/files/
predictor_path = "./face_model/shape_predictor_68_face_landmarks.dat"
face_rec_model_path = "./face_model/dlib_face_recognition_resnet_model_v1.dat"
face_ = face_recognition(predictor_path,face_rec_model_path)
# img_1 = './faces/User.1.4.jpg'
# img_2 = './faces/User.1.46.jpg'
img_1 = './faces/fan.jpg'
img_2 = './faces/fan_2.jpg'
goal = face_.score(img_1,img_2)
print(goal)

  

这两张图片的距离为0.32左右,但是只要距离小于0.6就属于同一个人,所以对比结果还是比较好的。

关于dlib人脸对比,人脸识别的更多相关文章

  1. python3 百度AI-v3之 人脸对比 & 人脸检测 & 在线活体检测 接口

    #!/usr/bin/python3 # 百度人脸对比 & 人脸检测api-v3 import sys, tkinter.messagebox, ast import ssl, json,re ...

  2. Python3+Dlib实现简单人脸识别案例

    Python3+Dlib实现简单人脸识别案例 写在前边 很早很早之前,当我还是一个傻了吧唧的专科生的时候,我就听说过人脸识别,听说过算法,听说过人工智能,并且也出生牛犊不怕虎般的学习过TensorFl ...

  3. winds dlib人脸检测与识别库

    在人脸检测与人脸识别库中dlib库所谓是非常好的了.检测效果非常ok,下面我们来了解一下这个神奇的库吧! 第一步我们首先学会安装:dlib ,winds+pytho3.6.5  Windows不支持p ...

  4. 基于node.js人脸识别之人脸对比

    基于node.js人脸识别之人脸对比 Node.js简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...

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

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

  6. OpenCV 学习笔记 05 人脸检测和识别

    本节将介绍 Haar 级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 本章将考虑如何将多个  Haar 级联分类器构成一个层次结构,即一个分类器能识别整体区域(如人脸) ...

  7. python人脸对比

    import sys  import ssl  from urllib import request,parse    # client_id 为官网获取的AK, client_secret 为官网获 ...

  8. vs2017 dlib19.3 opencv3.41 C++ 环境配置 人脸特征点识别

    身为一个.net程序员经过两天的采坑终于把人脸特征检测的项目跑通了,然后本文将以dlib项目中人脸特征检测工程为例,讲解dlib与opencv 在vs2017 C++ 项目中的编译与运行路径配置. 1 ...

  9. 基于OpenCv的人脸检测、识别系统学习制作笔记之三

    1.在windows下编写人脸检测.识别系统.目前已完成:可利用摄像头提取图像,并将人脸检测出来,未进行识别. 2.在linux下进行编译在windows环境下已经能运行的代码. 为此进行了linux ...

随机推荐

  1. 掘金 Android 文章精选合集

    掘金 Android 文章精选合集 掘金官方 关注 2017.07.10 16:42* 字数 175276 阅读 50053评论 13喜欢 669 用两张图告诉你,为什么你的 App 会卡顿? - A ...

  2. jq 一个强悍的json格式化查看工具

    本文来自网易云社区 作者:娄超 在web 2.0时代json这种直观.灵活.高效数据格式基本已经成为一种标准格式,从各种web api,到配置文件,甚至现在连mysql都开始支持json作为数据类型. ...

  3. spring boot接口 支持https

    1.拥有证书,可自己生成测试用javatool生成 keytool -keystore [keyname].jks -genkey -alias tomcat -keyalg RSA 接下来输入相关信 ...

  4. MSSSQL 脚本收藏

    通配符 % : 表示0~n个任意字符 ­ _ : 表示单个任意字符 ­ [] :表示在括号里列出的任意字符 ­ [^]:表示任意个没有在括号中列出的字符 ­ 1.创建数据库 2. 创建架构 /**** ...

  5. Linux的常用目录学习笔记

    首先,先查看一下Linuxi的一级目录结构: ls: /:表示根目录,文件系统的入口,最高一级目录. bin和sbin:命令保存目录,bin是普通用户能,sbin是root用户用的:/bin存放着系统 ...

  6. JVM高级内存优化面试

    Sun HotSpot VM,是JDK和Open JDK中自带的虚拟机,也是目前使用范围最广的Java虚拟机. JVM内存分布程序计数器:是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指 ...

  7. 获取JavaScript对象的方法

    写定义一个对象,如var a = new Array(),debugger,然后执行F12控制台的开发者模式下,进入断点,断点里面 会显示所有的方法的. var a = new Array(); de ...

  8. 推荐一个好的Redis GUI 客户端工具

    推荐一个好的Redis GUI 客户端工具 Redis Desktop Manager  

  9. 大数据Hadoop-1

    大数据Hadoop学习之搭建hadoop平台(2.2)   关于大数据,一看就懂,一懂就懵. 一.概述 本文介绍如何搭建hadoop分布式集群环境,前面文章已经介绍了如何搭建hadoop单机环境和伪分 ...

  10. DataBase -- Operator

    TOP子句用于规定要返回的记录的数目. SELECT TOP number | percent column_name FROM table_name LIKE操作符用于在WHERE子句中搜索列的指定 ...