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打印斐波拉契数列实例
Jul 07 Python
深入浅析python中的多进程、多线程、协程
Jun 22 Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 Python
Python实现从log日志中提取ip的方法【正则提取】
Mar 31 Python
对python3 一组数值的归一化处理方法详解
Jul 11 Python
python查看模块,对象的函数方法
Oct 16 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 Python
python计算波峰波谷值的方法(极值点)
Feb 18 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
Jun 08 Python
Python使用xpath实现图片爬取
Sep 16 Python
Python基础详解之邮件处理
Apr 28 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
JavaScript 对象模型 执行模型
2009/12/06 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
javascript解析json实例详解
2014/11/05 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
python3使用urllib示例取googletranslate(谷歌翻译)
2014/01/23 Python
编写Python CGI脚本的教程
2015/06/29 Python
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
Python实现的多线程同步与互斥锁功能示例
2017/11/30 Python
解决Pandas的DataFrame输出截断和省略的问题
2019/02/08 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Matplotlib scatter绘制散点图的方法实现
2020/01/02 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
办公室主任主任岗位责任制
2014/02/11 职场文书
运动会跳远加油稿
2014/02/20 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
大学感恩节活动总结
2015/05/05 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL