前言
人脸检测的目标是找出图像中所有的人脸对应的位置,算法的输出是人脸的外接矩形在图像中的坐标。使用 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.xmlhaarcascade_frontalface_alt2.xmlhaarcascade_frontalface_alt_tree.xmlhaarcascade_frontalface_default.xmlhaarcascade_profileface.xml说明:使用 haar 特征和 cascade 检测器进行目标检测属于传统机器学习的方式,检测精度较低,效果并不是非常理想
从图像中检测人脸
'''Author: CloudSir@Github: https://github.com/CloudSirDate: 2023-04-05 10:03:53LastEditTime: 2023-04-05 10:08:37LastEditors: CloudSirDescription: '''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)
原图:
结果:
从视频中检测人脸
'''Author: CloudSir@Github: https://github.com/CloudSirDate: 2023-04-03 19:50:34LastEditTime: 2023-04-05 09:59:51LastEditors: CloudSirDescription: '''import cv2import numpy as npcap = 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/CloudSirDate: 2023-04-03 19:50:34LastEditTime: 2023-04-05 09:59:51LastEditors: CloudSirDescription: '''import cv2import numpy as npcap = 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
致正在学习计算机视觉的小伙伴们:
计算机视觉往往离不开 Python 语言,Python 是调用计算机视觉工具的必备语言,如 OpenCV、TensorFlow、PyTorch、PaddlePaddle 等都需要使用 Python。
如果你正打算学习计算机视觉,而恰巧又是一个 Python 新手,需要找一个可以在线学习的网站,我建议你去牛客网 ,他们的python题单是从最基础的输出、字符串格式化输出开始,经过运算符、列表、循环语句、条件语句、元组、字典、函数等知识点,一步一步教你慢慢学会Python那为数不多的基本语法,最后再配合上8道具有实践意义的综合实践题,可以帮你更加有效的巩固前面学会的知识。
牛客网 - Python学习专区加油,希望在计算机视觉这条路上的前方遇见你。