前言

本次编写所用的库为于仕祺老师免费提供的人脸检测库。真心好用,识别率和识别速度完全不是Opencv自带的程序能够比拟的。将其配合Opencv的EigenFace算法,基本上可以形成一个小型的毕业设计。(我是学机械的啊喂!!)

准备工作

1、下载在GitHub上的人脸检测库。我不提供百度云,只提供网址:https://github.com/ShiqiYu/libfacedetection

2、配置好Opencv。

配置人脸检测库

1、新建一个MFC程序。



2、添加Opencv的属性表。(即配置Opencv)



3、新建一个属性表,命名为libfacedetect。需要注意的是,libfacedetect只可用Win32平台。在VC++目录添加libfacedetect_master中include文件夹和lib库的位置。



4、在链接器中添加附加依赖项。

试编写

1、向MFC中添加一个picture控件,一个button控件,两个Static Text控件。而后向其中一个Static Text添加变量。



2、双击button控件,进行代码页面,编写代码。

添加头文件:

 #include <opencv.hpp>
#include "facedetect-dll.h"
#pragma comment(lib,"libfacedetect.lib")
using namespace cv;

增添一个函数:

void detectAndDisplay(Mat frame)
{
Mat gray;
cvtColor(frame, gray, CV_BGR2GRAY);
int * pResults = NULL;
pResults = facedetect_frontal_tmp((unsigned char*)(gray.ptr(0)), gray.cols, gray.rows, gray.step,
1.2f, 5, 24);
printf("%d faces detected.\n", (pResults ? *pResults : 0));//重复运行
//print the detection results
for (int i = 0; i < (pResults ? *pResults : 0); i++)
{ short * p = ((short*)(pResults + 1)) + 6 * i;
int x = p[0];
int y = p[1];
int w = p[2];
int h = p[3];
int neighbors = p[4]; printf("face_rect=[%d, %d, %d, %d], neighbors=%d\n", x, y, w, h, neighbors);
Point left(x, y);
Point right(x + w, y + h);
rectangle(frame, left, right, Scalar(230, 255, 0), 4); }
imshow("ss", frame);
}

在按钮事件中填写代码:

VideoCapture cap(0);
Mat frame;
while (1)
{
//load an image and convert it to gray (single-channel)
//Mat gray = imread("lena.png");//it is necessary that must have CV_LOAD_IMAGE_GRAYSCALE
//cvtColor(gray, gray, CV_BGR2GRAY);//CV_LOAD_IMAGE_GRAYSCALE IS SAME AS CV_BGR2GRAY
cap >> frame;
if (!frame.empty())
{
detectAndDisplay(frame);
}
int c = waitKey(10);
if ((char)c == 'c') { break; }
}

(非本人照片)

可以看到,已经检测成功,不过没有在控件上显示。

可以通过添加来让其显示到框上。

namedWindow("view", WINDOW_AUTOSIZE);
HWND hWnd = (HWND)cvGetWindowHandle("view");
HWND hParent = ::GetParent(hWnd);
::SetParent(hWnd, GetDlgItem(ID_FACE)->m_hWnd);

我们来看看这个函数逆天的检测时间:增添检测时间的代码:

t = (double)cvGetTickCount();
t = (double)cvGetTickCount() - t;
detect_time = t / 1000 / ((double)cvGetTickFrequency()*1000.);
UpdateData(FALSE);



于老师最近有一篇文章中写到,他的这个人脸检测库是基于LBP与Boost相结合的。所以如果我们选取了足够多,足够好的样本,参数设置正确的话,识别效果从理论上也能远远高于Opencv自带的。此外就是在最近做项目的过程中,发现人脸检测这一端还是不能用深度学习的方法,其一是DL目前还没有能够很方面移植的硬件,其二是如果在云端进行的话,传输速度将会对识别效率造成影响。

