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使用logging结合decorator模式实现优化日志输出的方法
Apr 16 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
Python实现字典按照value进行排序的方法分析
Dec 23 Python
Python实现字典的遍历与排序功能示例
Dec 23 Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
对python判断是否回文数的实例详解
Feb 08 Python
numpy实现神经网络反向传播算法的步骤
Dec 24 Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
Jun 02 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 curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
php自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
JavaScript闭包详解
2015/02/02 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
vue按需加载实例详解
2019/09/06 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
测试工程师程序员求职信范文
2014/02/20 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
金融专业银行实习证明模板
2014/11/28 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
房产电话营销开场白
2015/05/29 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js