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使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 Python
python爬取各类文档方法归类汇总
Mar 22 Python
python检测主机的连通性并记录到文件的实例
Jun 21 Python
Python GUI布局尺寸适配方法
Oct 11 Python
关于python之字典的嵌套,递归调用方法
Jan 21 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
10款最好的Python开发编辑器
Jul 03 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
Python基于read(size)方法读取超大文件
Mar 12 Python
jupyter notebook实现显示行号
Apr 13 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 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
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
实例讲解php实现多线程
2019/01/27 PHP
javascript 有趣而诡异的数组
2009/04/06 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
深入解读JavaScript中的Iterator和for-of循环
2015/07/28 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
详解小白之KMP算法及python实现
2019/04/04 Python
利用Python检测URL状态
2019/07/31 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
Html5实现iPhone开机界面示例代码
2013/06/30 HTML / CSS
荟萃全球保健品:维他购
2018/05/09 全球购物
药学专业个人的自我评价
2013/12/31 职场文书
水利学院求职自荐书
2014/02/01 职场文书
《自选商场》教学反思
2014/02/14 职场文书
《木笛》教学反思
2014/03/01 职场文书
怎么写好自荐书
2014/03/02 职场文书
市级文明单位申报材料
2014/05/07 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
接待员岗位职责
2015/02/13 职场文书
如何写观后感
2015/06/19 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL