人脸识别(4)--Python3.6+dlib19.4识别实例
2017-04-21 23:06
351 查看
生成方形框识别人脸
关键线识别人脸
前提条件:
确保python+dlib环境已经搭建成功。搭建步骤可以参考上一篇博客:http://blog.csdn.net/u012842255/article/details/70194609
简略总结:
实例效果:
简化代码:
效果实例:
参考文档:http://www.th7.cn/Program/Python/201511/706515.shtml
关键线识别人脸
前提条件:
确保python+dlib环境已经搭建成功。搭建步骤可以参考上一篇博客:http://blog.csdn.net/u012842255/article/details/70194609
生成方形框识别人脸
官网代码:#!/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 http://scikit-image.org/download.html. import sysimport 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]))
简略总结:
# -*- coding: utf-8 -*- import sysimport 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()
实例效果:
关键线识别人脸
官方代码:#!/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 classifier, an image pyramid, # and sliding window detection scheme. The pose estimator was created by # using dlib's implementation of the paper: # One Millisecond Face Alignment with an Ensemble of Regression Trees by # Vahid Kazemi and Josephine Sullivan, CVPR 2014 # and was trained on the iBUG 300-W face landmark dataset. # # Also, note that you can train your own models using dlib's machine learning # tools. See train_shape_predictor.py to see an example. # # You can get the shape_predictor_68_face_landmarks.dat file from: # http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2 # # 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 http://scikit-image.org/download.html. import sys import os import dlib import glob from skimage import io if len(sys.argv) != 3: print("Give the path to the trained shape predictor model as the first " "argument and then the directory containing the facial images./n" "For example, if you are in the python_examples folder then " "execute this program by running:/n" " ./face_landmark_detection.py shape_predictor_68_face_landmarks.dat ../examples/faces/n" "You can download a trained facial shape predictor from:/n" " http://sourceforge.net/projects/dclib/files/dlib/v18.10/shape_predictor_68_face_landmarks.dat.bz2") exit() predictor_path = sys.argv[1] faces_folder_path = sys.argv[2] detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor(predictor_path) win = dlib.image_window() for f in glob.glob(os.path.join(faces_folder_path, "*.jpg")): print("Processing file: {}".format(f)) img = io.imread(f) win.clear_overlay() win.set_image(img) # Ask the detector to find the bounding boxes of each face. 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 k, d in enumerate(dets): print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format( k, d.left(), d.top(), d.right(), d.bottom())) # Get the landmarks/parts for the face in box: d.shape = predictor(img, d) print("Part 0: {}, Part 1: {} ...".format(shape.part(0), shape.part(1))) # Draw the face landmarks on the screen.win.add_overlay(shape) win.add_overlay(dets) dlib.hit_enter_to_continue()
简化代码:
# -*- coding: utf-8 -*- import dlib import numpyfrom skimage import io #源程序是用sys.argv从命令行参数去获取训练模型,精简版我直接把路径写在程序中了 predictor_path = "./data/shape_predictor_68_face_landmarks.dat" #源程序是用sys.argv从命令行参数去获取文件夹路径,再处理文件夹里的所有图片 #这里我直接把图片路径写在程序里了,每运行一次就只提取一张图片的关键点 faces_path = "./data/3.jpg" #与人脸检测相同,使用dlib自带的frontal_face_detector作为人脸检测器 detector = dlib.get_frontal_face_detector() #使用官方提供的模型构建特征提取器 predictor = dlib.shape_predictor(predictor_path) #使用dlib提供的图片窗口 win = dlib.image_window() #使用skimage的io读取图片 img = io.imread(faces_path) #绘制图片 win.clear_overlay() win.set_image(img) #与人脸检测程序相同,使用detector进行人脸检测 dets为返回的结果 dets = detector(img, 1) #dets的元素个数即为脸的个数 print("Number of faces detected: {}".format(len(dets))) #使用enumerate 函数遍历序列中的元素以及它们的下标 #下标k即为人脸序号 #left:人脸左边距离图片左边界的距离 ;right:人脸右边距离图片左边界的距离 #top:人脸上边距离图片上边界的距离 ;bottom:人脸下边距离图片上边界的距离 for k, d in enumerate(dets): print("dets{}".format(d)) print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format( k, d.left(), d.top(), d.right(), d.bottom())) #使用predictor进行人脸关键点识别 shape为返回的结果 shape = predictor(img, d) #获取第一个和第二个点的坐标(相对于图片而不是框出来的人脸) print("Part 0: {}, Part 1: {} ...".format(shape.part(0), shape.part(1))) #绘制特征点 win.add_overlay(shape) #绘制人脸框 win.add_overlay(dets) #也可以这样来获取(以一张脸的情况为例) #get_landmarks()函数会将一个图像转化成numpy数组,并返回一个68 x2元素矩阵,输入图像的每个特征点对应每行的一个x,y坐标。 def get_landmarks(im): rects = detector(im, 1) return numpy.matrix([[p.x, p.y] for p in predictor(im, rects[0]).parts()]) #多张脸使用的一个例子 def get_landmarks_m(im): dets = detector(im, 1) #脸的个数 print("Number of faces detected: {}".format(len(dets))) for i in range(len(dets)):facepoint = np.array([[p.x, p.y] for p in predictor(im, dets[i]).parts()])for i in range(68): #标记点 im[facepoint[i][1]][facepoint[i][0]] = [232,28,8] return im #打印关键点矩阵 print("face_landmark:") print(get_landmarks(img)) #等待点击 dlib.hit_enter_to_continue()
效果实例:
参考文档:http://www.th7.cn/Program/Python/201511/706515.shtml
相关文章推荐
- 人脸识别(2)--Python3.6+OpenCV3.2识别实例
- 人脸识别(3)--Python3.6+dlib19.4在Mac下环境搭建
- python3.6+百度人脸识别API进行照片人脸对比
- 人脸检测和识别 源代码 下载-opencv3+python3.6完整实战项目源代码 识别视频《欢乐颂》中人物
- 人脸识别(1)--Python3.6+OpenCV3.2在Mac下环境搭建
- python借助腾讯云实现人脸识别的gui程序实例
- windows10下python3.6+opencv3.3.0安装人脸识别face_recognition库
- (Windows下) Python3.6+OpenCV进行人脸识别的环境搭建
- python opencv 人脸识别
- 图像识别 python+opencv的简单人脸识别
- Android中 人脸识别FaceDetector简单实例
- OpenCV+python 人脸识别
- Python+opencv人脸识别
- 【Raspberry Pi 3试用体验】+Opencv+python的人脸识别
- OpenCV+python 人脸识别
- Python中利用Scipy包的SIFT方法进行图片识别的实例教程
- OpenCV 人脸识别 C++实例代码
- 【人脸识别】人脸验证算法Joint Bayesian详解及实现(Python版)
- Python 对图片进行人脸识别
- python+opencv之视频人脸识别