参考:
1、http://blog.csdn.net/hjimce/article/details/51307886
2、http://dlib.net/
1、python
人脸检测
# -*- coding: UTF-8 -*-
import cv2
import dlib
import numpy as np
# 根据人脸框bbox,从一张完整图片裁剪出人脸
def getface():
bgrImg = cv2.imread('nba.jpg')
print(bgrImg.shape)
rgbImg = cv2.cvtColor(bgrImg, cv2.COLOR_BGR2RGB)
detector = dlib.get_frontal_face_detector()
# img = io.imread('1.jpg')
faces = detector(rgbImg, 1)
if len(faces) > 0:
for face in faces:
# face = max(faces, key=lambda rect: rect.width() * rect.height())
[x1, x2, y1, y2] = [face.left(), face.right(), face.top(), face.bottom()]
cv2.rectangle(bgrImg,(x1,y1),(x2,y2),(0,255,0),2,cv2.LINE_AA)
cv2.imshow("dst",bgrImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
getface()
人脸特征点定位
先从网上下载预训练模型shape_predictor_68_face_landmarks.dat,点击这里找到并下载
# -*- coding: UTF-8 -*-
import cv2
import dlib
import matplotlib.pyplot as plt
# 根据人脸框bbox,从一张完整图片裁剪出人脸,并保存问文件名cropimgname
# 如果未检测到人脸,那么返回false,否则返回true
face_detector = dlib.get_frontal_face_detector()
landmark_predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
def geteye_rect(imgpath):
bgrImg = cv2.imread(imgpath)
if bgrImg is None:
return False
rgbImg = cv2.cvtColor(bgrImg, cv2.COLOR_BGR2RGB)
facesrect = face_detector(rgbImg, 1)
if len(facesrect) <= 0:
return False
for k, d in enumerate(facesrect):
shape = landmark_predictor(rgbImg, d)
for i in range(68):
pt = shape.part(i)
plt.plot(pt.x, pt.y, 'ro')
plt.imshow(rgbImg)
plt.show()
geteye_rect("nba.jpg")