图片人脸检测——Dlib

马上就五一了,发呆的时候想到了之前接触过一点儿的Dlib,在c++下的使用,正好今天有人问起了会不会OpenCV,于是…

dlib与OpenCV对比:识别精准度:Dlib >= OpenCV,Dlib更多的人脸识别模型,可以检测脸部68甚至更多的特征点。Dlib是一个跨平台的C++公共库,除了线程支持,网络支持,提供测试以及大量工具等等优点,Dlib还是一个强大的机器学习的C++库,包含了许多机器学习常用的算法。同时支持大量的数值算法如矩阵、大整数、随机数运算等等。Dlib同时还包含了大量的图形模型算法。
Dlib主页:http://dlib.net/
之前是在vs环境下,今天主要说一下在ubuntu下的环境配置。人脸标记的算法也是来自Dlib库,Dlib实现了One Millisecond Face Alignment with an Ensemble of Regression Trees中的算法(http://www.csc.kth.se/~vahidk/papers/KazemiCVPR14.pdf,作者为Vahid Kazemi 和Josephine Sullivan)

安装模块:之前使用的一些模块numpy、python-dev、python-scipy、python-matplotlib等,还是“缺啥装啥”就可以。

安装dlib

首先必须安装libboost,不然是不能使用.so库的:

 sudo apt-get install libboost-python-dev cmake

以dlib-18.17为例:下载在自己的一个目录下 链接:https://pan.baidu.com/s/1QWL1XA9E79KiVuTgotPaIA 提取码:qfmz

之后进入python_examples下使用bat文件进行编译,编译需要先安装libboost-python-dev和cmake

cd  /home/*****/dlib-18.17/python_examples

sudo chmod 777 /home/*****/dlib-18.17/python_examples/compile_dlib_python_module.bat 

./compile_dlib_python_module.bat 

之后会得到一个dlib.so,复制到dist-packages目录下即可使用(视自己的电脑python版本而定的对应目录)

sudo cp dlib.so /usr/local/lib/python2.7/dist-packages/
或者 sudo cp dlib.so /usr/local/lib/python3.5/dist-packages/

安装skimage的时候,发现有问题
(1)from skimage import io 报错,找不到模块,直接安装发现pip版本不对
在这里插入图片描述
(2)sudo apt-get install python-skimage 发现已经安装

在这里插入图片描述
(3)sudo apt-get install scikit-image
在这里插入图片描述

之后使用 sudo -H python3 -m pip install scikit-image完成了.whl的安装

在这里插入图片描述
需要注意的是,在py文件import的时候,不需要from scikit-image import io,否则会报错“SyntaxError: invalid syntax”输入符号错误,直接使用from skimage import io即可。

测试照片:
控制台命令行输入:python3 test.py ./data/2.jpg

# -*- coding: utf-8 -*-

import sys
import dlib
from skimage import io

#使用dlib自带的frontal_face_detector作为我们的特征提取器
detector = dlib.get_frontal_face_detector()

#使用dlib提供的图片窗口
win = dlib.image_window()

#sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始向后依次获取图片路径
for f in sys.argv[1:]:

    #输出目前处理的图片地址
    print("Processing file: {}".format(f))

    #使用skimage的io读取图片
    img = io.imread(f)

    #使用detector进行人脸检测 dets为返回的结果
    dets = detector(img, 1)

    #dets的元素个数即为脸的个数
    print("Number of faces detected: {}".format(len(dets)))

    #使用enumerate 函数遍历序列中的元素以及它们的下标
    #下标i即为人脸序号
    #left:人脸左边距离图片左边界的距离 ;right:人脸右边距离图片左边界的距离 
    #top:人脸上边距离图片上边界的距离 ;bottom:人脸下边距离图片上边界的距离
    for i, d in enumerate(dets):
        print("dets{}".format(d))
        print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}"
            .format( i, d.left(), d.top(), d.right(), d.bottom()))

    #也可以获取比较全面的信息,如获取人脸与detector的匹配程度
    dets, scores, idx = detector.run(img, 1)
    for i, d in enumerate(dets):
        print("Detection {}, dets{},score: {}, face_type:{}".format( i, d, scores[i], idx[i]))    

    #绘制图片(dlib的ui库可以直接绘制dets)
    win.set_image(img)
    win.add_overlay(dets)

    #等待点击
    dlib.hit_enter_to_continue()

在这里插入图片描述

from skimage import io
import matplotlib.pyplot as plt
img=io.imread(‘2.jpg’)
io.imshow(img)
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值