前言
人脸检测的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸的外接矩形在图像中的坐标。使用 haar 特征和 cascade 检测器进行人脸检测是一种传统的方式,下面将给出利用 OpenCV 中的 haarcascade 进行人脸检测的代码。
程序流程
代码
import cv2
# 原图
img = xxx
# 使用预训练模型创建 Cascade 分类器
getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)
faceCascade = getCascade("haarcascade_frontalface_default.xml")
# 获取原图像灰度图
imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 识别,将结果存储到 faces 变量中
faces = faceCascade.detectMultiScale(imgGray , 1.2 , 8)
for (x,y,w,h) in faces:
# 将结果绘制到原图中
cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255) ,2)
# 显示图像
cv2.imshow("img", img)
cv2.waitKey(0)
可选的人脸检测模型(区别是检测速度和精度不同):
- haarcascade_frontalface_alt.xml
- haarcascade_frontalface_alt2.xml
- haarcascade_frontalface_alt_tree.xml
- haarcascade_frontalface_default.xml
- haarcascade_profileface.xml
说明:使用 haar 特征和 cascade 检测器进行目标检测属于传统机器学习的方式,检测精度较低,效果并不是非常理想文章来源:https://www.toymoban.com/news/detail-411341.html
从图像中检测人脸
'''
Author: CloudSir
@Github: https://github.com/CloudSir
Date: 2023-04-05 10:03:53
LastEditTime: 2023-04-05 10:08:37
LastEditors: CloudSir
Description:
'''
import cv2
# 原图
img = cv2.imread("./test.jpg")
# 使用预训练模型创建 Cascade 分类器
getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)
faceCascade = getCascade("haarcascade_frontalface_default.xml")
# 获取原图像灰度图
imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 识别,将结果存储到 faces 变量中
faces = faceCascade.detectMultiScale(imgGray , 1.2 , 8)
for (x,y,w,h) in faces:
# 将结果绘制到原图中
cv2.rectangle(img, (x,y), (x+w,y+h), (0,0,255) ,2)
cv2.imshow("img", img)
cv2.waitKey(0)
原图:
结果:
文章来源地址https://www.toymoban.com/news/detail-411341.html
从视频中检测人脸
'''
Author: CloudSir
@Github: https://github.com/CloudSir
Date: 2023-04-03 19:50:34
LastEditTime: 2023-04-05 09:59:51
LastEditors: CloudSir
Description:
'''
import cv2
import numpy as np
cap = cv2.VideoCapture("./test.mp4")
while cap.isOpened():
img = cap.read()[1]
getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)
faceCascade = getCascade("haarcascade_frontalface_default.xml")
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(imgGray, 1.2, 8)
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
print(x, y, w, h)
cv2.imshow("cam", img)
if cv2.waitKey(1) == ord('q'): # 按下q退出
cv2.destroyAllWindows()
cap.release()
break
从摄像头中实时检测人脸
'''
Author: CloudSir
@Github: https://github.com/CloudSir
Date: 2023-04-03 19:50:34
LastEditTime: 2023-04-05 09:59:51
LastEditors: CloudSir
Description:
'''
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while cap.isOpened():
img = cap.read()[1]
img = cv2.flip(img, 1) # 镜像
getCascade = lambda model_name: cv2.CascadeClassifier(cv2.data.haarcascades + model_name)
faceCascade = getCascade("haarcascade_frontalface_default.xml")
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(imgGray, 1.2, 8)
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)
print(x, y, w, h)
cv2.imshow("cam", img)
if cv2.waitKey(1) == ord('q'): # 按下q退出
cv2.destroyAllWindows()
cap.release()
break
到了这里,关于【计算机视觉·OpenCV】使用Haar+Cascade实现人脸检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!