人脸识别68个点<转>
【Opencv】 于仕琪 人脸68个特征点分布情况
// 鼻尖 30
// 鼻根 27
// 下巴 8
// 左眼外角 36
// 左眼内角 39
// 右眼外角 45
// 右眼内角 42
// 嘴中心 66
// 嘴左角 48
// 嘴右角 54
// 左脸最外 0
// 右脸最外 16
https://blog.csdn.net/zj360202/article/details/78674700
--------------------------------------------------------------------------
对于一些常用的人脸库常常会提供对应的人脸框的位置以及人脸的特征点的坐标。虽然往往会有68个特征点的坐标,但是如果是用于人脸对齐,并不需要用到所有的点坐标。所以知道特征点的检测顺序能够帮助我们很快的找到我们所需要的特定点坐标。
如图1所示,图中将68个特征点的检测顺序一次标注了出来。(图片摘自http://blog.csdn.net/zmdsjtu/article/details/53454071)
当然不是所有的数据库都提供68个特征点,也有78个点,例如图2所示。(图片摘自http://blog.163.com/huai_jing@126/blog/static/1718619832013111525150259/)
对于更加少的特征点的出现顺序与前面类似,可以推理出来。例如5个特征点的坐标信息可以判别出来每个坐标对应的是那个部位(左右眼,鼻子,左右嘴角)。
当然不是所有的特征点都会按照这个顺序进行变化,但是可以通过简单的算法将每个点一次显示出来,从而可以找到我们所需要的点。(python)
def point_xy(s):
first = s.find(':')
x = s[:first]
y = s[first+:]
return x,y for eachpoint in img_point:
[x,y] = point_xy(eachpoint)
[x,y] = [float(x),float(y)]
cv2.circle(im,(int(x),int(y)),,(,,),-)
cv2.imshow('img',img)
cv2.waitKey()
其中 img_point是保存了所有特征点的一个数组。这样就能够一步一步的看出每个特征点的顺序。
https://blog.csdn.net/u011732139/article/details/56286838?locationNum=4&fps=1
--------------------------------------------------------------
Dlib+opencv实时提取人脸轮廓(windows环境下//Dlib配置入门)
本文主要演示Dlib在windows环境下利用VS配置环境运行成功调用摄像头的实时人脸特征点提取以及轮廓的描绘。
///////////////////////////////软件资源////////////////////////////////
Dlib下载链接:http://download.csdn.net/detail/zmdsjtu/9614780
//官网链接 http://dlib.net
//但最新版的dlib用VS2015会报一个很奇葩的错误,故而推荐上面的下载链接
人脸库下载链接:http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
//////////////////////////////正文/////////////////////////////////////
下载完Dlib之后解压。
接着新建一个空项目,把下载的人脸库(.dat文件解压压缩包后)添加到如下的目录下。
继而在项目里添加Dlib人脸库里的dlib\\all\\source.cpp进入项目
//如果不添加会报错,添加了source.cpp相当于把需要用的东西全引入进来了
接着再添加examples\\webcam_face_pose_ex.cpp进入项目
//这个是我们这次主要测试的提取人脸特征点的重要CPP
接着我们开始配置环境~
首先要配置opencv环境以及加上webcam需要调用的文件的目录
参考如下链接:http://blog.csdn.net/zmdsjtu/article/details/52235056
添加包含目录:
C:\opencv_310\build\include 这个是opencv的包含目录
C:\Users\handsome\Desktop\dlib-master 这个是dlib的主目录
添加库目录:
C:\opencv_310\build\x86\vc14\lib 这个是opencv的lib存储位置
附加依赖项的输入加上:
opencv_world310.lib opencv_ts310.lib 如果是debug或者其他版本的opencv换掉即可
需要注意的几点:
1.配置环境时选择的是X86还是X64以及是Release还是Debug,之后调试的时候也要选择好
2.人脸库(也就是那个一百兆的.dat文件)需要放对位置,不然程序没结果!如果直接打开EXE测试的话直接放到和EXE一个目录即可。
3.电脑一定要有摄像头!这里利用的是opencv调用摄像头
4.程序卡顿是因为detector函数耗时过长,可以考虑压缩画质或者换好一点的处理器
5.笔记本亲测效果远不如外置摄像头
6.这个库可以商用
接着就可以正常运行程序啦~~~
结果如图:
最后祝大家编程愉快:)
https://blog.csdn.net/zmdsjtu/article/details/52422847
-----------------------------------------------------------------------------------------------
Dlib提取人脸特征点(68点,opencv画图)
主要在官网给的Demo基础之上用Opencv把特征点描绘出来了。
很早之前写过一篇配置Dlib环境的博客,现在来稍微梳理下提取特征点的使用方法。
上一篇配置环境博客地址:http://blog.csdn.net/zmdsjtu/article/details/52422847
惯例先放效果图吧:
动图如下:
接着就是简单粗暴的代码:
//@zmdsjtu@163.com
//2016-12-4
//http://blog.csdn.net/zmdsjtu/article/details/53454071
#include <dlib/opencv.h>
#include <opencv2/opencv.hpp>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/image_processing/render_face_detections.h>
#include <dlib/image_processing.h>
#include <dlib/gui_widgets.h> using namespace dlib;
using namespace std; int main()
{
try
{
cv::VideoCapture cap();
if (!cap.isOpened())
{
cerr << "Unable to connect to camera" << endl;
return ;
} //image_window win; // Load face detection and pose estimation models.
frontal_face_detector detector = get_frontal_face_detector();
shape_predictor pose_model;
deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model; // Grab and process frames until the main window is closed by the user.
while (cv::waitKey() != )
{
// Grab a frame
cv::Mat temp;
cap >> temp; cv_image<bgr_pixel> cimg(temp);
// Detect faces
std::vector<rectangle> faces = detector(cimg);
// Find the pose of each face.
std::vector<full_object_detection> shapes;
for (unsigned long i = ; i < faces.size(); ++i)
shapes.push_back(pose_model(cimg, faces[i])); if (!shapes.empty()) {
for (int i = ; i < ; i++) {
circle(temp, cvPoint(shapes[].part(i).x(), shapes[].part(i).y()), , cv::Scalar(, , ), -);
// shapes[0].part(i).x();//68个
}
}
//Display it all on the screen
imshow("Dlib特征点", temp); }
}
catch (serialization_error& e)
{
cout << "You need dlib's default face landmarking model file to run this example." << endl;
cout << "You can get it from the following URL: " << endl;
cout << " http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2" << endl;
cout << endl << e.what() << endl;
}
catch (exception& e)
{
cout << e.what() << endl;
}
}
来看下上面那段代码,所有的需要的特征点都存储在Shapes里。仔细看看下面这行代码:
circle(temp, cvPoint(shapes[].part(i).x(), shapes[].part(i).y()), , cv::Scalar(, , ), -);
可以看到shpes[0]代表的是第一个人(可以同时检测到很多个人),part(i)代表的是第i个特征点,x()和y()是访问特征点坐标的途径。
每个特征点的编号如下:
在上述画图的基础上加了如下一行代码:
putText(temp, to_string(i), cvPoint(shapes[].part(i).x(), shapes[].part(i).y()), CV_FONT_HERSHEY_PLAIN, , cv::Scalar(, , ),,);
效果图:
对照着上图,比如说想获取鼻尖的坐标,那么横坐标就是shapes[0].part[30].x(),其余的类似。
在这个的基础上就可以做很多有意思的事情啦,2333
最后祝大家开发愉快:)
原贴地址:https://blog.csdn.net/zmdsjtu/article/details/53454071
人脸识别68个点<转>的更多相关文章
- Python 3.6.3 利用 Dlib 19.7 和 opencv 实现人脸68点定位 进行人脸识别
0.引言 介绍利用Dlib官方给的人脸识别预测器"shape_predictor_68_face_landmarks.dat"进行68点标定,利用OpenCv进行图像化处理,在人脸 ...
- swift通过摄像头读取每一帧的图片,并且做识别做人脸识别
最近帮别人做一个项目,主要是使用摄像头做人脸识别 github地址:https://github.com/qugang/AVCaptureVideoTemplate 要使用IOS的摄像头,需要使用AV ...
- 使用dlib中的深度残差网络(ResNet)实现实时人脸识别
opencv中提供的基于haar特征级联进行人脸检测的方法效果非常不好,本文使用dlib中提供的人脸检测方法(使用HOG特征或卷积神经网方法),并使用提供的深度残差网络(ResNet)实现实时人脸识别 ...
- python3+dlib人脸识别及情绪分析
一.介绍 我想做的是基于人脸识别的表情(情绪)分析.看到网上也是有很多的开源库提供使用,为开发提供了很大的方便.我选择目前用的比较多的dlib库进行人脸识别与特征标定.使用python也缩短了开发周期 ...
- [深度应用]·实战掌握Dlib人脸识别开发教程
[深度应用]·实战掌握Dlib人脸识别开发教程 个人网站--> http://www.yansongsong.cn/ 项目GitHub地址--> https://github.com/xi ...
- face recognition[翻译][深度人脸识别:综述]
这里翻译下<Deep face recognition: a survey v4>. 1 引言 由于它的非侵入性和自然特征,人脸识别已经成为身份识别中重要的生物认证技术,也已经应用到许多领 ...
- 手把手教你用1行代码实现人脸识别 --Python Face_recognition
环境要求: Ubuntu17.10 Python 2.7.14 环境搭建: 1. 安装 Ubuntu17.10 > 安装步骤在这里 2. 安装 Python2.7.14 (Ubuntu17.10 ...
- Python3+Dlib实现简单人脸识别案例
Python3+Dlib实现简单人脸识别案例 写在前边 很早很早之前,当我还是一个傻了吧唧的专科生的时候,我就听说过人脸识别,听说过算法,听说过人工智能,并且也出生牛犊不怕虎般的学习过TensorFl ...
- 使用OpenCV进行人脸识别
不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...
随机推荐
- java1.8 新特性(五 如何使用filter,limit ,skip ,distinct map flatmap ,collect 操作 java集合)
使用filter 根据 条件筛选 出结果:例如 找出 user 中 age >=15 的用户 package lambda.stream; /** * @author 作者:cb * @vers ...
- Web jsp开发学习——实现页面跳转和传参
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...
- redis问题:redis-server.exe双击闪退 win10系统
转:https://blog.csdn.net/qq_40361770/article/details/80454248 解决方法: 1-win+R 打开命令行 2-cd至redis目录,例如 D:\ ...
- [UE4]继承标准控件
可以继承自标准控件的自定义控件中把常用的方法封装,比如设置字体大小: 调用自定义控件的自定义函数 还可以继续创建子蓝图控件
- Iptabels防火墙和SElinux
两者的区别: iptables用于设置防火墙(firewall), 即管理内外通信. iptables是Linux下功能强大的应用层防火墙工具iptables 能做到“控制内部机器上网与不上网,访问哪 ...
- docker设置容器固定ip
docker安装后,默认会创建三种网络类型,bridge.host和none,可通过如下命令查看 sudo docker network ls 1 bridge:网络桥接 默认情况下启动.创建容器都是 ...
- 更新SAS 9.4(64位) SID的简单方法(可以使用至2018.04.30)
打开SAS,在程序窗口输入: PROC SETINIT RELEASE='9.4'; SITEINFO NAME='NATIONAL PINGTUNG UNI OF SCIENCE&TECH' ...
- 第11章 拾遗5:IPv6和IPv4共存技术(3)_NAT-PT技术【全书完】
6.4 NAT-PT (1)NAT-PT和NAT的差别 ①NAT-PT(附带协议转换的网络地址转换)技术秉承NAT技术的思想,但在原理方面大有不同. ②NAT-PT和NAT本质的区别在于应用场合的不同 ...
- 第10章 网络安全(3)_安全套接字层SSL
4. 安全套接字层 4.1 安全套接字层(SSL)和传输层安全(TLS) (1)SSL/TLS提供的安全服务 ①SSL服务器鉴别,允许用户证实服务器的身份.支持SSL的客户端通过验证来自服务器的证书, ...
- solr7.4 tomcat环境下搭建(windows)
-版本solr-7.4.0 -环境 Windows jdk1.8 -启动方式:部署在apache-tomcat-8.5.28,以下简称Tomcat 1. 将solr-7.4.0\server\sol ...