前言
计算机视觉是人工智能中最令人兴奋和最具挑战性的任务之一,有几个软件包可用于解决与计算机视觉相关的问题。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()