系列文章目录

前言

人脸识别的第一步,人脸检测。本文章主要写运用dlib的人脸检测器,检测人脸,并绘制出人脸框,其中包括dlib库的安装和具体方法代码。

一、dlib库的安装

这个dlib库的安装烦人的很,老是安装报错。好像是什么环境问题,永远安装不到你的py中。搞不懂,这里用的是离线安装方法。(亲测成功)

首先,dlib的需要先安装cmake和boost。直接安装哈

pip install cmake
pip install boost

然后直接上连接。百度云连接:

链接:https://pan.baidu.com/s/1xMo4jFp0ybo192mg5nArlw 
提取码:ncxc

下载你对应python版本的dlib。(cp36,cp37,cp38就是对应的你的py3.6,3.7,3.8)

我这里用的是conda,所以在Anaconda Prompt中激活我的python环境。

最后,将你的下载的文件拖入pip install 中

如下操作:

它会自动打印出来后缀。回车即可,就此安装成功。

二、使用步骤

1.引入库

环境:python3.8+opencv-python4.7.0.72

import cv2
import dlib
import numpy as np
import matplotlib.pyplot as plt

2.显示图片函数

代码如下(示例):

def show_image(image,title):
    img_RGB = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    plt.title(title)
    plt.imshow(img_RGB)
    plt.axis("off")

显示代码,需要理解的就是在opencv中是BGR显示的,我们需要转换一下,转成RGB,这样不至于你输出的时候变得蓝蓝的。

3.方法

在这之前,我们可以捋一下思路。我们要做的事情很简单,就是识别到一张图片的人脸,然后用一个矩形框圈住人脸,最后显示出来即可。

本次需要识别的图像如下:

(1)那么怎么才能识别到人脸呢?

本次我们使用的是dlib库的方法,也就是要调用dlib库中的人脸检测器。

dlib.get_frontal_face_detector()

调用后,我们可以获得到人脸的坐标位置,那么接下来就很简单了,根据坐标绘制出矩形框,最后显示输出即可。


(2)绘制出人脸框,绘制代码如下:

cv2.rectangle(image,(face.left(),face.top()),(face.right(),face.bottom()),(255,0,0),2)

这里需要了解的是,face.left(),...,..,那些的含义?

绘制矩形框我们需要两个坐标,上坐标和下坐标,得到这两个坐标即可绘制出。

face.left()左,top()上。

face.right()右bottom()下。

就是左上角,和右下角的意思。可以参考我上次的文章


(3)最后就是创建画布,显示图片了

    plt.figure(figsize=(9,6))
    plt.suptitle("face detection with dlib",fontsize=14,fontweight="bold")

三、代码

代码如下:

import cv2
import dlib
import matplotlib.pyplot as plt

# 2 方法:显示图片
def show_image(image,title):
    img_RGB = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    plt.title(title)
    plt.imshow(img_RGB)
    plt.axis("off")

# 3 绘制人脸矩形
def plot_rectangle(image,faces):
    for face in faces:
        cv2.rectangle(image,(face.left(),face.top()),(face.right(),face.bottom()),(255,0,0),2)
    return image

def main():
    # 4 读取图片
    img = cv2.imread("face.jpeg")

    # 5 灰度
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

    # 6 调用dlib库中的检测器
    detector = dlib.get_frontal_face_detector()
    dets_result = detector(gray,1) # 1: 将图片放大一倍

    # 7 绘制框
    img_result = plot_rectangle(img.copy(),dets_result)

    # 8 创建画布
    plt.figure(figsize=(9,6))
    plt.suptitle("face detection with dlib",fontsize=14,fontweight="bold")

    # 9 显示最终结果
    show_image(img_result,"face detection")
    plt.show()
if __name__ == '__main__':
    main()

结果如下:

总结

以上就是今天要讲的内容。总体来说很简单。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