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 相关文章推荐
Python3里的super()和__class__使用介绍
Apr 23 Python
python 回调函数和回调方法的实现分析
Mar 23 Python
开源Web应用框架Django图文教程
Mar 09 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
Jun 18 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
Oct 11 Python
Python单元测试与测试用例简析
Nov 09 Python
Python猴子补丁Monkey Patch用法实例解析
Mar 23 Python
python 6行代码制作月历生成器
Sep 18 Python
Python基于locals返回作用域字典
Oct 17 Python
关于python中remove的一些坑小结
Jan 04 Python
Python基础之字符串格式化详解
Apr 21 Python
关于Python中*args和**kwargs的深入理解
Aug 07 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
WordPress判断用户是否登录的代码
2011/03/17 PHP
php explode函数实例代码
2012/02/27 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
javascript中怎么做对象的类型判断
2013/11/11 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
Vue组件Draggable实现拖拽功能
2018/12/01 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
2020/03/08 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
Python获取央视节目单的实现代码
2015/07/25 Python
Python装饰器基础详解
2016/03/09 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
编辑硕士自荐信范文
2013/11/27 职场文书
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
2014元旦晚会策划方案
2014/02/19 职场文书
商务经理岗位职责
2014/07/30 职场文书