0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用最快的速度学会Dlib人脸识别开发?

WpOh_rgznai100 来源:YXQ 2019-06-13 11:50 次阅读

Dlib是一个深度学习开源工具,基于C++开发,也支持Python开发接口,功能类似于TensorFlow与PyTorch。但是由于Dlib对于人脸特征提取支持很好,有很多训练好的人脸特征提取模型供开发者使用,所以Dlib人脸识别开发很适合做人脸项目开发。

上面所说的人脸识别开发,主要是指人脸验证,就是输入两张人脸照片,系统会对比输出0或者1,代表判断是否是同一个人。一般的人脸识别开发可以简单分为1.人脸特征建模与2.使用人脸特征模型进行验证(其实还应包括人脸对齐等,这些也可以划分到1中)。使用Dlib进行开发时,我们直接可以使用训练好的人脸特征提取模型,主要的工作就变成了如何进行人脸的验证。

人脸的验证其实就是计算相似度,同一个人的相似度就会大,不同的人就会比较小。可以采用余弦相似度或者欧式距离来计算相似度。其中余弦相似度就是计算角度,欧式距离就是指平方差。都可以用来表示两个特征的相似度(距离)。

2.环境搭建

安装可以参考我的这篇博客:[深度学习工具]·极简安装Dlib人脸识别库,下面说一下需要注意的点::

此博文针对Windows10安装,其他平台可以仿照这个步骤来安装

安装Miniconda

使用conda指令来安装Dlib库,使用Miniconda与Anaconda都可以,我习惯用Miniconda,简单占用内存小。

推荐使用清华源,下载安装,选择合适的平台版本。python==3.6

安装dlib

注意一定要以管理员身份进入CMD,执行(如果是Linux Mac 就使用 sudo)

conda install -c conda-forge dlib

需要imageio 库,可以使用下述命令安装

conda install imageio

3.开发实战

1.实现人脸检测标记

face_test.pyimport dlibfrom imageio import imreadimport globdetector = dlib.get_frontal_face_detector()win = dlib.image_window()path = “f1.jpg”img = imread(path)dets = detector(img)print(‘检测到了 %d 个人脸’ % len(dets))for i, d in enumerate(dets):print(‘- %d:Left %d Top %d Right %d Bottom %d’ % (i, d.left(), d.top(), d.right(), d.bottom()))win.clear_overlay()win.set_image(img)win.add_overlay(dets)dlib.hit_enter_to_continue()

代码很简单,通过imread读取照片,然后进行检测,输出结果为dets的list,有几张人脸就会有几个item, 每个item都有.left(), .top(), .right(), .bottom()四个元素,代表人脸框的四个边界位置。最后通过win.add_overlay(dets)可以将标记的框显示在原图上。

原始照片

输出照片

其实我们就可以使用这个功能做一个简单的应用,用来检测图片或者视频中人脸的个数。

2.人脸特征点提取

在实战1的基础上添加人脸特征提取功能。

import dlibfrom imageio import imreadimport globdetector = dlib.get_frontal_face_detector()win = dlib.image_window()predictor_path = ‘shape_predictor_68_face_landmarks.dat’predictor = dlib.shape_predictor(predictor_path)path = “f2.jpg”img = imread(path)dets = detector(img)print(‘检测到了 %d 个人脸’ % len(dets))for i, d in enumerate(dets):print(‘- %d: Left %d Top %d Right %d Bottom %d’ % (i, d.left(), d.top(), d.right(), d.bottom()))shape = predictor(img, d) # 第 0 个点和第 1 个点的坐标print(‘Part 0: {}, Part 1: {}’.format(shape.part(0), shape.part(1)))win.clear_overlay()win.set_image(img)win.add_overlay(dets)win.add_overlay(shape)dlib.hit_enter_to_continue()

这段代码就是在test.py基础上加入了shape_predictor功能,使之可以在检测出人脸基础上,找到人脸的68个特征点。反映在图中就是蓝色的线。

原始图片

输出图片

