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黑魔法之编码转换
Jan 25 Python
Python 中pandas.read_excel详细介绍
Jun 23 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
python机器学习之KNN分类算法
Aug 29 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
Sep 28 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
Python序列类型的打包和解包实例
Dec 21 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
基于python实现监听Rabbitmq系统日志代码示例
Nov 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
PHP使用Redis长连接的方法详解
2018/02/12 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
Javascript 中的类和闭包
2010/01/08 Javascript
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
浅析document.ready和window.onload的区别讲解
2013/12/18 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
2016/05/24 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
Angular实现的简单定时器功能示例
2017/12/28 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python脚本实现网卡流量监控
2015/02/14 Python
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
Python优先队列实现方法示例
2017/09/21 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
Python 如何提高元组的可读性
2019/08/26 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
.NET面试题:什么是反射
2016/09/30 面试题
旅游管理专业学生求职信
2013/09/28 职场文书
美容师的职业规划书
2013/12/27 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
2016年母亲节广告语
2016/01/28 职场文书
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL