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实现拼接多张图片的方法
Dec 01 Python
python使用socket远程连接错误处理方法
Apr 29 Python
python中list列表的高级函数
May 17 Python
安装Python和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
Python从函数参数类型引出元组实例分析
May 28 Python
简单了解python反射机制的一些知识
Jul 13 Python
python 爬取疫情数据的源码
Feb 09 Python
在 Python 中使用 MQTT的方法
Aug 18 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
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
Javascript 解疑
2009/11/11 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
javascript数组去重小结
2016/03/07 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
JavaScript递归操作实例浅析
2016/10/31 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
javascript 单例模式详解及简单实例
2017/02/14 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
Python的词法分析与语法分析
2013/05/18 Python
浅析Python中signal包的使用
2015/11/13 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
Python实现图片拼接的代码
2018/07/02 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
keras 多gpu并行运行案例
2020/06/10 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
护士实习鉴定范文
2013/12/22 职场文书
中学运动会广播稿
2014/01/19 职场文书
竞选班长的演讲稿
2014/04/24 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
导游欢送词
2015/01/31 职场文书
银行工作心得体会范文
2016/01/23 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android