如何线上部署用python基于dlib写的人脸识别算法

author author     2023-03-09     636

关键词:

python使用dlib进行人脸检测与人脸关键点标记

Dlib简介:

首先给大家介绍一下Dlib

Dlib是一个跨平台的C++公共库,除了线程支持,网络支持,提供测试以及大量工具等等优点,Dlib还是一个强大的机器学习的C++库,包含了许多机器学习常用的算法。同时支持大量的数值算法如矩阵、大整数、随机数运算等等。

Dlib同时还包含了大量的图形模型算法。

最重要的是Dlib的文档和例子都非常详细。

Dlib主页:

这篇博客所述的人脸标记的算法也是来自Dlib库,Dlib实现了One Millisecond Face Alignment with an Ensemble of Regression Trees中的算法

这篇论文非常出名,在谷歌上打上One Millisecond就会自动补全,是CVPR 2014(国际计算机视觉与模式识别会议)上的一篇国际顶级水平的论文。毫秒级别就可以实现相当准确的人脸标记,包括一些半侧脸,脸很不清楚的情况,论文本身的算法十分复杂,感兴趣的同学可以下载看看。

Dlib实现了这篇最新论文的算法,所以Dlib的人脸标记算法是十分先进的,而且Dlib自带的人脸检测库也很准确,我们项目受到硬件所限,摄像头拍摄到的画面比较模糊,而在这种情况下之前尝试了几个人脸库,识别率都非常的低,而Dlib的效果简直出乎意料。

相对于C++我还是比较喜欢使用python,同时Dlib也是支持python的,只是在配置的时候碰了不少钉子,网上大部分的Dlib资料都是针对于C++的,我好不容易才配置好了python的dlib,这里分享给大家:

Dlib for python 配置:

因为是用python去开发计算机视觉方面的东西,python的这些科学计算库是必不可少的,这里我把常用的科学计算库的安装也涵盖在内了,已经安装过这些库的同学就可以忽略了。

我的环境是Ubuntu14.04:

大家都知道Ubuntu是自带python2.7的,而且很多Ubuntu系统软件都是基于python2.7的,有一次我系统的python版本乱了,我脑残的想把python2.7卸载了重装,然后……好像是提醒我要卸载几千个软件来着,没看好直接回车了,等我反应过来Ctrl + C 的时候系统已经没了一半了…

所以我发现想要搞崩系统,这句话比rm -rf 还给力…

sudo apt-get remove python2.71

首先安装两个python第三方库的下载安装工具,ubuntu14.04好像是预装了easy_install

以下过程都是在终端中进行:

1.安装pip

sudo apt-get install python-pip1

2.安装easy-install

sudo apt-get install python-setuptools1

3.测试一下easy_install

有时候系统环境复杂了,安装的时候会安装到别的python版本上,这就麻烦了,所以还是谨慎一点测试一下,这里安装一个我之前在博客中提到的可以模拟浏览器的第三方python库测试一下。

sudo easy_install Mechanize1

4.测试安装是否成功

在终端输入python进入python shell

python1

进入python shell后import一下刚安装的mechanize

>>>import mechanize1

没有报错,就是安装成功了,如果说没有找到,那可能就是安装到别的python版本的路径了。

同时也测试一下PIL这个基础库

>>>import PIL1

没有报错的话,说明PIL已经被预装过了

5.安装numpy

接下来安装numpy

首先需要安装python-dev才可以编译之后的扩展库

sudo apt-get install python-dev1

之后就可以用easy-install 安装numpy了

sudo easy_install numpy1

这里有时候用easy-install 安装numpy下载的时候会卡住,那就只能用 apt-get 来安装了:

sudo apt-get install numpy1

不推荐这样安装的原因就是系统环境或者说python版本多了之后,直接apt-get安装numpy很有可能不知道装到哪个版本去了,然后就很麻烦了,我有好几次遇到这个问题,不知道是运气问题还是什么,所以风险还是很大的,所以还是尽量用easy-install来安装。

同样import numpy 进行测试

python


>>>import numpy1234

没有报错的话就是成功了

下面的安装过程同理,我就从简写了,大家自己每步别忘了测试一下

6.安装scipy

sudo apt-get install python-scipy1

7.安装matplotlib

sudo apt-get install python-matplotlib1

8.安装dlib

