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

前言

本次编写所用的库为于仕祺老师免费提供的人脸检测库。真心好用,识别率和识别速度完全不是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 resultsfor (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_BGR2GRAYcap >> 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目前还没有能够很方面移植的硬件,其二是如果在云端进行的话,传输速度将会对识别效率造成影响。

转载于:https://www.cnblogs.com/mtcnn/p/9412041.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL语句增加字段、修改字段、修改类型、修改默认值

--一、修改字段默认值alter table 表名 drop constraint 约束名字 ------说明&#xff1a;删除表的字段的原有约束alter table 表名 add constraint 约束名字 DEFAULT 默认值 for 字段名称 -------说明&#xff1a;添加一个表的字段的约束并指定默认值--二、修改字段名&#…

node+koa2+mysql搭建博客后台

本文将详细讲解使用nodekoa2mysql搭建博客后台的全过程。 开发环境 node 8.3.0及以上npm 5.3.0及以上mysql 5.7.21具体的环境配置可查看我的上一篇文章 准备工作 npm下载pm2(进程守护)&#xff0c;并设置全局变量创建博客需要的数据库与表 开启mysql并创建数据库test: create d…

ffmpeg使用x264编码的配置+ ffmpeg与 x264编码器参数完整对照表

ffmpeg使用x264编码的配置 ffmpeg与 x264编码器参数完整对照表 分类&#xff1a; 多媒体 2010-07-13 11:31 1072人阅读 评论(0) 收藏 举报 转载自&#xff1a;扶凯[http://www.php-oa.com] 本文链接: http://www.php-oa.com/2009/03/09/ffmpeg_x264.html 转帖:http://rhinghear…

javascript之变量

定义变量方式有var&#xff0c;let&#xff0c;const&#xff0c;变量的类型是根据变量的值来确定&#xff0c;变量的名称跟大多数语言一样&#xff0c;包含数字字母_$,不能以数字开头且区分大小写。 var 最早的定义变量的方式&#xff0c;可重复定义,但请避免这样做。 var a …

Maven理解

2019独角兽企业重金招聘Python工程师标准>>> Maven概念 参考maven入门 冰河winner Maven作为一个构建工具&#xff0c;不仅能帮我们自动化构建&#xff0c;还能够抽象构建过程&#xff0c;提供构建任务实现;它跨平台&#xff0c;对外提供了一致的操作接口&#xff0…

HALCON示例程序measure_circles.hdev测量圆的半径

HALCON示例程序measure_circles.hdev测量圆的半径 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () read_image (Image, ‘circle_plate’) get_image_size (Image, Width, Height) dev_close_window () dev_open_window (0, 0, Width / 2…

OpenTLD 未完成 - 虎头

TLD是一种算法的简称&#xff0c;原作者把它叫做Tracking-Learning-Detection。搞视觉的人看到这个名字都会吓一跳&#xff0c;很ambitious的计划。是09年的工作&#xff0c;不算太久&#xff0c;不过也不太新。网上关于这个的资源其实很多&#xff0c;很大程度和作者开放源代码…

C# FileSystemWatcher 在监控文件夹和文件时的用法

********************************************************************************** 第一个文章: ********************************************************************************** 概述 最近学习FileSystemWatcher的用法,它主要是监控一个文件夹,当文件夹内的文件要…

比微软kinect更强的视频跟踪算法--TLD跟踪算法介绍

TLD (Tracking-Learning-Detection)是英国萨里大学的一个捷克籍博士生在其攻读博士学位期间提出的一种新的单目标长时间&#xff08; long term tracking &#xff09;跟踪算法。该算法与传统跟踪算法的显著区别在于将传统的跟踪算法和传统的检测算法相结合来解决被跟踪目标在被…

HALCON示例程序measure_circuit_width_lines_gauss.hdev电路板线宽检测

HALCON示例程序measure_circuit_width_lines_gauss.hdev电路板线宽检测 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () dev_close_window () read_image (Image, ‘pcb_color’) get_image_size (Image, Width, Height) dev_open_window…

一张图看懂混合云数据同步一站式解决方案

摘要&#xff1a; 针对不同数据库间数据实时同步难的问题&#xff0c;日前&#xff0c;阿里云宣布推出混合云数据同步一站式解决方案&#xff0c;便于广大云产品用户实现实时数据同步的混合云支持&#xff0c;更为方便的是&#xff0c;该功能让本地Oracle也能实现与云上数据库的…

分布式性能测试

Jmeter分布式测试 在使用Jmeter进行性能测试时&#xff0c;如果并发数比较大(比如最近项目需要支持1000并发)&#xff0c;单台电脑的配置(CPU和内存)可能无法支持&#xff0c;这时可以使用Jmeter提供的分布式测试的功能。 一、Jmeter分布式执行原理&#xff1a; 1、Jmeter分布式…

互斥锁pthread_mutex_t的使用

1. 互斥锁创建 有两种方法创建互斥锁&#xff0c;静态方式和动态方式。POSIX定义了一个宏PTHREAD_MUTEX_INITIALIZER来静态初始化互斥锁&#xff0c;方法如下&#xff1a; pthread_mutex_t mutexPTHREAD_MUTEX_INITIALIZER; 在LinuxThreads实现中&#xff0c;pthread_…

无效设备解决办法

touch /etc/ini.d/FirstLoadkill 杀死枪弹柜程序 或重启reboot转载于:https://www.cnblogs.com/yygsj/p/5634384.html

HALCON示例程序measure_grid.hdev使用XLD分割键盘轮廓

HALCON示例程序measure_grid.hdev使用XLD分割键盘轮廓 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () read_image (Image, ‘keypad’) get_image_pointer1 (Image, Pointer, Type, Width, Height) dev_close_window () dev_open_window…

[BZOJ3992]序列统计

DP一下&#xff0c;设$f_{i,j}$表示生成$i$个数且乘积$\%Mj$的方案数&#xff0c;则$f_{i1,l}\sum\limits_{jk\%Ml}[k\in S]f_{i,j}$ 我们很不希望DP式中下标的位置出现乘法&#xff0c;因为这样不好转移&#xff0c;考虑把乘法换成加法 因为模数$M$是质数&#xff0c;所以它有…

socket,TCP/IP的理解(转)

TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族&#xff0c; TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;即传输控制协议/网间协议&#xff0c;定义了主机如何连入因特网及数据如何再它们之间传输的标准&#xff0c; 从字面意思来看TCP…

最小中间和

题目描述 给定一个正整数序列a1,a2,...,an&#xff0c;不改变序列中的每个元素在序列中的位置&#xff0c;把它们相加&#xff0c;并用括号记每次加法所得的和&#xff0c;称为中间和。编程&#xff1a;找到一种方法&#xff0c;添上n-1对括号&#xff0c;加法运算依括号顺序进…

HALCON示例程序measure_metal_part_extended.hdev金属零件尺寸测量

HALCON示例程序measure_metal_part_extended.hdev金属零件尺寸测量 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () read_image (Image, ‘metal-parts/metal-parts-01’) init_visualization (Image, 3, ‘white’, ‘margin’, Width, …

双目匹配与视差计算

立体匹配主要是通过找出每对图像间的对应关系&#xff0c;根据三角测量原理&#xff0c;得到视差图&#xff1b;在获得了视差信息后&#xff0c;根据投影模型很容易地可以得到原始图像的深度信息和三维信息。立体匹配技术被普遍认为是立体视觉中最困难也是最关键的问题&#xf…