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+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
Python随机函数库random的使用方法详解
Aug 21 Python
python+selenium 点击单选框-radio的实现方法
Sep 03 Python
kafka-python 获取topic lag值方式
Dec 23 Python
Python递归实现打印多重列表代码
Feb 27 Python
Python模块相关知识点小结
Mar 09 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 Python
python判断一个变量是否已经设置的方法
Aug 13 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
python中os.remove()用法及注意事项
Jan 31 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类
2008/04/09 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
利用PHP命令行模式采集股票趋势信息
2016/08/09 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
复选框全选与全不选操作实现思路
2013/08/18 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
基于jQuery实现响应式圆形图片轮播特效
2015/11/25 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
使用原生JS实现滚轮翻页效果的示例代码
2020/05/31 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
高性能装备提升营地:Kammok
2019/02/27 全球购物
Timberland德国官网:靴子、鞋子、衣服、夹克及配件
2019/12/10 全球购物
大学同学十年聚会感言
2014/02/21 职场文书
团委竞选演讲稿
2014/04/24 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
年终考核实施方案
2014/05/26 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书