dlib人脸检测功能介绍

本文主要介绍三个点:
1. 如何单独建立一个工程,使用dlib的人脸检测功能。
2. 提高人脸检测率的两个方法
3. 加速人脸检测的方法
下面围绕这几个点展开叙述。

建人脸检测工程

1 . 首先我们先使用上期说的examples里的人脸检测。
我们只要将face_detection_ex设为启动项,即可运行。效果如下:

2. 建立单独的工程。像其他正常的方法,建立一般的工程。然后
在项目 属性中选择C/C++ :
常规-》附加包含目录:填写之前准备好的dlib的include的路径,我这里是:D:\dlib_win32\include
预处理器定义:
WIN32
_WINDOWS
DLIB_PNG_SUPPORT
DLIB_JPEG_SUPPORT
NDEBUG
DLIB_HAVE_AVX
链接器-》常规-》附加库目录:填写你要加的库目录。我这里是
D:\dlib_win32\lib
输入-》附加依赖项:dlib.lib
命令行-》其它选项:/arch:AVX
最后在配置属性-》调试中添加:你要检测的图片的路径,
main.cpp可以使用dlib提供的官方示例:

// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
/*This example program shows how to find frontal human faces in an image.  Inparticular, this program shows how you can take a list of images from thecommand line and display each on the screen with red boxes overlaid on eachhuman face.The examples/faces folder contains some jpg images of people.  You can runthis program on them and see the detections by executing the following command:./face_detection_ex faces/*.jpgThis face detector is made using the now classic Histogram of OrientedGradients (HOG) feature combined with a linear classifier, an image pyramid,and sliding window detection scheme.  This type of object detector is fairlygeneral and capable of detecting many types of semi-rigid objects inaddition to human faces.  Therefore, if you are interested in making yourown object detectors then read the fhog_object_detector_ex.cpp exampleprogram.  It shows how to use the machine learning tools which were used tocreate dlib's face detector. Finally, note that the face detector is fastest when compiled with at leastSSE2 instructions enabled.  So if you are using a PC with an Intel or AMDchip then you should enable at least SSE2 instructions.  If you are usingcmake to compile this program you can enable them by using one of thefollowing commands when you create the build project:cmake path_to_dlib_root/examples -DUSE_SSE2_INSTRUCTIONS=ONcmake path_to_dlib_root/examples -DUSE_SSE4_INSTRUCTIONS=ONcmake path_to_dlib_root/examples -DUSE_AVX_INSTRUCTIONS=ONThis will set the appropriate compiler options for GCC, clang, VisualStudio, or the Intel compiler.  If you are using another compiler then youneed to consult your compiler's manual to determine how to enable theseinstructions.  Note that AVX is the fastest but requires a CPU from at least2011.  SSE4 is the next fastest and is supported by most current machines.  
*/#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/gui_widgets.h>
#include <dlib/image_io.h>
#include <iostream>using namespace dlib;
using namespace std;// ----------------------------------------------------------------------------------------int main(int argc, char** argv)
{  try{if (argc == 1){cout << "Give some image files as arguments to this program." << endl;return 0;}frontal_face_detector detector = get_frontal_face_detector();image_window win;// Loop over all the images provided on the command line.for (int i = 1; i < argc; ++i){cout << "processing image " << argv[i] << endl;array2d<unsigned char> img;load_image(img, argv[i]);// Make the image bigger by a factor of two.  This is useful since// the face detector looks for faces that are about 80 by 80 pixels// or larger.  Therefore, if you want to find faces that are smaller// than that then you need to upsample the image as we do here by// calling pyramid_up().  So this will allow it to detect faces that// are at least 40 by 40 pixels in size.  We could call pyramid_up()// again to find even smaller faces, but note that every time we// upsample the image we make the detector run slower since it must// process a larger image.pyramid_up(img);// Now tell the face detector to give us a list of bounding boxes// around all the faces it can find in the image.std::vector<rectangle> dets = detector(img);cout << "Number of faces detected: " << dets.size() << endl;// Now we show the image on the screen and the face detections as// red overlay boxes.win.clear_overlay();win.set_image(img);win.add_overlay(dets, rgb_pixel(255,0,0));cout << "Hit enter to process the next image..." << endl;cin.get();}}catch (exception& e){cout << "\nexception thrown!" << endl;cout << e.what() << endl;}
}// ----------------------------------------------------------------------------------------

然后就可以人脸检测了。如下是我的效果。

提高人脸检测率的两个方法

  1. 确保检测图片是检测器的两倍。这第一点是十分有用的,因为脸部检测器搜寻的人脸大小是80*80或者更大。
    因此,如果你想找到比80*80小的人脸,需要将检测图片进行上采样,我们可以调用pyramid_up()函数。
    执行一次pyramid_up()我们能检测40*40大小的了,如果我们想检测更小的人脸,那还需要再次执行pyramid_up()函数。
    注意,上采样后,速度会减慢!*/
    pyramid_up(img);//对图像进行上采用,检测更小的人脸。
  2. 在程序中使用:

    array2d<rgb_pixel> img;
    取代:
    array2d<unsigned char> img;

这个我试验过了,有些图片使用’rgb_pixel‘就检测不出来,‘unsigned \ char’就可以。可能是前者使用的rgb信息而后者只使用了灰度信息。

加速人脸检测

可以参考这两篇文章。这也是为什么我们要在命令行-》其它选项:/arch:AVX 加的原因。

  • 跨平台使用Intrinsic函数范例1——使用SSE、AVX指令集 处理 单精度浮点数组求和(支持vc、gcc,兼容Windows、Linux、Mac)

  • Why is dlib slow?

参考文献:

  1. http://dlib.net/
  2. http://blog.csdn.net/sunshine_in_moon/article/details/50149339

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

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

相关文章

ios网络开发 网络状态检查

http://www.cnblogs.com/hanjun/archive/2012/12/01/2797622.html 网络连接中用到的类&#xff1a; 一.Reachability 1.添加 Reachability 的.h和.m文件&#xff0c;再添加SystemConfiguration.framework。 2.Reachability中定义了三种网络状态&#xff1a; typedef Num{ NotR…

《众妙之门——网页排版设计制胜秘诀》——3.4 展现品牌视觉的同时保持网页的可读性...

本节书摘来自异步社区《众妙之门——网页排版设计制胜秘诀》一书中的第3章&#xff0c;第3.4节&#xff0c;作者&#xff1a; 【德】Smashing Magazine 译者&#xff1a; 侯景艳 , 范辰 更多章节内容可以访问云栖社区“异步社区”公众号查看。 3.4 展现品牌视觉的同时保持网页的…

vs2013创建及使用DLL

这几天看了许多关于生成Dll的博文&#xff0c;很有感触&#xff0c;遂整理在此&#xff0c;以供自己后续参考。 VS2013创建DLL 我们使用vs2013来生成Dll&#xff0c;其实使用其他的版本也是同理如此。步骤如下&#xff1a; 单击“新建项目”&#xff0c;选择“Win32 项目”&a…

iOS UISegmentedControl 的使用

当用户输入不仅仅是布尔值时&#xff0c;可使用分段控件&#xff08;UISegmentedControl&#xff09;。分段控件提供一栏按钮&#xff08;有时称为按钮栏&#xff09;&#xff0c;但只能激活其中一个按钮。分段控件会导致用户在屏幕上看到的内容发生变化。它们常用于在不同类别…

js粘贴板为什么获取不到图片信息_【第1829期】复制黏贴上传图片和跨浏览器自动化测试...

前言这个操作体验倒是不错。今日早读文章由丁香园蒋璇投稿分享。蒋璇, 前端开发攻城狮, 现任职于丁香园. 英语爱好者, 测试驱动开发(TDD)&行为驱动开发(BDD)推崇者. 先专注于 https://github.com/Jiang-Xuan/tuchuang.space 项目的测试驱动开发探索正文从这开始~~在网页中上…

《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一2.7 横式构图和竖式构图...

本节书摘来自异步社区出版社《淘宝网开店 拍摄 修图 设计 装修 实战150招》一书中的第2章&#xff0c;第2.7节&#xff0c;作者&#xff1a; 葛存山&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.7 横式构图和竖式构图 横幅画面&#xff0c;即画面底边…

python request file upload_Python基于requests实现模拟上传文件

方法1&#xff1a; 1.安装requests_toolbelt依赖库 #代码实现 def upload(self): login_token self.token.loadTokenList() for token in login_token: tempPassword_url self.config[crm_test_api]/document/upload tempPassword_data self.data_to_str.strToDict(title:1.…

《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》——6.5节光照的每顶点计算与每片元计算...

本节书摘来自异步社区《OpenGL ES 2.0游戏开发&#xff08;上卷&#xff09;&#xff1a;基础技术和典型案例》一书中的第6章&#xff0c;第6.5节光照的每顶点计算与每片元计算&#xff0c;作者 吴亚峰&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 6.5 光照…

如何在Debian上安装配置ownCloud

如何在Debian上安装配置ownCloud 据其官方网站&#xff0c;ownCloud可以让你通过一个Web界面或者WebDAV访问你的文件。它还提供了一个平台&#xff0c;可以轻松地查看、编辑和同步您所有设备的通讯录、日历和书签。尽管ownCloud与广泛使用Dropbox非常相似&#xff0c;但主要区别…

[转]js判断url是否有效

本文转自&#xff1a;http://www.cnblogs.com/fumj/p/3490121.html 方法一:(仅适用于ie) function CheckStatus(url){XMLHTTP new ActiveXObject("Microsoft.XMLHTTP")XMLHTTP.open("HEAD",url,false)XMLHTTP.send()return XMLHTTP.status200}function Ne…

32位md5解密_冰蝎特征检测及报文解密

点击“蓝字”关注我们&#xff0c;不迷路~‍‍前言19年驻场于某金融单位。参加19年9月、11月两次攻防演练&#xff0c;负责攻防演练组织、技术支持和复盘。期间&#xff0c;多个攻击队伍使用冰蝎 webshell &#xff0c;防守方监测时确实各 IDS 确实报出 webshell 连接&#xff…

《移动App测试的22条军规》—App测试综合案例分析23.13节测试微信App的流量和电量消耗...

本节书摘来自异步社区《移动App测试的22条军规》一书中的App测试综合案例分析&#xff0c;第23.13节测试微信App的流量和电量消耗&#xff0c;作者黄勇&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 23.13 测试微信App的流量和电量消耗关于微信App消耗流…

python做数据可视化的代码_Python数据可视化正态分布简单分析及实现代码

Python说来简单也简单&#xff0c;但是也不简单&#xff0c;尤其是再跟高数结合起来的时候。。。 正态分布&#xff08;Normaldistribution&#xff09;&#xff0c;也称“常态分布”&#xff0c;又名高斯分布&#xff08;Gaussiandistribution&#xff09;&#xff0c;最早由A…

wpf window 不执行show 就不能load执行_Numpy反序列化命令执行漏洞分析(CVE-2019-6446)附0day...

1、介绍 NumPy 是 Python 机器学习库中之一&#xff0c;主要对于多为数组执行计算。NumPy 提供大量的 函数和操作&#xff0c;能够帮助程序员便利进行数值计算。在 NumPy 1.16.0 版本之前存在反序列化 命令执行漏洞&#xff0c;用户加载恶意的数据源造成命令执行。2、环境 软件…

使用Def文件导出dll

前面我们介绍了dll的生成&#xff0c;大多数是使用extern "C"__declspec(dllexport)函数名的方法导出dll。其实我们还有另一种方法来导出dll。 先介绍参考文献&#xff1a; 1.dll导出声明相关 2.VS2012中 C创建DLL图解 3.DLL中导出函数的两种方式(dllexport与.…

XML语法学习

本文章集合两篇博文而写&#xff0c;两篇博文地址&#xff1a; XML学习总结(二)——XML入门&#xff1a; XML基础<第一篇> XML简介 XML是一种标记语言&#xff0c;用于描述数据&#xff0c;它提供一种标准化的方式来来表示文本数据。XML文档以.xml为后缀。需要彻底注…

FM实现F4帮助系列三:弹出框多筛选…

FM实现F4帮助系列三&#xff1a;弹出框多筛选条件的搜索帮助&#xff08;根据搜索帮助筛选字段&#xff09;函数&#xff1a;F4IF_GET_SHLP_DESCRF4IF_START_VALUE_REQUEST效果图&#xff1a;本例子代码&#xff1a;找到需要的帮助:*&------------------------------------…

《计算复杂性:现代方法》——0.2 判定问题/语言

本节书摘来自华章计算机《计算复杂性&#xff1a;现代方法》一书中的第0章&#xff0c;第0.2节&#xff0c;作者 &#xff3b;美&#xff3d;桑杰夫阿罗拉&#xff08;Sanjeev Arora&#xff09;&#xff0c;博阿兹巴拉克&#xff08;Boaz Barak&#xff09;&#xff0c;译 骆吉…

python从date目录导入数据集_使用python划分数据集

无论是训练机器学习或是深度学习&#xff0c;第一步当然是先划分数据集啦&#xff0c;今天小白整理了一些划分数据集的方法&#xff0c;希望大佬们多多指教啊&#xff0c;嘻嘻~ 首先看一下数据集的样子&#xff0c;flower_data文件夹下有四个文件夹&#xff0c;每个文件夹表示一…

开源牛人 zcbenz

事情是这样的&#xff0c;微软推出了Visual Studio Code&#xff0c;我很好奇他怎么做跨平台的&#xff0c;所以就找找资料&#xff0c;在他的网站中是这么描述的&#xff1a; Architecturally, Visual Studio Code combines the best of web, native, and language-specific t…