导航:首页 > 编程语言 > python人脸特征提取

python人脸特征提取

发布时间:2023-03-20 14:29:34

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

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

Dlib简介:

首先给大家介绍一下Dlib

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

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

cd to dlib-18.17/python_examples

./compile_dlib_python_mole.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_mole.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]))5767778798081

我把源代码精简了一下,加了一下注释: 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()041424344454647484950

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

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

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

‘贰’ 如何获取人脸 68个关键点 python代码

可以使用OpenCV,OpenCV的人脸检测功能在一般场合还是不错的。而ubuntu正好提供了python-opencv这个包,用它可以方便地实现人脸检测的代码。 写代码之前应该先安装python-opencv: #!/usr/bin/python# -*- coding: UTF-8 -*- # face_detect.py #...

‘叁’ OpenCV-Python之——图像SIFT特征提取

在一定的范围内,无论物体是大还是小,人眼都可以分辨出来。然而计算机要有相同的能力却不是那么的容易,在未知的场景中,计算机视觉并不能提供物体的尺度大小,其中的一种方法是把物体不同尺度下的图像都提供给机器,让机器能够对物体在不同的尺度下有一个统一的认知。在建立统一认知的过程中,要考虑的就是在图像在不同的尺度下都存在的特征点。

在早期图像的多尺度通常使用图像金字塔表示形式。图像金字塔是同一图像在不同的分辨率下得到的一组结果其生成过程一般包括两个步骤:

多分辨率的图像金字塔虽然生成简单,但其本质是降采样,图像的局部特征则难以保持,也就是无法保持特征的尺度不变性。

我们还可以通过图像的模糊程度来模拟人在距离物体由远到近时物体在视网膜上成像过程,距离物体越近其尺寸越大图像也越模糊,这就是高斯尺度空间,使用不同的参数模糊图像(分辨率不变),是尺度空间的另一种表现形式。

构建尺度空间的目的是为了检测出在不同的尺度下都存在的特征点,而检测特征点较好的算子是Δ^2G(高斯拉普拉斯,LoG)
使用LoG虽然能较好的检测到图像中的特征点,但是其运算量过大,通常可使用DoG(差分高斯,Difference of Gaussina)来近似计算LoG。

从上式可以知道,将相邻的两个高斯空间的图像相减就得到了DoG的响应图像。为了得到DoG图像,先要构建高斯尺度空间,而高斯的尺度空间可以在图像金字塔降采样的基础上加上高斯滤波得到,也就是对图像金字塔的每层图像使用不同的参数σ进行高斯模糊,使每层金字塔有多张高斯模糊过的图像。
如下图,octave间是降采样关系,且octave(i+1)的第一张(从下往上数)图像是由octave(i)中德倒数第三张图像降采样得到。octave内的图像大小一样,只是高斯模糊使用的尺度参数不同。

对于一幅图像,建立其在不同尺度scale下的图像,也称为octave,这是为了scale-invariant,也就是在任何尺度都能有对应的特征点。下图中右侧的DoG就是我们构建的尺度空间。

为了寻找尺度空间的极值点,每一个采样点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。如图所示,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。 一个点如果在DOG尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点。下图中将叉号点要比较的26个点都标为了绿色。

找到所有特征点后, 要去除低对比度和不稳定的边缘效应的点 ,留下具有代表性的关键点(比如,正方形旋转后变为菱形,如果用边缘做识别,4条边就完全不一样,就会错误;如果用角点识别,则稳定一些)。去除这些点的好处是增强匹配的抗噪能力和稳定性。最后,对离散的点做曲线拟合,得到精确的关键点的位置和尺度信息。

近来不断有人改进,其中最着名的有 SURF(计算量小,运算速度快,提取的特征点几乎与SIFT相同)和 CSIFT(彩色尺度特征不变变换,顾名思义,可以解决基于彩色图像的SIFT问题)。

其中sift.detectAndCompute()函数返回kp,des。

上图dog的shape为(481, 500, 3),提取的特征向量des的shape为(501, 128),501个128维的特征点。

该方法可以在特征点处绘制一个小圆圈。

https://blog.csdn.net/happyer88/article/details/45817305
https://www.jianshu.com/p/d94e558ebe26
https://www.cnblogs.com/wangguchangqing/p/4853263.html

‘肆’ 如何用Python实现简单人脸识别

