《计算机视觉》—— 基于dlib库的人检检测

发布于:2024-10-17 ⋅ 阅读:(8) ⋅ 点赞:(0)

一、dlib库的安装

在PyCharm中,dlib库是一个强大的工具,尤其适用于机器学习和计算机视觉任务,如人脸识别等。以下是在PyCharm中安装和使用dlib库的详细指南:

1. 通过PyCharm的Settings安装

  • 打开PyCharm,并创建一个新的项目或打开现有项目。
  • 在菜单栏中选择“File”->“Settings”。
  • 在弹出的窗口中,选择“Project Interpreter”选项卡。
  • 点击右上角的加号按钮,搜索并安装dlib库。

2. 通过Anaconda安装(适用于Windows等操作系统)

  • 下载并安装Anaconda(https://www.anaconda.com/products/individual)。
  • 创建一个虚拟环境:conda create -n virenv(其中virenv是虚拟环境名)。
  • 激活虚拟环境:conda activate virenv
  • 在虚拟环境中安装dlib:conda install -c conda-forge dlib
  • 安装完成后,在PyCharm中配置该虚拟环境的Python解释器。

3. 通过命令行安装

  • 打开PyCharm的终端窗口,或使用系统的命令行工具。
  • 输入命令pip install dlib进行安装。
  • 注意:在安装dlib之前,可能需要先安装CMake和Boost库。这些依赖库的安装方法因操作系统而异,可以参考dlib官方文档中的安装指南(http://dlib.net/compile.html)。

4.懒人安装

  • 以下链接中提供了几种适应python版本的dlib库的.whl文件
  • 下载与你python版本一致的.whl文件,并保存在一个文件夹下,进入这个文件夹下,在文件路径框内输入cmd,回车进入当前文件夹的终端
  • 输入 pip install + dlib库的.whl文件,回车即可安装
    • 如下图:
      在这里插入图片描述
      在这里插入图片描述

二、基于dlib库的人检测

1.对图像进行人脸检测

  • 以下代码中,我们将使用dlib库的人脸检测器来检测图像中的人脸,并在检测到的人脸周围绘制矩形框。

  • 完整代码:

    import cv2      # 导入opencv库
    import dlib     # 导入dlib库
    
    # get frontal face_detector()生成人脸检测器
    # 使用HOG算法、线性分类器、金字塔图像结构和滑动窗口检测等技术。
    # 比opencv提供的harr级联分类器效果更好
    
    detector = dlib.get_frontal_face_detector()  # 构造脸部位置检测器H0G
    image = cv2.imread('face.png')      # 读取图片
    
    # faces = detector(image,n)使用人脸检测器返回检测到的人脸框
    # 参数:
    #   image:待检测的可能含有人脸的图像。
    #   n:表示采用上采样的次数。上采样会让图像变大,能够检测到更多人脸对象,提高小人脸的检测效果
    #       通常建议将此参数设置为 0 或1。较大的值会增加检测的准确性,但会降低处理速度。
    # 返回值:
    #       faces:返回检测图像中的所有人脸框。
    
    faces = detector(image, 1)    
    for face in faces:  # 对每个人脸框进行逐个处理(提取坐标)
        # 获取人脸框的坐标
        x1 = face.left()    # (x1,y1)人脸框的左上角坐标
        y1 = face.top()
        x2 = face.right()   # (x2,y2)人脸框的右下角坐标
        y2 = face.bottom()
        # 绘制人脸框
        cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
    
    # 显示捕获到的各个人脸框
    cv2.imshow('result', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    • 结果如下:
      在这里插入图片描述
  • 可以将自己含有人脸的图片传入代码中,进行人脸检测,这种基于dlib库的人脸检测方法简单有效,可以准确的将人脸检测出来

2.打开电脑摄像头,检测人脸

  • 下面是通过打开电脑的摄像头,进行检测是否有人脸,有人脸则用矩形框框出

  • 完整代码:

    import cv2
    import dlib
    
    detector = dlib.get_frontal_face_detector()  # 构造脸部位置检测器H0G
    
    cap = cv2.VideoCapture(0)   # 0-->打开电脑摄像头, 1-->打开电脑外接的摄像头
    
    if not cap.isOpened():      # 判断摄像头是否正常打开
        print("Cannot open camera")
        exit()
    
    while True:     # 若正常打开摄像头则对摄像头拍摄的每一帧画面进行循环处理
        ret, image = cap.read()  # 如果正确读取一帧图像,ret为True, image-->读取的画面
        image = cv2.flip(image, 1)      # 图片翻转,水平翻转(镜像)
        # 如果没有正确读取到图像,则退出循环
        if not ret:
            print("不能读取摄像头")
            break
        # 人脸检测
        faces = detector(image, 0)
        for face in faces:  # 对每个人脸框进行逐个处理(提取坐标)
            # 获取人脸框的坐标
            x1 = face.left()
            y1 = face.top()
            x2 = face.right()
            y2 = face.bottom()
            # 绘制人脸框
            cv2.rectangle(image, (x1, y1), (x2, y2), (0., 255, 0), 2)
    
        # 显示捕获到的各个人脸框
        cv2.imshow('result', image)
        # 检查是否按下ESC键(ASCII码27),如果按下则退出循环
        if cv2.waitKey(10) == 27:
            break
    # 释放摄像头资源
    cap.release()
    # 关闭所有OpenCV创建的窗口
    cv2.destroyAllWindows()