⑴ 如何获取人脸 68个关键点 python代码

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

⑵ 如何线上部署用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

⑶ 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,基于OpenCV与Face++实现人脸解锁的功能

    近几天微软的发布会上讲到了不少认脸解锁的内容,经过探索,其实利用手头的资源我们完全自己也可以完成这样一个过程。

    本文讲解了如何使用Python,基于OpenCV与Face++实现人脸解锁的功能。

    本文基于Python 2.7.11,Windows 8.1 系统。

    主要内容

    • Windows 8.1上配置OpenCV

    • OpenCV的人脸检测应用

    • 使用Face++完成人脸辨识(如果你想自己实现这部分的功能,可以借鉴例如这个项目)

    • Windows 8.1上配置OpenCV

      入门的时候配置环境总是一个非常麻烦的事情,在Windows上配置OpenCV更是如此。

      既然写了这个推广的科普教程,总不能让读者卡在环境配置上吧。

      下面用到的文件都可以在这里(提取码:b6ec)下载,但是注意,目前OpenCV仅支持Python2.7。

      将cv2加入site-packages

      将下载下来的cv2.pyd文件放入Python安装的文件夹下的Libsite-packages目录。

      就我的电脑而言,这个目录就是C:/Python27/Lib/site-packages/。

      记得不要直接使用pip安装,将文件拖过去即可。

      安装numpy组件

      在命令行下进入到下载下来的文件所在的目录(按住Shift右键有在该目录打开命令行的选项)

      键入命令:

      1

    • pip install numpy-1.11.0rc2-cp27-cp27m-win32.whl

    • 如果你的系统或者Python不适配,可以在这里下载别的轮子。

      测试OpenCV安装

      在命令行键入命令:

      1

    • python -c "import cv2"

    • 如果没有出现错误提示,那么cv2就已经安装好了。

      OpenCV的人脸检测应用

      人脸检测应用,简而言之就是一个在照片里找到人脸,然后用方框框起来的过程(我们的相机经常做这件事情)

      那么具体而言就是这样一个过程:

    • 获取摄像头的图片

    • 在图片中检测到人脸的区域

    • 在人脸的区域周围绘制方框

    • 获取摄像头的图片

      这里简单的讲解一下OpenCV的基本操作。

      以下操作是打开摄像头的基本操作:

      1

      2

      3

      4

      5

      6

      7

    • #coding=utf8

      import cv2

      # 一般笔记本的默认摄像头都是0

      capInput = cv2.VideoCapture(0)

      # 我们可以用这条命令检测摄像头是否可以读取数据

      if not capInput.isOpened(): print('Capture failed because of camera')

    • 那么怎么从摄像头读取数据呢?

      1

      2

      3

      4

      5

      6

      7

      8

    • # 接上段程序

      # 现在摄像头已经打开了,我们可以使用这条命令读取图像

      # img就是我们读取到的图像,就和我们使用open('pic.jpg', 'rb').read()读取到的数据是一样的

      ret, img = capInput.read()

      # 你可以使用open的方式存储,也可以使用cv2提供的方式存储

      cv2.imwrite('pic.jpg', img)

      # 同样,你可以使用open的方式读取,也可以使用cv2提供的方式读取

      img = cv2.imread('pic.jpg')

    • 为了方便显示图片,cv2也提供了显示图片的方法:

      1

      2

      3

      4

      5

      6

    • # 接上段程序

      # 定义一个窗口,当然也可以不定义

      imgWindowName = 'ImageCaptured'

      imgWindow = cv2.namedWindow(imgWindowName, cv2.WINDOW_NORMAL)

      # 在窗口中显示图片

      cv2.imshow(imgWindowName, img)

    • 当然在完成所有操作以后需要把摄像头和窗口都做一个释放:

      1

      2

      3

      4

      5

    • # 接上段程序

      # 释放摄像头

      capInput.release()

      # 释放所有窗口

      cv2.destroyAllWindows()

    • 在图片中检测到人脸的区域

      OpenCV给我们提供了已经训练好的人脸的xml模板,我们只需要载入然后比对即可。

      1

      2

      3

      4

      5

      6

      7

      8

    • # 接上段程序

      # 载入xml模板

      faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

      # 将图形存储的方式进行转换

      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

      # 使用模板匹配图形

      faces = faceCascade.detectMultiScale(gray, 1.3, 5)

      print(faces)

    • 在人脸的区域周围绘制方框

      在上一个步骤中,faces中的四个量分别为左上角的横坐标、纵坐标、宽度、长度。

      所以我们根据这四个量很容易的就可以绘制出方框。

      1

      2

      3

    • # 接上段程序

      # 函数的参数分别为:图像,左上角坐标,右下角坐标,颜色,宽度

      img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

    • 成果

      根据上面讲述的内容,我们现在已经可以完成一个简单的人脸辨认了:

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

    • #coding=utf8

      import cv2

      print('Press Esc to exit')

      faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

      imgWindow = cv2.namedWindow('FaceDetect', cv2.WINDOW_NORMAL)

      def detect_face():

      capInput = cv2.VideoCapture(0)

      # 避免处理时间过长造成画面卡顿

      nextCaptureTime = time.time()

      faces = []

      if not capInput.isOpened(): print('Capture failed because of camera')

      while 1:

      ret, img = capInput.read()

      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

      if nextCaptureTime < time.time():

      nextCaptureTime = time.time() + 0.1

      faces = faceCascade.detectMultiScale(gray, 1.3, 5)

      if faces:

      for x, y, w, h in faces:

      img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

      cv2.imshow('FaceDetect', img)

      # 这是简单的读取键盘输入,27即Esc的acsii码

      if cv2.waitKey(1) & 0xFF == 27: break

      capInput.release()

      cv2.destroyAllWindows()

      if __name__ == '__main__':

      detect_face()

    • 使用Face++完成人脸辨识

      第一次认识Face++还是因为支付宝的人脸支付,响应速度还是非常让人满意的。

      现在只需要免费注册一个账号然后新建一个应用就可以使用了,非常方便。

      他的官方网址是这个,注册好之后在这里的我的应用中创建应用即可。

      创建好应用之后你会获得API Key与API Secret。

      Face++的API调用逻辑简单来说是这样的:

    • 上传图片获取读取到的人的face_id

    • 创建Person,获取person_id(Person中的图片可以增加、删除)

    • 比较两个face_id,判断是否是一个人

    • 比较face_id与person_id,判断是否是一个人

    • 上传图片获取face_id

      在将图片通过post方法上传到特定的地址后将返回一个json的值。

      如果api_key, api_secret没有问题,且在上传的图片中有识别到人脸,那么会存储在json的face键值下。

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

    • #coding=utf8

      import requests

      # 这里填写你的应用的API Key与API Secret

      API_KEY = ''

      API_SECRET = ''

      # 目前的API网址是这个,你可以在API文档里找到这些

      BASE_URL = 'httlus.com/v2'

      # 使用Requests上传图片

      url = '%s/detection/detect?api_key=%s&api_secret=%s&attribute=none'%(

      BASE_URL, API_KEY, API_SECRET)

      files = {'img': (os.path.basename(fileDir), open(fileDir, 'rb'),

      mimetypes.guess_type(fileDir)[0]), }

      r = requests.post(url, files = files)

      # 如果读取到图片中的头像则输出他们,其中的'face_id'就是我们所需要的值

      faces = r.json().get('face')

      print faces

    • 创建Person

      这个操作没有什么可以讲的内容,可以对照这段程序和官方的API介绍。

      官方的API介绍可以见这里,相信看完这一段程序以后你就可以自己完成其余的API了。

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

    • # 上接上一段程序

      # 读取face_id

      if not faces is None: faceIdList = [face['face_id'] for face in faces]

      # 使用Requests创建Person

      url = '%s/person/create'%BASE_URL

      params = {

      'api_key': API_KEY,

      'api_secret': API_SECRET,

      'person_name': 'LittleCoder',

      'face_id': ','.join(faceIdList), }

      r = requests.get(url, params = params)

      # 获取person_id

      print r.json.()['person_id']

    • 进度确认

      到目前为止,你应该已经可以就给定的两张图片比对是否是同一个人了。

      那么让我们来试着写一下这个程序吧,两张图片分别为’pic1.jpg’, ‘pic2.jpg’好了。

      下面我给出了我的代码:

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

    • def upload_img(fileDir, oneface = True):

      url = '%s/detection/detect?api_key=%s&api_secret=%s&attribute=none'%(

      BASE_URL, API_KEY, API_SECRET)

      if oneface: url += '&mode=oneface'

      files = {'img': (os.path.basename(fileDir), open(fileDir, 'rb'),

      mimetypes.guess_type(fileDir)[0]), }

      r = requests.post(url, files = files)

      faces = r.json().get('face')

      if faces is None:

      print('There is no face found in %s'%fileDir)

      else:

      return faces[0]['face_id']

      def compare(faceId1, faceId2):

      url = '%s/recognition/compare'%BASE_URL

      params = BASE_PARAMS

      params['face_id1'] = faceId1

      params['face_id2'] = faceId2

      r = requests.get(url, params)

      return r.json()

      faceId1 = upload_img('pic1.jpg')

      faceId2 = upload_img('pic2.jpg')

      if face_id1 and face_id2:

      print(compare(faceId1, faceId2))

      else:

      print('Please change two pictures')

    • 成品

      到此,所有的知识介绍都结束了,相比大致如何完成这个项目各位读者也已经有想法了吧。

      下面我们需要构思一下人脸解锁的思路,大致而言是这样的:

    • 使用一个程序设置账户(包括向账户中存储解锁用的图片)

    • 使用另一个程序登陆(根据输入的用户名测试解锁)

    • 这里会有很多重复的代码,就不再赘述了,你可以在这里或者这里(提取码:c073)下载源代码测试使用。

      这里是设置账户的截图:

      登陆

      结束语

      希望读完这篇文章能对你有帮助,有什么不足之处万望指正(鞠躬)。

    ⑸ 运行人脸识别Python程序时遇到以下问题,求大佬解决

    要把所有错误堆栈贴出来 上面的不够

    ⑹ 如何用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个人脸!

    ⑻ 有没有Python的人脸识别的demo

    OpenCV是开源的跨平台来计算源机视觉库,提供了Python等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
    opencv中内置了基于Viola-Jones目标检测框架的Harr分类器,只需要载入一个配置文件(haarcascade_frontalface_alt.xml)就能直接调用detectObject去完成检测过程,同时也支持其他特征的检测(如鼻子、嘴巴等)。

    ⑼ 如何使用yale大学的人脸数据库进行人脸识别的训练,python语言

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

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

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