Linux下python与C++使用dlib实现人脸检测


Posted in Python onJune 29, 2018

python 与 C++ dlib人脸检测结果对比,供大家参考,具体内容如下

说明:

由于项目需求发现Linux下c++使用dlib进行人脸检测和python使用dlib检测,得到的结果出入比较大,于是写了测试用例,发现影响结果的原因有但不限于:

1.dlib版本不同(影响不大,几个像素的差别)
2.dlib 人脸检测中detector()第二个参数的设置测试结果如下:

Linux下python与C++使用dlib实现人脸检测

python

PDlib.py:

# -*- coding: utf-8 -*-

import sys
import cv2 
import dlib

from skimage import io
detector = dlib.get_frontal_face_detector()
win = dlib.image_window()

for f in sys.argv[1:]: 
  img = io.imread(f)

  dets = detector(img,1) #使用detector进行人脸检测

  for i, d in enumerate(dets):
    x = d.left()
    y = d.top()
    w = d.right()
    h = d.bottom()   
    cv2.rectangle(img, (x, y), (w, h), (0, 255, 0))
    print("({},{},{},{})".format( x, y, (w-x), (h-y)))

  win.set_image(img)
  io.imsave('./P_Dlib_test.jpg',img)

  #等待点击
  dlib.hit_enter_to_continue()

C++

CDlib.cpp:

#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/opencv.h>
#include "opencv2/opencv.hpp"
#include <iostream>

using namespace dlib;
using namespace std;

cv::Rect Detect(cv::Mat im)
{
  cv::Rect R;
  frontal_face_detector detector = get_frontal_face_detector();
  array2d<bgr_pixel> img; 
  assign_image(img, cv_image<uchar>(im));
  std::vector<rectangle> dets = detector(img);//检测人脸

  //查找最大脸
  if (dets.size() != 0)
  {
    int Max = 0;
    int area = 0;
    for (unsigned long t = 0; t < dets.size(); ++t)
    {      
      if (area < dets[t].width()*dets[t].height())
      {
        area = dets[t].width()*dets[t].height();
        Max = t;
      }
    }

    R.x = dets[Max].left();
    R.y = dets[Max].top();
    R.width = dets[Max].width();
    R.height = dets[Max].height();
    cout<<"("<<R.x<<","<<R.y<<","<<R.width<<","<<R.height<<")"<<endl;
  }
  return R;
}

int main(int argc, char** argv)
{
  if (argc != 2) {
    fprintf(stderr, "请输入正确参数\n");
    return 1;
  }  
  string path = argv[1];
  try
  {    
    cv::Mat src, dec;
    src = cv::imread(path);
    src.copyTo(dec);
    cv::cvtColor(dec, dec, CV_BGR2GRAY);
    cv::Rect box;
    box = Detect(dec);
    cv::rectangle(src, box, cv::Scalar(0, 0, 255), 1, 1, 0);    
    cv::imshow("frame", src);
    cv::imwrite("./C_Dlib_test.jpg", src);
    cv::waitKey(0);//等待建入 
  }
  catch (exception& e)
  {
    cout << e.what() << endl;
  }
}

项目编译及运行

python

运行脚本 python PDlib.py G:\DlibTest\data\bush.jpg

C++

  • 创建编译文件夹 mkdir cbuild
  • 切换到编译目录 cd cbuild
  • 生成makefile文件 cmake ..
  • 编译项目 make
  • 运行可执行文件 ./DlibTest G:\DlibTest\data\bush.jpg

Demo:点击下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
采用python实现简单QQ单用户机器人的方法
Jul 03 Python
Python写的创建文件夹自定义函数mkdir()
Aug 25 Python
python并发编程之多进程、多线程、异步和协程详解
Oct 28 Python
itchat接口使用示例
Oct 23 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
Jan 23 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 Python
Pythony运维入门之Socket网络编程详解
Apr 15 Python
详解Python3 pandas.merge用法
Sep 05 Python
python保留小数位的三种实现方法
Jan 07 Python
Python AutoCAD 系统设置的实现方法
Apr 01 Python
idea2020手动安装python插件的实现方法
Jul 17 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 #Python
Python数据持久化shelve模块用法分析
Jun 29 #Python
python 统计列表中不同元素的数量方法
Jun 29 #Python
python计算两个数的百分比方法
Jun 29 #Python
python统计字母、空格、数字等字符个数的实例
Jun 29 #Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 #Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 #Python
You might like
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
php字符串截取函数用法分析
2014/11/25 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
详解JS函数stack size计算方法
2018/06/18 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
解决vue-cli 打包后自定义动画未执行的问题
2019/11/12 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
Python字符串中查找子串小技巧
2015/04/10 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
python os.path模块常用方法实例详解
2018/09/16 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
如何客观的进行自我评价
2013/12/17 职场文书
食堂员工工作职责
2013/12/18 职场文书
培训主管岗位职责
2014/02/01 职场文书
黄继光的英雄事迹材料
2014/02/13 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
小学教师评语大全
2014/04/23 职场文书