libfacedetetion人脸检测(留给自己看的)
2018-01-04 19:57
357 查看
基于摄像头
// libfacedec.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdafx.h"
#include <opencv.hpp>//加载OPENCV库所需的头文件
#include <facedetect-dll.h>//加载libfacedetection库所需的头文件
#include <stdio.h>
#include <windows.h>
#include <fstream>
#include <time.h>
using namespace std;
using namespace cv;
//提示音文件库
#pragma comment(lib, "winmm.lib")
//定义一个缓冲区,大小为:0x20000
#define DETECT_BUFFER_SIZE 0x20000
int _tmain(int argc, _TCHAR* argv[])
{
Mat src;
int scale = 2;
int * pResults = NULL;
// 向系统申请分配指定size个字节的内存空间
unsigned char * pBuffer = (unsigned char *)malloc(DETECT_BUFFER_SIZE);
if (!pBuffer)
{
fprintf(stderr, "Can not alloc buffer.\n");
return -1;
}
VideoCapture cap(0);//加载USB摄像头
if (!cap.isOpened())
{
cout << "Please check your USB camera's interface num." << endl;
return -1;
}
while (true)
{
cap >> src;
resize(src, src, Size(src.cols / scale, src.rows / scale), 1);
time_t t = time(0);
/*char tmp[64];
strftime(tmp, sizeof(tmp), "%Y/%m/%d %X %A", localtime(&t));
Point pt(20, 25);
Scalar color = CV_RGB(0, 255, 255);
putText(src, tmp, pt, CV_FONT_HERSHEY_DUPLEX, 0.5f, color);*/
double t1 = 0;
t1 = (double)cvGetTickCount();//用来计算算法执行时间
if (!src.empty())
{
Mat gray;
cvtColor(src, gray, CV_BGR2GRAY);//图像灰度处理
//加载人脸检测库(libfacedetection),用来检测人脸。参数说明:pBuffer:用于存储人脸检测结果的缓冲存储器,大小为0x20000字节!gray.ptr(0):
//输入图像必须是单通道的灰度图像gray.cols:灰度图像的列。gray.rows:灰度图像的行。gray.step:灰度图像的深度。
if (1)
{
pResults = facedetect_multiview_reinforce(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step, 1.2f, 2, 48, 0, 1);
//pResults = facedetect_multiview(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step, 1.2f, 2, 48, 0, 1);
//加载人脸检测库(libfacedetection)后,会通过68个点来描述人脸面部特征,还可以得到人脸框的信息Rect(p[0], p[1],p[2], p[3])左上角坐标
//:(p[0],p[1])、宽度:p[2]、高度:p3、邻近成员:p[4]、人脸偏转角度:p[5],这些数据都会对后面的检测有帮助。
for (int i = 0; i < (pResults ? *pResults : 0); i++)
{
short * p = ((short*)(pResults + 1)) + 142 * i;
//绘制人脸检测框
//rectangle( src, Rect(p[0], p[1],p[2], p[3]), Scalar(0, 255, 0), 2 );
// 绘制人脸特征点68个
for (int j = 0; j < 68; j++)
{
circle( src, Point((int)p[6 + 2 * j], (int)p[6 + 2 * j + 1]), 1, Scalar(0, 0, 255), 2 );
}
}
}
resize(src, src, Size(src.cols*scale, src.rows*scale), 1);
imshow("测试视频", src);
waitKey(1);
}
t1 = (double)cvGetTickCount() - t1;//相减为算法执行的时间
printf("detection time = %g ms\n", t1 / ((double)cvGetTickFrequency()*1000.));
if (waitKey(1) == 27) //wait for 'esc' key press for 10 ms. If 'esc' key is pressed, break loop
{
cout << "video paused!, press q to quit, any other key to continue" << endl;
if (waitKey(0) == 'q')
{
cout << "terminated by user" << endl;
break;
}
}
}
return 0;
}
基于图片的
// libfacedec.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdafx.h"
#include <opencv.hpp>//加载OPENCV库所需的头文件
#include <facedetect-dll.h>//加载libfacedetection库所需的头文件
#include <stdio.h>
#include <windows.h>
#include <fstream>
#include <time.h>
using namespace std;
using namespace cv;
//提示音文件库
#pragma comment(lib, "winmm.lib")
//定义一个缓冲区,大小为:0x20000
#define DETECT_BUFFER_SIZE 0x20000
int _tmain(int argc, _TCHAR* argv[])
{
int scale = 2;
int * pResults = NULL;
// 向系统申请分配指定size个字节的内存空间
unsigned char * pBuffer = (unsigned char *)malloc(DETECT_BUFFER_SIZE);
if (!pBuffer)
{
fprintf(stderr, "Can not alloc buffer.\n");
return -1;
}
//VideoCapture cap(0);//加载USB摄像头
/*if (!cap.isOpened())
{
cout << "Please check your USB camera's interface num." << endl;
return -1;
}*/
Mat src = imread("D://vvoo//14.jpg");
//cap >> src;
//resize(src, src, Size(src.cols / scale, src.rows / scale), 1);
time_t t = time(0);
/*char tmp[64];
strftime(tmp, sizeof(tmp), "%Y/%m/%d %X %A", localtime(&t));
Point pt(20, 25);
Scalar color = CV_RGB(0, 255, 255);
putText(src, tmp, pt, CV_FONT_HERSHEY_DUPLEX, 0.5f, color);*/
if (!src.empty())
{
Mat gray;
cvtColor(src, gray, CV_BGR2GRAY);//图像灰度处理
//加载人脸检测库(libfacedetection),用来检测人脸。参数说明:pBuffer:用于存储人脸检测结果的缓冲存储器,大小为0x20000字节!gray.ptr(0):
//输入图像必须是单通道的灰度图像gray.cols:灰度图像的列。gray.rows:灰度图像的行。gray.step:灰度图像的深度。
if (1)
{
pResults = facedetect_multiview_reinforce(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step, 1.2f, 2, 48, 0, 1);
//pResults = facedetect_multiview(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step, 1.2f, 2, 48, 0, 1);
//加载人脸检测库(libfacedetection)后,会通过68个点来描述人脸面部特征,还可以得到人脸框的信息Rect(p[0], p[1],p[2], p[3])左上角坐标
//:(p[0],p[1])、宽度:p[2]、高度:p3、邻近成员:p[4]、人脸偏转角度:p[5],这些数据都会对后面的检测有帮助。
for (int i = 0; i < (pResults ? *pResults : 0); i++)
{
short * p = ((short*)(pResults + 1)) + 142 * i;
//绘制人脸检测框
//rectangle( src, Rect(p[0], p[1],p[2], p[3]), Scalar(0, 255, 0), 2 );
// 绘制人脸特征点68个
for (int j = 0; j < 68; j++)
{
circle(src, Point((int)p[6 + 2 * j], (int)p[6 + 2 * j + 1]), 1, Scalar(0, 0, 255), 2);
}
}
}
resize(src, src, Size(src.cols*scale, src.rows*scale), 1);
imshow("测试视频", src);
imwrite("D://vvoo//122.jpg", src);
waitKey(0);
}
return 0;
}
// libfacedec.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdafx.h"
#include <opencv.hpp>//加载OPENCV库所需的头文件
#include <facedetect-dll.h>//加载libfacedetection库所需的头文件
#include <stdio.h>
#include <windows.h>
#include <fstream>
#include <time.h>
using namespace std;
using namespace cv;
//提示音文件库
#pragma comment(lib, "winmm.lib")
//定义一个缓冲区,大小为:0x20000
#define DETECT_BUFFER_SIZE 0x20000
int _tmain(int argc, _TCHAR* argv[])
{
Mat src;
int scale = 2;
int * pResults = NULL;
// 向系统申请分配指定size个字节的内存空间
unsigned char * pBuffer = (unsigned char *)malloc(DETECT_BUFFER_SIZE);
if (!pBuffer)
{
fprintf(stderr, "Can not alloc buffer.\n");
return -1;
}
VideoCapture cap(0);//加载USB摄像头
if (!cap.isOpened())
{
cout << "Please check your USB camera's interface num." << endl;
return -1;
}
while (true)
{
cap >> src;
resize(src, src, Size(src.cols / scale, src.rows / scale), 1);
time_t t = time(0);
/*char tmp[64];
strftime(tmp, sizeof(tmp), "%Y/%m/%d %X %A", localtime(&t));
Point pt(20, 25);
Scalar color = CV_RGB(0, 255, 255);
putText(src, tmp, pt, CV_FONT_HERSHEY_DUPLEX, 0.5f, color);*/
double t1 = 0;
t1 = (double)cvGetTickCount();//用来计算算法执行时间
if (!src.empty())
{
Mat gray;
cvtColor(src, gray, CV_BGR2GRAY);//图像灰度处理
//加载人脸检测库(libfacedetection),用来检测人脸。参数说明:pBuffer:用于存储人脸检测结果的缓冲存储器,大小为0x20000字节!gray.ptr(0):
//输入图像必须是单通道的灰度图像gray.cols:灰度图像的列。gray.rows:灰度图像的行。gray.step:灰度图像的深度。
if (1)
{
pResults = facedetect_multiview_reinforce(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step, 1.2f, 2, 48, 0, 1);
//pResults = facedetect_multiview(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step, 1.2f, 2, 48, 0, 1);
//加载人脸检测库(libfacedetection)后,会通过68个点来描述人脸面部特征,还可以得到人脸框的信息Rect(p[0], p[1],p[2], p[3])左上角坐标
//:(p[0],p[1])、宽度:p[2]、高度:p3、邻近成员:p[4]、人脸偏转角度:p[5],这些数据都会对后面的检测有帮助。
for (int i = 0; i < (pResults ? *pResults : 0); i++)
{
short * p = ((short*)(pResults + 1)) + 142 * i;
//绘制人脸检测框
//rectangle( src, Rect(p[0], p[1],p[2], p[3]), Scalar(0, 255, 0), 2 );
// 绘制人脸特征点68个
for (int j = 0; j < 68; j++)
{
circle( src, Point((int)p[6 + 2 * j], (int)p[6 + 2 * j + 1]), 1, Scalar(0, 0, 255), 2 );
}
}
}
resize(src, src, Size(src.cols*scale, src.rows*scale), 1);
imshow("测试视频", src);
waitKey(1);
}
t1 = (double)cvGetTickCount() - t1;//相减为算法执行的时间
printf("detection time = %g ms\n", t1 / ((double)cvGetTickFrequency()*1000.));
if (waitKey(1) == 27) //wait for 'esc' key press for 10 ms. If 'esc' key is pressed, break loop
{
cout << "video paused!, press q to quit, any other key to continue" << endl;
if (waitKey(0) == 'q')
{
cout << "terminated by user" << endl;
break;
}
}
}
return 0;
}
基于图片的
// libfacedec.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdafx.h"
#include <opencv.hpp>//加载OPENCV库所需的头文件
#include <facedetect-dll.h>//加载libfacedetection库所需的头文件
#include <stdio.h>
#include <windows.h>
#include <fstream>
#include <time.h>
using namespace std;
using namespace cv;
//提示音文件库
#pragma comment(lib, "winmm.lib")
//定义一个缓冲区,大小为:0x20000
#define DETECT_BUFFER_SIZE 0x20000
int _tmain(int argc, _TCHAR* argv[])
{
int scale = 2;
int * pResults = NULL;
// 向系统申请分配指定size个字节的内存空间
unsigned char * pBuffer = (unsigned char *)malloc(DETECT_BUFFER_SIZE);
if (!pBuffer)
{
fprintf(stderr, "Can not alloc buffer.\n");
return -1;
}
//VideoCapture cap(0);//加载USB摄像头
/*if (!cap.isOpened())
{
cout << "Please check your USB camera's interface num." << endl;
return -1;
}*/
Mat src = imread("D://vvoo//14.jpg");
//cap >> src;
//resize(src, src, Size(src.cols / scale, src.rows / scale), 1);
time_t t = time(0);
/*char tmp[64];
strftime(tmp, sizeof(tmp), "%Y/%m/%d %X %A", localtime(&t));
Point pt(20, 25);
Scalar color = CV_RGB(0, 255, 255);
putText(src, tmp, pt, CV_FONT_HERSHEY_DUPLEX, 0.5f, color);*/
if (!src.empty())
{
Mat gray;
cvtColor(src, gray, CV_BGR2GRAY);//图像灰度处理
//加载人脸检测库(libfacedetection),用来检测人脸。参数说明:pBuffer:用于存储人脸检测结果的缓冲存储器,大小为0x20000字节!gray.ptr(0):
//输入图像必须是单通道的灰度图像gray.cols:灰度图像的列。gray.rows:灰度图像的行。gray.step:灰度图像的深度。
if (1)
{
pResults = facedetect_multiview_reinforce(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step, 1.2f, 2, 48, 0, 1);
//pResults = facedetect_multiview(pBuffer, (unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, (int)gray.step, 1.2f, 2, 48, 0, 1);
//加载人脸检测库(libfacedetection)后,会通过68个点来描述人脸面部特征,还可以得到人脸框的信息Rect(p[0], p[1],p[2], p[3])左上角坐标
//:(p[0],p[1])、宽度:p[2]、高度:p3、邻近成员:p[4]、人脸偏转角度:p[5],这些数据都会对后面的检测有帮助。
for (int i = 0; i < (pResults ? *pResults : 0); i++)
{
short * p = ((short*)(pResults + 1)) + 142 * i;
//绘制人脸检测框
//rectangle( src, Rect(p[0], p[1],p[2], p[3]), Scalar(0, 255, 0), 2 );
// 绘制人脸特征点68个
for (int j = 0; j < 68; j++)
{
circle(src, Point((int)p[6 + 2 * j], (int)p[6 + 2 * j + 1]), 1, Scalar(0, 0, 255), 2);
}
}
}
resize(src, src, Size(src.cols*scale, src.rows*scale), 1);
imshow("测试视频", src);
imwrite("D://vvoo//122.jpg", src);
waitKey(0);
}
return 0;
}
相关文章推荐
- 【OpenCV】于仕祺老师免费提供的人脸检测库libfacedetection
- OpenCV学习笔记(11):libfacedetection人脸检测的配置与使用
- 人脸检测库libfacedetection介绍
- 人脸检测库libfacedetection介绍
- 人脸检测--libfacedetection
- 人脸检测工具face_recognition的安装与应用
- 人脸检测源码facedetection
- Android API 人脸检测(Face Detect)
- 快速多尺度人脸检测--Multi-Scale Fully Convolutional Network for Fast Face Detection
- 快速多尺度人脸检测2--Multi-Scale Fully Convolutional Network for Face Detection in the Wild
- 人脸检测之MTCNN训练自己的数据
- 人脸检测-- Face R-FCN + Face R-CNN
- Android应用开发FaceDetector(人脸检测)
- Android API 人脸检测(Face Detect)
- Android API教程:人脸检测(Face Detect)
- [windows caffe]在VGG_FACE上finetune自己的人脸数据集
- 人脸检测“A Fast and Accurate Unconstrained Face Detector”
- deep learning---利用caffe在vgg-face上finetuing自己的人脸数据
- Windows下如何在FDDB数据库上评测自己的人脸检测分类器
- 人脸检测之MTCNN训练自己的数据(部分代码公开!请关注置顶的MTCNN算法优化!)