我当时安装dlib的过程简直太艰辛,网上各种说不知道怎么配,配不好,我基本把stackoverflow上的方法试了个遍,才最终成功编译出来并且导入,不过听说18.18更新之后有了setup.py,那真是极好的,18.18我没有亲自配过也不能乱说,这里给大家分享我配置18.17的过程吧:

1.首先必须安装libboost,不然是不能使用.so库的

sudo apt-get install libboost-python-dev cmake1

2.到Dlib的官网上下载dlib,会下载下来一个压缩包,里面有C++版的dlib库以及例子文档,Python dlib库的代码例子等等

我使用的版本是dlib-18.17,大家也可以在我这里下载:

之后进入python_examples下使用bat文件进行编译,编译需要先安装libboost-python-dev和cmake

cd to dlib-18.17/python_examples

./compile_dlib_python_module.bat 123

之后会得到一个dlib.so,复制到dist-packages目录下即可使用

这里大家也可以直接用我编译好的.so库,但是也必须安装libboost才可以,不然python是不能调用so库的,下载地址:

将.so复制到dist-packages目录下

sudo cp dlib.so /usr/local/lib/python2.7/dist-packages/1

最新的dlib18.18好像就没有这个bat文件了,取而代之的是一个setup文件,那么安装起来应该就没有这么麻烦了,大家可以去直接安装18.18,也可以直接下载复制我的.so库,这两种方法应该都不麻烦~

有时候还会需要下面这两个库,建议大家一并安装一下

9.安装skimage

sudo apt-get install python-skimage1

10.安装imtools

sudo easy_install imtools1

Dlib face landmarks Demo

环境配置结束之后,我们首先看一下dlib提供的示例程序

1.人脸检测

dlib-18.17/python_examples/face_detector.py 源程序:

#!/usr/bin/python# The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt##   This example program shows how to find frontal human faces in an image.  In#   particular, it shows how you can take a list of images from the command#   line and display each on the screen with red boxes overlaid on each human#   face.##   The examples/faces folder contains some jpg images of people.  You can run#   this program on them and see the detections by executing the#   following command:#       ./face_detector.py ../examples/faces/*.jpg##   This face detector is made using the now classic Histogram of Oriented#   Gradients (HOG) feature combined with a linear classifier, an image#   pyramid, and sliding window detection scheme.  This type of object detector#   is fairly general and capable of detecting many types of semi-rigid objects#   in addition to human faces.  Therefore, if you are interested in making#   your own object detectors then read the train_object_detector.py example#   program.  ### COMPILING THE DLIB PYTHON INTERFACE#   Dlib comes with a compiled python interface for python 2.7 on MS Windows. If#   you are using another python version or operating system then you need to#   compile the dlib python interface before you can use this file.  To do this,#   run compile_dlib_python_module.bat.  This should work on any operating#   system so long as you have CMake and boost-python installed.#   On Ubuntu, this can be done easily by running the command:#       sudo apt-get install libboost-python-dev cmake##   Also note that this example requires scikit-image which can be installed#   via the command:#       pip install -U scikit-image#   Or downloaded from . import sys

import dlib

from skimage import io

detector = dlib.get_frontal_face_detector()

win = dlib.image_window()

print("a");for f in sys.argv[1:]:

print("a");

