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制作爬虫采集小说
Oct 25 Python
简单的python协同过滤程序实例代码
Jan 31 Python
对pandas中apply函数的用法详解
Apr 10 Python
python库lxml在linux和WIN系统下的安装
Jun 24 Python
python字典值排序并取出前n个key值的方法
Oct 17 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
Jun 19 Python
python异常触发及自定义异常类解析
Aug 06 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
小结Python的反射机制
Sep 28 Python
Django一小时写出账号密码管理系统
Apr 29 Python
Python批量将csv文件转化成xml文件的实例
May 10 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/06/07 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
Jquery 实现弹出层插件
2015/01/28 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
解决vant-UI库修改样式无效的问题
2020/11/03 Javascript
Python unittest模块用法实例分析
2018/05/25 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
3分钟学会一个Python小技巧
2018/11/23 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
Python 矩阵转置的几种方法小结
2019/12/02 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
春节联欢晚会主持词
2014/03/24 职场文书
社团活动总结怎么写
2014/06/30 职场文书
农业项目建议书
2014/08/25 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技