注意运行这段代码需要这个文件predictor_path = ‘shape_predictor_68_face_landmarks.dat’,我会放在我的github中,方便大家下载使用。

3.人脸识别验证

在第二步的基础上,我们再进一步,实现将人脸提取为特征向量,从而我们就可以对特征向量进行比对来实现人脸的验证,这里采用的是对比欧式距离的方法。

face_recognition.pyimport dlibfrom imageio import imreadimport globimport numpy as npdetector = dlib.get_frontal_face_detector()predictor_path = ‘shape_predictor_68_face_landmarks.dat’predictor = dlib.shape_predictor(predictor_path)face_rec_model_path = ‘dlib_face_recognition_resnet_model_v1.dat’facerec = dlib.face_recognition_model_v1(face_rec_model_path)def get_feature(path):img = imread(path)dets = detector(img)print(‘检测到了 %d 个人脸’ % len(dets))# 这里假设每张图只有一个人脸shape = predictor(img, dets[0])face_vector = facerec.compute_face_descriptor(img, shape)return(face_vector)def distance(a,b):a,b = np.array(a), np.array(b)sub = np.sum((a-b)**2)add = (np.sum(a**2)+np.sum(b**2))/2.return sub/addpath_lists1 = [“f1.jpg”,“f2.jpg”]path_lists2 = [“赵丽颖照片.jpg”,“赵丽颖测试.jpg”]feature_lists1 = [get_feature(path) for path in path_lists1]feature_lists2 = [get_feature(path) for path in path_lists2]print(“feature 1 shape”,feature_lists1[0].shape)out1 = distance(feature_lists1[0],feature_lists1[1])out2 = distance(feature_lists2[0],feature_lists2[1])print(“diff distance is”,out1)print(“same distance is”,out2)out1 = distance(feature_lists1[0],feature_lists1[1])out2 = distance(feature_lists2[0],feature_lists2[1])

输出结果

检测到了 1 个人脸检测到了 1 个人脸检测到了 1 个人脸检测到了 1 个人脸feature 1 shape (128, 1)diff distance is 0.254767715912same distance is 0.0620976363391