你可以使用opencv库提供的人脸识别模块,这样子会比较快

‘伍’ 如何实现人脸识别及其原理

如何实现人脸识别及其原理

只要开人脸识别功能就行了 人脸识别其实很简单,相机处理器对拍到的物体进行长宽比例的分析,分析出的数值接近人脸的比例就会自动锁定,其实就是数学上的计算和比例,也许大家认为人脸差别很大,其实都是遵循着固定的比率的,只要不是畸形,不管胖瘦脸部的比例都是人脸特伍行有的那个值,所以即使是素描画,相机一样认为他是人脸,只要他的比例是对的

winform如何实现人脸识别

=IF(OR(P9=""),"",Q9&"."&R9&""&LEFT(S9,2)&"")
意思是当P9为空,就显示空,否则显示Q9为整数部份,&"."为加上一个小数点,小数部份为R9和S9的前两位阵列成.这个公式里的OR和后&""是多余的,写成这样就行=IF(P9="","",Q9&"."&R9&""&LEFT(S9,2))
Q9=30 R9=32 S9=1.3255在后面的单元格显示30.3201,如果是当S9整数小于2位,就在前面添0,大于2位就显示几位整,那么输入
=Q9&"."&R9&IF(LEN(ROUNDDOWN(S9,0))<2,0&ROUNDDOWN(S9,0),ROUNDDOWN(S9,0))

如何实现人脸表情识别

适合啊,我同学做的就跟你一点差别,她是人脸识别,没有表情。

苹果iPhoneX支援人脸识别是如何实现的?

据说,苹果新品手机可以“在一百万张脸中识别出你的肥脸”,还可以通过人脸识别解锁手机,以及订制动态3D Animojis 表情。
苹果iPhoneX人脸识别是怎么实现的呢?
这是一个复杂的技术问题......人脸识别主要包括人脸检测、特征提取、人脸分类三个过程。
简单地说,就是通过人脸检测,对五官进行一些关键点的定位,然后提取计算机能够识别的人脸特征,最后进行一个相似度的比对,从而得到一个人脸识别的结果,也就是判断“刷脸”的是不是你本人。
让人最为激动还是苹果在取消home键后,替代Touch ID的Face ID功能。有了人脸识别技术加持,抬手秒解锁iPhone的过程真的是更简单也更迅速。
不仅如此,苹果人脸识别解锁的安全性、可靠性也非常高。运用3D结构光技术,iPhone X 能够快速对“人脸3D建模”。即使使用者改变发型,戴上眼镜帽子,或者在晚上,iPhone X都能成功解锁。
人脸识别技术这么牛,那它是万此橘芦能的吗?只要是人脸都可以识别、辨认出来么?其实,在进行人脸识别的时候,也存在一些难题,比如人的姿态、光照、遮挡等都会对人脸识别造成影响。

如何实现人的面部识别?

首先是面部捕捉。它根据人的头部的部位进行判定,首先确定头部,然后判断眼睛和嘴巴等头部特征,通过特征库的比对,确认是面部,完成面部捕捉,ai可以这样做。 不过个人以为这个技术并不好用,特别是在有不止一个人的场景上,比如大合照,对焦点经常乱跑,所以偶的相机基本还是放在中央对焦上,毕竟cpu再聪明,还是人脑更靠谱。。。

mate9pro,可以实现人脸识别吗

Mate9 Pro会支援人脸解锁/识别功能,正在努力适配中。版本具体的更新资讯,请您关注花粉论坛官方通知。感谢您对华为产品的一贯支援。

如何用Python实现简单人脸识别

你可以使用opencv库提供的人脸识别模组,这样子会比较快

Win10怎样用Kinect实现人脸识别功能

具体操作方法:
1、首先你需要一个连线Windows10电脑和Kinect的接口卡;
2、然后还需要给系统做一个小手术以获取Kinect Beta驱动更新:
- 按Win+R开森带启执行,输入regedit回车开启登录档编辑器;
- 导航至HKLMSofareMicrosoft
- 建立子键DriverFlightingPartner
3、在Partner子键中新建名为“TargetRing”的专案,将其值设定为“Drivers”。
不需要重启电脑,之后你就可以在Windows Update或装置管理器中更新Kinect Beta驱动了。
以上就是Windows10用Kinect实现人脸识别功能的方法了,这样一来只要给连线一个Kinect就可以使用Windows10人脸识别功能,而不用更换电脑了。