如何快糙好猛的使用Shiqi.Yu老师的公开人脸检测库(附源码)的更多相关文章

  1. 如何快糙好猛的使用libfacedetection库【最新版】

    前言 最近已经很少看CSDN了.这一年多准备考研,基本上怕是不会再怎么上了.以前有一个http://blog.csdn.net/mr_curry/article/details/51804072 如何 ...

  2. 你给文字描述,AI艺术作画,精美无比!附源码,快来试试!

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 TensorFlow 实战系列:https://www.showmeai ...

  3. 修改CKplayer.js 源码解决移动端浏览器全屏不能限制快进的问题

    原文地址:https://www.cnblogs.com/jying/p/9642445.html,转载请说明出处. 最近项目需要播放视频且限制未观看部分的快进功能,找了两款js插件ckplayer和 ...

  4. 曹工说Spring Boot源码(30)-- ConfigurationClassPostProcessor 实在太硬核了,为了了解它,我可能debug了快一天

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  5. android狼人杀源码,桌面源码,猎豹快切源码

    Android精选源码 android实现狼人杀app源码 android实现精心打造的Android基础框架源码 android热门电影的客户端源码 android 实现桌面的Launcher源码 ...

  6. 【h5+c3】web前端实战项目、快装webapp手机案例源码

    快装WebApp项目(Web移动端开发案例)webapp移动端项目源码.html5+css3实战案例分享.微信端H5实例开发 简介快装WebApp是一个面向移动端的快速装修app,此项目为手机端:使用 ...

  7. linux 下程序员专用搜索源码用来替代grep的软件ack(后来发现一个更快的: ag), 且有vim插件的

    发现一个比ack更快更好用的:  https://github.com/ggreer/the_silver_searcher   , 使用时命令为ag,它是基于ack的代码二次开发的,所有使用方法基本 ...

  8. Netty 高性能之道 FastThreadLocal 源码分析(快且安全)

    前言 Netty 作为高性能框架,对 JDK 中的很多类都进行了封装了和优化,例如 Thread 类,Netty 使用了 FastThreadLocalRunnable 对所有 DefaultThre ...

  9. 快速排序详解(lomuto划分快排,hoare划分快排,classic经典快排,dualpivot双轴快排源码)

    目录 快速排序(lomuto划分快排,hoare划分快排,classic经典快排,dualpivot双轴快排) 一.快速排序思想 二.划分思想 三.测试用例 快速排序(lomuto划分快排,hoare ...

随机推荐

  1. LR(1)文法分析器 //c++ 实现

    1.先读入终结符,非终结符,和所有产生式. 2.预处理:初始化:getpp()获得每个非终结符在产生式左边时的产生式编号, 记录在 string getp[]中(可以多个). 3.获得所有的符号的fi ...

  2. Struts2的值栈和OGNL牛逼啊

    Struts2的值栈和OGNL牛逼啊 一 值栈简介: 值栈是对应每个请求对象的一套内存数据的封装,Struts2会给每个请求创建一个新的值栈,值栈能够线程安全的为每个请求提供公共的数据存取服务. 二 ...

  3. noip2009提高组解题报告

    NOIP2009潜伏者 题目描述 R 国和S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动. 历尽艰险后,潜伏于 S 国的R 国间谍小C 终于摸清了S 国军用密码的编码规则: 1. S 国 ...

  4. PYTHON 源码

    http://www.wklken.me/index2.html http://blog.csdn.net/dbzhang800/article/details/6683440

  5. 在Oracle Linux上安装dtrace

    http://www.ohsdba.cn/index.php?g=Home&m=Article&a=show&id=171   时间: 2016-10-09 00:40:04 ...

  6. jquery+css实现邮箱自动补全

    今天在公司做一个电子商务网站的注册会员时,要求用户在电子邮箱文本框中输入时,给与热点提示常用的电子邮箱,帮助用户选择,提高体验效果.下面是用Jquery+css实现的邮箱自动补全,供大家参考和学习. ...

  7. java验证身份证号码是否有效源代码 wn25的头像 wn25 23 2015-01-04 20:09 6 基本信息 Java × 1 浏览

    原文:http://www.open-open.com/code/view/1420373343171 1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ...

  8. 在windows中增加linux命令

    在windows中增加linux命令 无它,复用git中的即可:

  9. 有关不同浏览器不同版本号的css以及js计算高度的问题

    1.input在全部浏览器以及全部的版本号中,都是定义了高度.然后再定义padding或者border值.这时候都会撑开.高度是本身的高度在padding值和border值 2.select在gool ...

  10. 浅谈BloomFilter【下】用Java实现BloomFilter

    通过前一篇文章的学习,对于 BloomFilter 的概念和原理.以及误报率等计算方法都一个理性的认识了. 在这里,我们将用 Java'实现一个简单的 BloomFilter . package pr ...