0.引言
利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68点标定,利用OpenCv进行图像化处理,在人脸上画出68个点,并标明序号;
实现的68个特征点标定功能如下图所示:
图1 人脸68个特征点的标定
1.开发环境
python:3.6.3
dlib:19.7
OpenCv, numpy
需要调用的库:
import dlib #人脸识别的库dlib import numpy as np #数据处理的库numpy import cv2 #图像处理的库OpenCv
2.设计流程
工作内容主要以下两大块:68点标定和OpenCv绘点
68点标定:
借助官方的Demo(face_landmark_detection.py,在之前另一篇博客里面介绍过学习Python3 Dlib19.7进行人脸面部识别)实现;
OpenCv绘点:
介绍了用到的 画圆函数cv2.circle() 和 输出字符串函数 cv2.putText() ;
流程:
1.调用dlib库来进行人脸识别,调用预测器“shape_predictor_68_face_landmarks.dat”进行68点标定
2.存入68个点坐标
3.利用cv2.circle来画68个点
4.利用cv2.putText()函数来画数字1-68
3.源码
# 68-points # 2017-12-28 # By TimeStamp # #cnblogs: http://www.cnblogs.com/AdaminXie/ import dlib #人脸识别的库dlib import numpy as np #数据处理的库numpy import cv2 #图像处理的库OpenCv # dlib预测器 detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat') path="********************" # cv2读取图像 img=cv2.imread(path+"test.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, 5, color=(0, 255, 0)) # 利用cv2.putText输出1-68 font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img, str(idx+1), pos, font, 0.8, (0, 0, 255), 1, cv2.LINE_AA) cv2.namedWindow("img", 2) cv2.imshow("img", img) cv2.waitKey(0)
note:OpenCv的画图函数
1. 画圆 cv2.circle( img, (p1,p2), r, (255,255,255) )
参数1: img- 图片对象;
参数2: (p1,p2)- 圆心坐标;
参数3: r- 半径;
参数4: (255,255,255)- 颜色数组;
2. 输出字符 cv2.putText( img,"test", (p1,p2), font, 4, (255,255,255), 2, cv2, LINE_AA )
参数1: img- 图像对象;
参数2: "test"- 需要打印的字符text(数字的话可以利用str()转成字符);
参数3: (p1,p2)- 坐标textOrg;
参数4: font- 字体fontFace(注意这里 font = cv2.FONT_HERSHEY_SIMPLEX);
参数5: 4- 字号fontScale;
参数6: (255,255,255)- 颜色数组;
参数7: 2- 线宽thickness;
参数8: LINE_AA- 线条种类line_type;
*关于 颜色数组:
(255,255,255), (蓝色,绿色,红色),每个值都是0-255;
比如:蓝色(255,0,0),紫色(255,0,255)
可以调整cv2.circle()函数和cv2.putText()函数中的 半径、线宽 等参数使得输出满足需求方便查看;
结果:
图2 测试结果1
图3 测试结果2
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍python 3利用Dlib 19.7实现摄像头人脸检测特征点标定,包括了python 3利用Dlib 19.7实现摄像头人脸检测特征点标定的使用技巧和注意事项,需要的朋友参考一下 Python 3 利用 Dlib 19.7 实现摄像头人脸检测特征点标定 0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,进行实时特征点标定; 图1 工程效果示例(gif) 图2 工程效
本文向大家介绍python利用dlib获取人脸的68个landmark,包括了python利用dlib获取人脸的68个landmark的使用技巧和注意事项,需要的朋友参考一下 (1) 单人脸情况 (2) 多人脸情况 (3) 获取电脑摄像头实时识别标定 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍python利用OpenCV2实现人脸检测,包括了python利用OpenCV2实现人脸检测的使用技巧和注意事项,需要的朋友参考一下 最近,带领我的学生进行一个URTP项目设计,需要进行人脸识别。由于现在的OpenCV已经到了2.X版本,因此就不想用原来的1.X版本的代码,而网上存在的代码都是1.X版本的代码,尝试自己写一段2.X版本的代码,反复查阅资料,今天终于测试成功(很明显2.
本文向大家介绍Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例,包括了Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例的使用技巧和注意事项,需要的朋友参考一下 1. 引言 在某些场景下,我们不仅需要进行实时人脸检测追踪,还要进行再加工;这里进行摄像头实时人脸检测,并对于实时检测的人脸进行初步提取; 单个/多个人脸检测,并依次在摄像头窗口,实时平铺显示检测到的人脸; 图
我正在做一个基于面部识别和验证的项目。我正在使用暹罗网络来获得人脸的128个向量(嵌入)。 我将人脸的编码/嵌入存储在数据库中,然后检查或说将传入人脸的编码与之前存储的编码匹配,以识别此人。 为了建立一个健壮的系统,我必须存储同一个人的多个编码。当我只使用了一个编码向量,并且匹配了: 从库(获取距离): 这并不是一直有效,因为我只与单个编码进行了比较。为了使系统足以满足大多数情况,我想存储同一个人
利用CoreImage进行人脸识别,可以判断人脸整体位置,以及两只眼睛和嘴巴的大概位置。并根据人脸范围,对图片进行剪切。 [Code4App.com]