人脸识别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[0:first]
    y = s[first+1:]
    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)),2,(0,0,255),-1)
    cv2.imshow('img',img)
    cv2.waitKey(0)

其中 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(0);  
        if (!cap.isOpened())  
        {  
            cerr << "Unable to connect to camera" << endl;  
            return 1;  
        }  
  
        //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(30) != 27)  
        {  
            // 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 = 0; i < faces.size(); ++i)  
                shapes.push_back(pose_model(cimg, faces[i]));  
      
            if (!shapes.empty()) {  
                for (int i = 0; i < 68; i++) {  
                    circle(temp, cvPoint(shapes[0].part(i).x(), shapes[0].part(i).y()), 3, cv::Scalar(0, 0, 255), -1);  
                    //  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[0].part(i).x(), shapes[0].part(i).y()), 3, cv::Scalar(0, 0, 255), -1);  

可以看到shpes[0]代表的是第一个人(可以同时检测到很多个人),part(i)代表的是第i个特征点,x()和y()是访问特征点坐标的途径。

 

每个特征点的编号如下:

在上述画图的基础上加了如下一行代码:

putText(temp, to_string(i), cvPoint(shapes[0].part(i).x(), shapes[0].part(i).y()), CV_FONT_HERSHEY_PLAIN, 1, cv::Scalar(255, 0, 0),1,4);  

效果图:

对照着上图,比如说想获取鼻尖的坐标,那么横坐标就是shapes[0].part[30].x(),其余的类似。

 

在这个的基础上就可以做很多有意思的事情啦,2333

 

最后祝大家开发愉快:)

原贴地址:https://blog.csdn.net/zmdsjtu/article/details/53454071

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为AI语言的代表,Python在人脸识别领域也有广泛的应用。下面介绍一下Python68人脸识别摄像头的实现。 1. 安装必要的库 首先,需要安装OpenCV和dlib库。可以使用pip安装: pip install opencv-python pip install dlib 2. 下载68点人脸特征点数据 在使用dlib库进行人脸识别时,需要使用68点人脸特征点数据。可以在官网上下载: http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 下载完成后,解压缩得到一个.dat文件。 3. 编写代码 接下来,需要编写Python代码进行人脸识别。代码如下: ```python import cv2 import dlib # 加载人脸检测器和68点人脸特征点检测器 detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") # 打开摄像头 cap = cv2.VideoCapture(0) while True: # 读取摄像头画面 ret, frame = cap.read() # 换为灰度图 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 人脸检测 faces = detector(gray, 0) # 遍历每个人脸 for face in faces: # 68特征点检测 landmarks = predictor(gray, face) # 遍历每个特征点 for i in range(68): x = landmarks.part(i).x y = landmarks.part(i).y # 在特征点处画圆 cv2.circle(frame, (x, y), 2, (0, 255, 0), -1) # 显示画面 cv2.imshow("face", frame) # 按q退出 if cv2.waitKey(1) == ord('q'): break # 释放摄像头 cap.release() cv2.destroyAllWindows() ``` 运行代码后,摄像头即可识别人脸并在特征点处画圆。 4. 总结 Python68人脸识别摄像头的实现需要使用OpenCV和dlib库,通过特征点检测可以实现人脸识别。这种方法可以应用于人脸识别、表情识别等领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值