opencv4.2+dlib实现脸部关键点检测
2020-07-13 06:02
1341 查看
使用opencv4.2、dlib、python模块进行脸部关键点检测
1、环境配置
我的硬件配置是windows10 + i7-9700kf + anaconda,具体关于anaconda的安装就不细说了。
首先使用conda创建一个新的虚拟环境,conda create -n python_dlib python==3.6,然后激活python_dlib环境之后,直接进行pip install dlib opencv-python,pip install dlib,关于dlib如果你是想用GPU版本的,那你就需要去进行源码的编译了,手动开启GPU接口。
2、代码实现
在代码实现之前,你首先准备好这个已经训练好的模型,https://download.csdn.net/download/weixin_43871135/12507063
# Author by Mr.Wang . # csdn_url : https://blog.csdn.net/weixin_43871135 import dlib import numpy as np import cv2 camera_path = 0 # 视频输入来源 cap = cv2.VideoCapture(camera_path) # opencv读取视频 model_path = 'shape_predictor_81_face_landmarks.dat' # 脸部关键点的模型的地址 detect_face = dlib.get_frontal_face_detector() # 引入dlib的人脸检测模块 predictor = dlib.shape_predictor(model_path) # 加载模型 while True: ret, frame = cap.read() # 逐帧读取 if ret: dets = detect_face(frame, 0) # 人脸检测,参数为0,不实现放大, # 参数为1,则放大图像进行检测,检测小脸 for face, det_point in enumerate(dets): # 对检测到的每一张脸进行操作 # face为第几张脸, det_point为检测到的脸的第坐标 shape = predictor(frame, det_point) # 对输入的脸进行关键点检测 landmarks = np.array([[p.x, p.y] for p in shape.parts()]) # 关键点的坐标 for num in range(shape.num_parts): # 对返回的关键点进行画图 cv2.circle(frame, (shape.parts()[num].x, shape.parts()[num].y), 3, (0, 255, 0), -1) # cv2.circle(frame, (shape.parts()[num].x, shape.parts()[num].y), 5, color=(0, 0, 255)) if num == 1 or num == 2 or num == 14 or num == 15: ## 我这里是做了一个判断,大概的标出耳朵的位置 cv2.circle(frame, (shape.parts()[num].x, shape.parts()[num].y), 3, (0, 0, 255), -1) cv2.putText(frame, str(num + 1), (shape.parts()[num].x, shape.parts()[num].y), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 1, cv2.LINE_AA) cv2.imshow('frame', frame) if cv2.waitKey(1) == 27: break cap.release() # 资源释放 cv2.destroyAllWindows() # 窗口销毁
3、效果展示
有一说一,不吹不黑,dlib的检测效果还不是很好,侧脸基本都检测不出来,并且戴眼镜和不带眼睛的检测效果也是有点区别的,不过这只是个demo,如果要是真正应用的话,还是得卷积网络才能搞定。你说呢?
相关文章推荐
- Android下使用jni实现基于opencv与dlib的68关键点检测
- python下通过dlib和opencv实现人脸对齐(包括关键点检测和仿射变换)
- Python+OpenCV+OpenPose实现人体姿态估计(人体关键点检测)
- python+OpenCv+dlib实现人脸68个关键点检测并标注
- 使用opencv实现车辆的检测与跟踪
- OpenCV之imgproc 模块. 图像处理(2)实现自己的线性滤波器 给图像添加边界 Sobel 导数 Laplace 算子 Canny 边缘检测
- 基于Adaboost算法的车牌检测在OpenCV上的研究与实现
- 使用OpenCV实现检测和追踪车辆
- 运用特征脸方法的基于Opencv的猫脸检测实现
- 目标检测学习_1(用opencv自带hog实现行人检测)
- 基于openCV实现人脸检测
- (学习笔记二)——基于opencv人脸检测原理及实现
- OpenCV与Compressive Tracking实现人脸的实时检测与跟踪
- mini6410成功移植OPENCV-2.0.0实现人脸检测
- OpenCV中feature2D学习——SIFT和SURF算法实现目标检测
- QT+Opencv实现人脸检测与性别识别(1)
- OpenCV与Compressive Tracking实现人脸的实时检测与跟踪
- OpenCV实现图像角点检测
- OpenCV例程实现人脸检测
- Qt多线程实现opencv的人脸检测