python dlib实现人脸检测

本文介绍了使用Python和Dlib库进行人脸检测的步骤,包括安装Dlib库的注意事项,详细代码展示,以及人脸检测流程。文章还涵盖预处理、随机打光等图像处理技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

毕设的第一步,人脸检测和图像预处理这一模块已经得已解决。第三方库使用了dlib和opencv。那么我就依次来叙述整个流程:

第三方库的安装

opencv是广大python爱好者熟知的库,安装也十分加单,故不做赘述。

pip3 install opencv

重点在于dlib的安装。如果各位同学直接

pip3 install dlib

的话,100%会失败。因为dlib是需要face_recognition库才可以运行。虽然这么说,在执行上述指令时pip是会自动安装face_recognition的。失败的真正原因是dlib不能直接拿来用,需要用一个c++编译器来交叉编译一遍才可以。命令提示符提示的cmake就是用来做这个的。所以首先应该

pip3 install cmake

但是光安装cmake是不行的。上面说了需要一个c++编译器。我本人的做法是安装了cmake的客户端和visual studio IDE,用的VS里面的c++编译器。mingW搞不明白,弄了好久都没安装成功所以放弃了。要注意的是c++编译器必须添加进环境变量才可以(好在vs会自动添加)。

好,那么整理一下思路:

  • 安装c++编译器
  • 将其添加进环境变量
  • 安装cmake客户端
  • pip安装cmake
  • pip安装dlib

提示一下,在安装dlib的时候会花费较多时间。千万不要看命令提示符没动静以为它死了,打开任务管理器你就能看到cmake正在使劲占用cpu资源呢

以上就是全部的准备工作,完成之后下面就可以敲代码了√

完整代码如下:

建议按照程序的执行顺序来阅读代码。复制粘贴到ide里面就可以直接跑,但是记得改x。

(当然如果你的电脑没有E盘那就把face_path也改了吧)

在后文中我会对代码进行详细解释。

import os, sys
import cv2
from random import uniform, randint
from dlib import get_frontal_face_detector as GFFD

#初始化所需参数
def begin():
    gffd = GFFD()                                #dlib的人脸识别器
    wdnm = 'camera'                              #窗口名称 window name 的缩写
    cut_pixel = 64                               #剪裁的像素大小
    cv2.namedWindow(wdnm, cv2.WINDOW_KEEPRATIO)  #AUTOSIZE
    cap  = cv2.VideoCapture(0)                    #调用内置摄像头
    cap.set(3, 320)                              #窗口分辨率 width
    cap.set(4, 240)                              #height
    face_path = 'E:/Faces/my_faces'              #素材的储存路径
    if  not os.path.exists(face_path):           #若不存在则创建路径
        os.makedirs(face_path)
    return cut_pixel, wdnm, gffd, cap, face_path

#图像捕捉&显示
def camera(a, b, c, d):
    ret, image = cap.read()         #变量cap获取到的图像赋给image
    if a == b == c == d == 0:       #首次循环或者未检测到人脸时abcd为0
        frame = cv2.flip(image, 1)  #不带框的frame,下面那个是带框的frame
    else :                          #(image, point, point, (rgb color), width),↓弄个框框住人脸
        frame = cv2.rectangle(cv2.flip(image, 1), (b, a), (c, d), (0, 255, 0), 1)
    cv2.imshow(wdnm, frame)         #根据是否检测到人脸选择显示的frame
    return image                    #分离用来显示的帧frame和用来处理的帧image

#检测人脸区域
def coordinate(sample):
    flip   = cv2.flip(sample, 1)         #镜像图片,否则框脸的时候会错位
    dlibed = gffd(flip, 1)               #调用dlib的识别函数得到人脸区域的rectangles
    if  str(dlibed) == 'rectangles[]':   #当未检测到人脸时dlibed会返回 rectangles[]
        a = b = c = d = 0                #当未检测到人脸时强行给出value来return,且要和下面主函数的对应
    else:
        for x, pot in enumerate(dlibed): #遍历dlibed来获取到人脸区域的坐标点abcd
            a = pot.top() if pot.top() > 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值