我们可以看出,每张人脸都被提取为了128维的向量,我们可以理解为128维的坐标(xyz是三维,128维就是有128个轴组成),我们下面需要做的就是计算两个特征的距离,设定好合适的阈值,小于这个阈值则识别为同一个人。代码正确运行需要这个文件face_rec_model_path = ‘dlib_face_recognition_resnet_model_v1.dat’,我已经放在自己的github(https://github.com/xiaosongshine/dlib_face_recognition)中,方便大家使用。

我们从上面测试的结果可以看出,不同的距离为0.25,同一个人为0.06,阈值就可以先设置为其间的一个值。我这里先设置为0.09,这个阈值也是需要大量数据来计算的,选择的准则为使错误识别为最低。

下面我们把阈值设置为0.09,来测试系统能否区分出不同的人:在face_recognition.py加入下面代码

def classifier(a,b,t = 0.09):if(distance(a,b)《=t): ret = Trueelse : ret = Falsereturn(ret)print(“f1 is 赵丽颖”,classifier(feature_lists1[0],feature_lists2[1]))print(“f2 is 赵丽颖”,classifier(feature_lists1[1],feature_lists2[1]))print(“赵丽颖照片.jpg is 赵丽颖测试.jpg”,classifier(feature_lists2[0],feature_lists2[1]))

输出结果

f1 is 赵丽颖 Falsef2 is 赵丽颖 False赵丽颖照片.jpg is 赵丽颖测试.jpg True

从上面可以看出,已基本满足对人脸区分的功能,如果如要实用化则需要继续调优阈值与代码,调优的准则就是选择合适的阈值使错误识别为最低。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人脸识别
    +关注

    关注

    76

    文章

    3954

    浏览量

    80555
  • 深度学习
    +关注

    关注

    73

    文章

    5236

    浏览量

    119900

原文标题:实战 | 如何用最快的速度学会Dlib人脸识别开发?

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Firefly 百度人脸识别开发套件

    `Firefly推出了百度人脸识别套件,基于Firefly高性能主板,融合百度AI精准的离线人脸识别技术,集算法与软硬件为一体的开发平台。仅
    发表于 07-25 10:19

    【百度人脸识别开发套件】开放人脸识别APP及SDK,加速二次开发进程

    百度人脸识别套件是集算法与软硬件为一体的一站式开发套件,目前人脸识别APP及SDK已开放,助力企业二次
    发表于 08-10 15:31

    请问君正X1830人脸识别开发板上的双摄像头是什么型号?

    `请问君正X1830人脸识别开发板上的双摄像头是什么型号?`
    发表于 05-29 16:11

    使用君正x1830人脸识别开发板做条码识别,如何选择sdk?

    使用君正x1830人脸识别开发板做条码识别,如何选择sdk?还有音频播放怎么使用?
    发表于 06-01 09:41

    疯壳AI语音及人脸识别开发实战 Ⅰ 快速上手

    疯壳AI语音及人脸识别开发实战 Ⅰ 快速上手
    发表于 11-05 16:32

    在x2000人脸识别开发套件上,要使用板载的芯片和环境,应该用什么方式登陆系统?

    在x2000人脸识别开发套件上,要使用板载的芯片和环境,应该用什么方式登陆系统?
    发表于 12-17 15:15

    X2000人脸识别开发套件,编译完怎么安装进设备中?

    X2000人脸识别开发套件,编译完怎么安装进设备中?
    发表于 12-17 15:17

    dlib实现人脸识别的技巧

    很多人都认为人脸识别是一项非常难以实现的工作,看到名字就害怕,然后心怀忐忑到网上一搜,看到网上N页的教程立马就放弃了。这些人里包括曾经的我自己。其实如果如果你不是非要深究其中的原理,只是要实现这一工作的话,人脸
    的头像 发表于 11-01 16:45 2.6w次阅读

    何用40行代码实现人脸识别

    Dlib里面有人脸检测器,有训练好的人脸关键点检测器,也有训练好的人脸识别模型。
    的头像 发表于 07-15 09:16 4601次阅读

    人脸识别开始应用在更多领域

    人脸识别开始应用在更多领域
    发表于 03-22 11:06 1586次阅读

    firefly百度人脸识别开发套件介绍

    集百度人脸识别算法与软硬件为一体的人脸识别套件,可接入单目摄像头、双目摄像头、结构光摄像头,能快速实现活体识别
    的头像 发表于 11-05 15:37 2012次阅读
    firefly百度<b class='flag-5'>人脸</b><b class='flag-5'>识别开发</b>套件介绍

    人脸表情识别技术是怎样的

    对于人脸表情的进行识别,在娱乐、人机等领域中带来更多的人脸识别开发应用。
    发表于 04-22 10:47 2059次阅读

    人脸追踪、双目活体对齐……系统梳理人脸识别开发的硬核技巧

    识别算法在实际部署中存在一些编程开发策略,能对识别效果和识别速度产生显著影响。虹软视觉开放平台推出的从零学习
    的头像 发表于 10-16 11:43 1183次阅读

    音诺恒科技人脸识别开发套件

    人脸识别开发套件是一款集摄像头、开发板、高清屏幕、SDK为一体的人脸套件,以帮助产品商、开发者加速软硬件方案验证及选型,缩短产品
    的头像 发表于 04-24 15:05 455次阅读
    音诺恒科技<b class='flag-5'>人脸</b><b class='flag-5'>识别开发</b>套件

    音诺恒科技人脸识别开发套件

    音诺恒科技人脸识别开发套件是一款集摄像头、开发板、高清屏幕、SDK为一体的人脸套件,以帮助产品商、开发者加速软硬件方案验证及选型,缩短产品
    的头像 发表于 10-14 17:23 597次阅读
    音诺恒科技<b class='flag-5'>人脸</b><b class='flag-5'>识别开发</b>套件