print("Processing file: ".format(f))
img = io.imread(f)
# The 1 in the second argument indicates that we should upsample the image
# 1 time.  This will make everything bigger and allow us to detect more
# faces.
dets = detector(img, 1)
print("Number of faces detected: ".format(len(dets)))    for i, d in enumerate(dets):
print("Detection : Left: Top: Right: Bottom: ".format(
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()# Finally, if you really want to you can ask the detector to tell you the score# for each detection.  The score is bigger for more confident detections.# Also, the idx tells you which of the face sub-detectors matched.  This can be# used to broadly identify faces in different orientations.if (len(sys.argv[1:]) > 0):
img = io.imread(sys.argv[1])
dets, scores, idx = detector.run(img, 1)    for i, d in enumerate(dets):
print("Detection , score: , face_type:".format(
d, scores[i], idx[i]))123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

我把源代码精简了一下,加了一下注释: face_detector0.1.py

# -*- coding: utf-8 -*-import sys

import dlib

from skimage import io#使用dlib自带的frontal_face_detector作为我们的特征提取器detector = dlib.get_frontal_face_detector()#使用dlib提供的图片窗口win = dlib.image_window()#sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始向后依次获取图片路径for f in sys.argv[1:]:    #输出目前处理的图片地址
print("Processing file: ".format(f))    #使用skimage的io读取图片
img = io.imread(f)    #使用detector进行人脸检测 dets为返回的结果
dets = detector(img, 1)    #dets的元素个数即为脸的个数
print("Number of faces detected: ".format(len(dets)))    #使用enumerate 函数遍历序列中的元素以及它们的下标
#下标i即为人脸序号
#left:人脸左边距离图片左边界的距离 ;right:人脸右边距离图片左边界的距离
#top:人脸上边距离图片上边界的距离 ;bottom:人脸下边距离图片上边界的距离
for i, d in enumerate(dets):
print("dets".format(d))
print("Detection : Left: Top: Right: Bottom: "
.format( i, d.left(), d.top(), d.right(), d.bottom()))    #也可以获取比较全面的信息,如获取人脸与detector的匹配程度
dets, scores, idx = detector.run(img, 1)
for i, d in enumerate(dets):
print("Detection , dets,score: , face_type:".format( i, d, scores[i], idx[i]))    

#绘制图片(dlib的ui库可以直接绘制dets)
win.set_image(img)
win.add_overlay(dets)    #等待点击
dlib.hit_enter_to_continue()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950

分别测试了一个人脸的和多个人脸的,以下是运行结果:

运行的时候把图片文件路径加到后面就好了

python face_detector0.1.py ./data/3.jpg12

一张脸的:

两张脸的:

这里可以看出侧脸与detector的匹配度要比正脸小的很多

2.人脸关键点提取

人脸检测我们使用了dlib自带的人脸检测器(detector),关键点提取需要一个特征提取器(predictor),为了构建特征提取器,预训练模型必不可少。

除了自行进行训练外,还可以使用官方提供的一个模型。该模型可从dlib sourceforge库下载:

arks.dat.bz2

也可以从我的连接下载:

这个库支持68个关键点的提取,一般来说也够用了,如果需要更多的特征点就要自己去训练了。

dlib-18.17/python_examples/face_landmark_detection.py 源程序:

#!/usr/bin/python# The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt##   This example program shows how to find frontal human faces in an image and#   estimate their pose.  The pose takes the form of 68 landmarks.  These are#   points on the face such as the corners of the mouth, along the eyebrows, on#   the eyes, and so forth.##   This face detector is made using the classic Histogram of Oriented#   Gradients (HOG) feature combined with a linear

参考技术A

dlib的安装很头疼我自己折腾了好几星期才成功 要讲的话很多所以写在了word里

链接:https://pan.baidu.com/s/1J-5W__7xJ1PPHv549aqZQQ

 密码:w74z

基于python_opencv人脸录入识别系统(应用dlib机器学习库)(代码片段)

基于python_opencv人脸录入、识别系统(应用dlib机器学习库)近几年应用opencv机器学习方法识别人脸的技术成为了热潮,本人根据当今的识别技术与方法,历时四个多月开发出一套基于dlib机器学习库的识别项目。希... 查看详情

基于opencv的人脸识别自助商店(源码&部署视频)(代码片段)

...[项目分享]基于OpenCV的人脸识别自助商店(源码&部署视频)_哔哩哔哩_bilibili3.效果展示4.第三方包的安装opencv的安装,输入:pipinstallopencv-python。注:numpy与OpenCV绑定安装,无需自己输入命令。pillow的... 查看详情

用dlib进行简单的人脸特征提取特征向量到csv文件中,用knn进行预测识别(代码片段)

...别。任务流程大致分为以下过程:1)模型准备:下载并部署一个人脸特征提取模型(功能包括人脸检测、人脸特征提取,不限算法,比如dlib.paddlehub等)需要的准备好的Dlib两个模型为dlib_face_recognition_resnet_model_v1.datshape_predi... 查看详情

基于dlib进行人脸识别demo(代码片段)

环境准备:win10,python3.9,cv2,numpy,dlib项目所要达到的目的:实现人脸识别(输入几张图片,人脸检测、关键点检测、人脸关键点进行编码存储起来,再传进来一张图片,判断新传来来这... 查看详情

基于dlib进行人脸识别demo(代码片段)

环境准备:win10,python3.9,cv2,numpy,dlib项目所要达到的目的:实现人脸识别(输入几张图片,人脸检测、关键点检测、人脸关键点进行编码存储起来,再传进来一张图片,判断新传来来这... 查看详情

基于python如何建立人脸库

您好,基于Python建立人脸库的方法如下:1.安装Python和相关包:首先,您需要安装Python和相关的包,如OpenCV、NumPy等,以便使用Python来处理图像和视频。2.获取人脸数据:您需要获取足够多的人脸数据,以便训练模型。3.提取特征... 查看详情

人脸识别基于dlib库实现人脸特征值提取(代码片段)

目录一、Dlib库介绍与安装1.Dlib库简介2.安装Dlib库二、OpenCV介绍即安装1.OpenCV简介2.OpenCV安装三、提取人脸特征点四、在眼睛处绘制黑色的实心圆五、总结六、参考一、Dlib库介绍与安装1.Dlib库简介  Dlib库是一个机器学习的开源... 查看详情

人脸识别完整项目实战:完整项目案例运行演示

...技术说明、项目业务需求分析、项目业务流程设计;环境部署篇:提供C++和Python两种编程语言的版本,系统介绍项目开发环境概述、DLib框架源码编译、项目工程文件创建、项目开发环境配置、项目性能优化设置;程序设计篇:... 查看详情

[深度应用]·实战掌握dlib人脸识别开发教程

...介绍Dlib是一个深度学习开源工具,基于C++开发,也支持Python开发接口,功能类似于Ten 查看详情

基于python的人脸识别和焦点人物检测(代码片段)

...的识别框颜色与其他人物框不一样。准备工作需要安装好python环境,安装好dlib、opencv-python库等,具体可以看报错信息(可以使用PyCharm来运行和编辑py文件),然后把需要的库补全,文章最后会有 查看详情

用20行python代码实现人脸识别!

...个世界上最简洁的人脸识别库face_recognition,你可以使用Python和命令行工具进行提取、识别、操作人脸。基于业内领先的C++开源库dlib中的深度学习模型,用LabeledFacesintheWild人脸数据集进行测试,有高达99.38%的准确率。1.安装最好... 查看详情

基于dlib人脸检测(图像视频)demo(代码片段)

...个深度学习开源工具,基于C++开发,也支持Python开发接口2、由于Dlib对于人脸特征提取支持很好,很多训练好的人脸特征提取模型提供开发者使用,所以Dlib人脸识别开发很适合做人脸项目开发官网地址:... 查看详情

基于dlib人脸检测(图像视频)demo(代码片段)

...个深度学习开源工具,基于C++开发,也支持Python开发接口2、由于Dlib对于人脸特征提取支持很好,很多训练好的人脸特征提取模型提供开发者使用,所以Dlib人脸识别开发很适合做人脸项目开发官网地址:... 查看详情

基于python+opencv人脸识别及人脸遮挡识别

...大小:21M代码行数:47行(主程序)开发环境:Python3.8、OpenCV4.5、dlib点击下载:点击下载猿创承诺:该源码均通过亲自测试可正常运行简要概述:这种人脸识别实现能够识别具有一定遮挡程度的人脸,包... 查看详情

dlib人脸识别(代码片段)

...pyternotebook是一个工具?pipinstalljupyter------------>安装使用?如何启动:?命令行输入:jupyternotebook?前提,环境变量配置成功??dlib安装------------->pipinstalldlib?dlib有不同的版本,最新版本(19.17.0),经过测试,dll包不完备,所以上次... 查看详情

加载人像检测模型的代码是

...这一工作的话,人脸识别也没那么难。今天我们就来看看如何在40行代码以内简单地实现人脸识别。一点区分对于大部分人来说,区分人脸检测和人脸识别完全不是问题。但是网上有很多教程有无无意地把人脸检测说成是人脸识... 查看详情

如何使用 gpu 运行 dlib 人脸识别

】如何使用gpu运行dlib人脸识别【英文标题】:howtorundlibfacerecognitionwithgpu【发布时间】:2020-06-1211:27:44【问题描述】:我已经安装了VisualStudio2019,以及Cuda10.1和TensorFlow2.1.0,但我仍然无法使用GPU运行人脸识别,有人可以给我一份... 查看详情

Pip install dlib 卡在人脸识别 python 库中

】Pipinstalldlib卡在人脸识别python库中【英文标题】:PipinstalldlibstuckfortheFacerecognitionpythonlibrary【发布时间】:2021-09-2018:42:30【问题描述】:我正在尝试在Windows7中执行人脸识别python库。按照提供的步骤,我执行了以下操作已安装Vis... 查看详情