700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python 人脸关键点检测_opencv+python+dlib人脸关键点检测 实时检测

python 人脸关键点检测_opencv+python+dlib人脸关键点检测 实时检测

时间:2019-03-14 17:43:22

相关推荐

python 人脸关键点检测_opencv+python+dlib人脸关键点检测 实时检测

安装的是anaconde3、python3.7.3,3.7环境安装dlib太麻烦,

在anaconde3中新建环境python3.6.8,

在3.6环境下安装dlib-19.6.1-cp36-cp36m-win_amd64.whl,下载地址:/project/dlib/19.6.1/#files

vscode更改配置

其中shape_predictor_68_face_landmarks.dat官方训练数据下载地址:/files/,里面还有5点模型。

效果图如下:

# _*_ coding:utf-8 _*_

import numpy as np

import cv2

import dlib

detector = dlib.get_frontal_face_detector()

predictor = dlib.shape_predictor("data/shape_predictor_68_face_landmarks.dat")

# cv2读取图像

img = cv2.imread("img/test3.jpg")

# 取灰度

img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

# 人脸数rects

rects = detector(img_gray, 0)

for i in range(len(rects)):

landmarks = np.matrix([[p.x, p.y] for p in predictor(img, rects[i]).parts()])

for idx, point in enumerate(landmarks):

# 68点的坐标

pos = (point[0, 0], point[0, 1])

# 利用cv2.circle给每个特征点画一个圈,共68个

cv2.circle(img, pos, 2, color=(0, 255, 0))

# 利用cv2.putText输出1-68

font = cv2.FONT_HERSHEY_SIMPLEX

cv2.putText(img, str(idx + 1), None, font, 0.8, (0, 0, 255), 1, cv2.LINE_AA)

cv2.namedWindow("img", 2)

cv2.imshow("img", img)

cv2.waitKey(0)

摄像头实时检测:

#_*_ coding:utf-8 _*_

importnumpy as npimportcv2importdlib

cap=cv2.VideoCapture(0)

detector=dlib.get_frontal_face_detector()

predictor= dlib.shape_predictor("data/shape_predictor_68_face_landmarks.dat")while 1:

ret, img=cap.read()#取灰度

img_gray =cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)#人脸数rects

rects =detector(img_gray, 0)for i inrange(len(rects)):

landmarks= np.matrix([[p.x, p.y] for p inpredictor(img, rects[i]).parts()])for idx, point inenumerate(landmarks):#68点的坐标

pos = (point[0, 0], point[0, 1])#利用cv2.circle给每个特征点画一个圈,共68个

cv2.circle(img, pos, 2, color=(0, 255, 0))#利用cv2.putText输出1-68

font =cv2.FONT_HERSHEY_SIMPLEX

cv2.putText(img, str(idx+ 1), None, font, 0.8, (0, 0, 255), 1, cv2.LINE_AA)

cv2.namedWindow("img", 2)

cv2.imshow("img", img)if cv2.waitKey(1) & 0xFF == ord("q"):break

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。