【Jetson Nano】OpenCV 人脸识别 (Python)(全套 可直接用)

38 阅读2分钟

前言

计算机视觉是人工智能中最令人兴奋和最具挑战性的任务之一,有几个软件包可用于解决与计算机视觉相关的问题。OpenCV 是迄今为止最流行的用于解决基于计算机视觉的问题的开源库。

OpenCV 库的下载量超过1800 万次,活跃的用户社区拥有 47000 名成员。它拥有 2500 种优化算法,包括一整套经典和最先进的计算机视觉和机器学习算法,使其成为机器学习领域最重要的库之一。

图像中的人脸检测是一个简单的 3 步过程:

检测图片

第一步 安装并倒入 opencv 模块

pip install opencv-python --- 安装

import cv2 --- 导入

import matplotlib.pyplot as plt # 用于绘制图像

第二步 导入 XML 分类文件并加载

下载 Haar-cascade Classifier XML 文件并将其加载到系统中:

Haar-cascade Classifier 是一种机器学习算法,我们用大量图像训练级联函数。根据不同的目标对象有不同类型的级联分类器,这里我们将使用考虑人脸的分类器将其识别为目标对象。

您可以点击此处找到用于人脸检测的经过训练的分类器 XML 文件

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') --- 加载级联

第三步 检测人脸 并在其周边绘制边界框

# 读取输入图像
img = cv2.imread('test.png')

# 检测人脸
faces = face_cascade.detectMultiScale(image = img, scaleFactor = 1.1, minNeighbors = 5)

# 在人脸周围绘制边界框
for (x, y, w, h) in faces:
      cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

# 显示图像中检测到的人脸数量
print(len(faces),"faces detected!")

# 绘制检测到人脸的图像
finalimg = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
plt.figure(figsize=(12,12))
plt.imshow(finalimg) 
plt.axis("off")
plt.show()

完整代码

import cv2
import matplotlib.pyplot as plt # 用于绘制图像
# 加载级联
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 读取输入图像
img = cv2.imread('DSC_3119.jpg')

# 检测人脸
faces = face_cascade.detectMultiScale(image = img, scaleFactor = 1.1, minNeighbors = 5)

# 在人脸周围绘制边界框
for (x, y, w, h) in faces:
      cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

# 显示图像中检测到的人脸数量
print(len(faces),"faces detected!")

# 绘制检测到人脸的图像
finalimg = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
plt.figure(figsize=(12,12))
plt.imshow(finalimg)
plt.axis("off")
plt.show()

实时检测

直接上代码

import cv2

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 调用摄像头摄像头
cap = cv2.VideoCapture(0)  # opencv的函数,参数0代表调用电脑自带摄像,若改为1则调用外设摄像

while (True):
    # 获取摄像头拍摄到的画面
    ret, frame = cap.read()
    faces = face_cascade.detectMultiScale(frame, 1.3, 5)
    img = frame
    for (x, y, w, h) in faces:
        # 画出人脸框,蓝色,画笔宽度微
        img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

    # 实时展示效果画面
    cv2.imshow('frame2', img)
    # 每5毫秒监听一次键盘动作
    if cv2.waitKey(5) & 0xFF == ord('q'):
        break

# 最后,关闭所有窗口
cap.release()
cv2.destroyAllWindows()

image.png