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的Django框架中simple-todo工具的简单使用
May 30 Python
Python编程判断一个正整数是否为素数的方法
Apr 14 Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 Python
Python元组及文件核心对象类型详解
Feb 11 Python
详解Python下Flask-ApScheduler快速指南
Nov 04 Python
python获取服务器响应cookie的实例
Dec 28 Python
对python while循环和双重循环的实例详解
Aug 23 Python
基于Python解密仿射密码
Oct 21 Python
Python 保存加载mat格式文件的示例代码
Aug 04 Python
JupyterNotebook 输出窗口的显示效果调整实现
Sep 22 Python
使用python操作lmdb对数据读取的实例
Dec 11 Python
selenium自动化测试入门实战
Dec 21 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新手上路(九)
2006/10/09 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
PHP ob缓存以及ob函数原理实例解析
2020/11/13 PHP
js option删除代码集合
2008/11/12 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
2016/11/21 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
解决vue 更改计算属性后select选中值不更改的问题
2018/03/02 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
Python线程的两种编程方式
2015/04/14 Python
Python访问纯真IP数据库脚本分享
2015/06/29 Python
下载官网python并安装的步骤详解
2019/10/12 Python
在Python中实现函数重载的示例代码
2019/12/12 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
新闻专业个人自我评价
2013/09/21 职场文书
年终自我鉴定
2013/10/09 职场文书
初中化学教学反思
2014/01/23 职场文书
党支部公开承诺践诺书
2014/03/28 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
运动会观后感
2015/06/09 职场文书
2016新年致辞
2015/08/01 职场文书
初中生物教学反思
2016/02/20 职场文书
 Python 中 logging 模块使用详情
2022/03/03 Python