跳转至

使用 Python–OpenCV

统计人脸数量

原文:https://www.geesforgeks.org/count-face-number-use-python-opencv/

先决条件: 使用 dlibopenCV 进行人脸检测

在本文中,我们将使用图像处理来检测和统计人脸的数量。我们不应该得到脸的所有特征。相反,目标是通过一些方法获得边界框,即图像中面部的坐标,这取决于坐标数量所覆盖的不同区域,将计算的面部数量。

必需的库:

  • python 中的 OpenCV 库是一个计算机视觉库,主要用于图像处理、视频处理,以及分析、面部识别和检测等。
  • python 中的 Dlib 库包含预训练的面部地标检测器,用于检测映射到面部面部结构的(x,y)坐标。
  • Numpy 是一个通用的数组处理包。它提供了一个高性能多维数组对象和使用这些数组的工具。

下面是计算人脸数量的分步方法:

步骤 1: 导入所需库。

蟒蛇 3

# Import libraries
import cv2
import numpy as np
import dlib

第二步:打开默认摄像头捕捉人脸,使用dlib库获取坐标。

蟒蛇 3

# (0) in VideoCapture is used to
# connect to your computer's default camera
cap = cv2.VideoCapture(0)
# Get the coordinates
detector = dlib.get_frontal_face_detector()

第三步:统计人脸数量。

  • 连续捕捉画面。
  • 将帧转换为灰度(不需要)。
  • 取一个迭代器 i 并初始化为零。
  • 每次得到框架中面结构的坐标时,将迭代器增加 1。
  • 在每个检测到的人脸周围画出方框以及人脸数量。

蟒蛇 3

while True:

    # Capture frame-by-frame
    ret, frame = cap.read()
    frame = cv2.flip(frame, 1)

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = detector(gray)

    # Counter to count number of faces
    i = 0
    for face in faces:
        x, y = face.left(), face.top()
        x1, y1 = face.right(), face.bottom()
        cv2.rectangle(frame, (x, y), (x1, y1), (0, 255, 0), 2)

        # Increment the iterartor each time you get the coordinates
        i = i+1

        # Adding face number to the box detecting faces
        cv2.putText(frame, 'face num'+str(i), (x-10, y-10),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
        print(face, i)

    # Display the resulting frame
    cv2.imshow('frame', frame)

步骤 4: 终止循环。

蟒蛇 3

# Enter key 'q' to break the loop
if cv2.waitKey(1) & 0xFF == ord('q'):
    break

第五步:开窗。

蟒蛇 3

# When everything done, release
# the capture and destroy the windows
cap.release()
cv2.destroyAllWindows()

以下是上述方法的完整程序:

蟒蛇 3

# Import required libraries
import cv2
import numpy as np
import dlib

# Connects to your computer's default camera
cap = cv2.VideoCapture(0)

# Detect the coordinates
detector = dlib.get_frontal_face_detector()

# Capture frames continuously
while True:

    # Capture frame-by-frame
    ret, frame = cap.read()
    frame = cv2.flip(frame, 1)

    # RGB to grayscale
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = detector(gray)

    # Iterator to count faces
    i = 0
    for face in faces:

        # Get the coordinates of faces
        x, y = face.left(), face.top()
        x1, y1 = face.right(), face.bottom()
        cv2.rectangle(frame, (x, y), (x1, y1), (0, 255, 0), 2)

        # Increment iterator for each face in faces
        i = i+1

        # Display the box and faces
        cv2.putText(frame, 'face num'+str(i), (x-10, y-10),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
        print(face, i)

    # Display the resulting frame
    cv2.imshow('frame', frame)

    # This command let's us quit with the "q" button on a keyboard.
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release the capture and destroy the windows
cap.release()
cv2.destroyAllWindows()

输出:



回到顶部