人脸识别技术是怎样实现人脸精准检测?

是的,比如云脉人脸识别中的人脸检测技术就是采用三维定向,对人脸三维朝向,做精准到“度”的判断,以及对人脸特征点进行“画素级”定位,轻松判断眼睛开合状态,还可通过技术对现有人脸识别做技术上的补充和完善,进而达到识别的创新性和严谨性。

Win10系统怎么使用Kinect实现人脸识别

操作方法:
1、首先你需要一个连线Windows10电脑和Kinect的接口卡;
2、然后还需要给系统做一个小手术以获取Kinect Beta驱动更新:
- 按Win+R开启执行,输入regedit回车开启登录档编辑器;
- 导航至HKLMSofareMicrosoft
- 建立子键DriverFlightingPartner
3、在Partner子键中新建名为“TargetRing”的专案,将其值设定为“Drivers”。
不需要重启电脑,之后你就可以在Windows Update或装置管理器中更新Kinect Beta驱动了。
以上就是Windows10用Kinect实现人脸识别功能的方法了,这样一来只要给连线一个Kinect就可以使用Windows10人脸识别功能,而不用更换电脑了。

‘陆’ 如何用pca做人脸识别 python实现

基于特征脸(PCA)的人脸识别方法
特征脸方法是基于KL变换的人脸识别方法,KL变换是图像压缩的一种最优正交变换。高败神维的图像空间经过KL变换后得到一组新的正交基,保留其中重要的正交基,由这些基可以张成低维线性空间。如果假设人脸在这些低维线性空间的投影具有可分性,就可以将这些投影用作识别的特征矢量,这就是特征脸方法喊枯陆的基本思想。这些方法需要较多的训练样本,而且完全是基于图像灰度的统计特性的。目前有一些改进型的特征脸方法。


比如人脸灰度照片40x40=1600个像素点,用每个像素的灰度值组成的矩阵代表这个人的人脸。那么这个人人脸就要1600 个特征。拿一堆这样的样本过来做pca,抽取得到的只是在统计意义下能代表某个样本的几个特征。


人脸识别可以采用神经网 络深度学习的思路,国内的ColorReco在这边有比较多的郑顷案例。

‘柒’ 怎么用python调取一个人脸识别 api

必备知识
Haar-like
通俗的来讲,就是作为人脸特征即可。
Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。
opencv api
要想使用opencv,就必须先知道其能干什么,怎么做。于是API的重要性便体现出来了。就本例而言,使用到的函数很少,也就普通的读取图片,灰度转换,显示图像,简单的编辑图像罢了。
如下:
读取图片
只需要给出待操作的图片的路径即可。
import cv2
image = cv2.imread(imagepath)
灰度转换
灰度转换的作用就是:转换成灰度的图片的计算强度得以降低。
import cv2
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
画图
opencv 的强大之处的一个体现就是其可以对图片进行任意编辑,处理。
下面的这个函数最后一个参数指定的就是画笔的大小。
import cv2
cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
显示图像
编辑完的图像要么直接的被显示出来,要么就保存到物理的存储介质。
import cv2
cv2.imshow("Image Title",image)
获取人脸识别训练数据
看似复杂,其实就是对于人脸特征的一些描述,这样opencv在读取完数据后很据训练中的样品数据,就可以感知读取到的图片上的特征,进而对图片进行人脸识别。
import cv2
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')
里卖弄的这个xml文件,就是opencv在GitHub上共享出来的具有普适的训练好的数据。我们可以直接的拿来使用。
训练数据参考地址:

探测人脸
说白了,就是根据训练的数据来对新图片进行识别的过程。
import cv2
# 探测图片中的人脸
faces = face_cascade.detectMultiScale(
gray,
scaleFactor = 1.15,
minNeighbors = 5,
minSize = (5,5),
flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)
我们可以随意的指定里面参数的值,来达到不同精度下的识别。返回值就是opencv对图片的探测结果的体现。
处理人脸探测的结果
结束了刚才的人脸探测,我们就可以拿到返回值来做进一步的处理了。但这也不是说会多么的复杂,无非添加点特征值罢了。
import cv2
print "发现{0}个人脸!".format(len(faces))
for(x,y,w,h) in faces:
cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
实例
有了刚才的基础,我们就可以完成一个简单的人脸识别的小例子了。
图片素材
下面的这张图片将作为我们的检测依据。

人脸检测代码
# coding:utf-8
import sys

reload(sys)
sys.setdefaultencoding('utf8')
# __author__ = '郭 璞'
# __date__ = '2016/9/5'
# __Desc__ = 人脸检测小例子,以圆圈圈出人脸
import cv2
# 待检测的图片路径
imagepath = r'./heat.jpg'

# 获取训练好的人脸的参数数据,这里直接从GitHub上使用默认值
face_cascade = cv2.CascadeClassifier(r'./haarcascade_frontalface_default.xml')

# 读取图片
image = cv2.imread(imagepath)
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

# 探测图片中的人脸
faces = face_cascade.detectMultiScale(
gray,
scaleFactor = 1.15,
minNeighbors = 5,
minSize = (5,5),
flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)

print "发现{0}个人脸!".format(len(faces))

for(x,y,w,h) in faces:
# cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2)
cv2.circle(image,((x+x+w)/2,(y+y+h)/2),w/2,(0,255,0),2)

cv2.imshow("Find Faces!",image)
cv2.waitKey(0)
人脸检测结果
输出图片:

输出结果:
D:\Software\Python2\python.exe E:/Code/Python/DataStructor/opencv/Demo.py
发现3个人脸!

‘捌’ 3.5人脸特征码怎么弄

3.5人脸特征码怎么弄:

先利用StyleGAN生成的特征码和生成的人脸图或银指像训练一个网络,把人脸图像作为输入,把特征码作为输出,理论上可以得到一个StyleGAN的逆向网络模型,如果训练成功的话,这个模型可以自动将人脸图像转换为特征码。

利用真实人脸图像对上面得到的模型进行进一步训练和“微调”,使之能够用于真实人脸的特征码提取。

我们有StyleGAN和经过训练后的人脸生成模型 karras2019stylegan-ffhq-1024x1024.pkl。

我们也构造了StyleGAN的逆向网络lotus,并且lotus经过训练优化后的accuracy = 0.9501;用lotus生成的人脸图片的dlatents,再次使用StyleGAN。

其生成的人脸图片与原始图片具有高度的相似性;

能否按照“真实人衫配脸-->lotus-->dlatents-->StyleGAN-->生成图片”的顺搏和序构造一个可训练的神经网络(其中:StyleGAN使用经过训练后的人脸生成模型 karras2019stylegan-ffhq-1024x1024.pkl 且保持不变。

把生成图片和真实人脸转换为向量作为X_train、Y_train并比较它们的差异(mean_squared_erro)),然后训练这个网络,得到一个适用于真实人脸图片的新lotus模型。





‘玖’ python人脸识别所用的优化算法有什么

python三步实现人脸识别

Face Recognition软件包

这是世界上最简单的人脸识别库了。你可以通过Python引用或者命令行的形式使用它,来管理和识别人脸。

该软件包使用dlib中最先进的人脸识别深度学习算法,使得识别准确率在《Labled Faces in the world》测试基准下达到了99.38%。

它同时提供了一个叫face_recognition的命令行工具,以便你可以用命令行对一个文件夹中的图片进行识别操作。

特性

在图片中识别人脸

找到图片中所有的人脸

这里是一个例子:

1
  • https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_picture
  • 阅读全文

    与python人脸特征提取相关的资料

    热点内容
    媒介学pdf 浏览:234
    推荐一个在线观看 浏览:471
    单片机16进制编程图 浏览:490
    金刚2迅雷下载 浏览:275
    聚优电影卡使用范围 浏览:760
    浙江网络卫星授时服务器云空间 浏览:497
    宝塔加密方式 浏览:217
    linux环境变量的路径 浏览:749
    粉笔缓存的视频在手机哪个文件夹 浏览:680
    港片尺度大 浏览:373
    女主胸大的H电影 浏览:877
    小女孩那个电影叫什么 浏览:58
    中越战争电影在哪看 浏览:896
    成龙电影国语版全部 浏览:199
    如何入侵网页服务器修改帐号 浏览:646
    陕西物联网数显钟服务器云主机 浏览:279
    原版3d是国语吗 浏览:926
    程序员勇敢的第一步 浏览:160
    安卓车载音乐什么格式 浏览:432