在本篇博客中,我们将使用Python和OpenCV库实现一个实时人脸检测的小项目。我们将利用OpenCV中的Haar级联分类器来检测摄像头捕获的图像中的人脸。
项目功能
- 通过摄像头实时捕获视频流。
- 使用Haar级联分类器检测视频帧中的人脸。
- 在检测到的人脸周围绘制矩形框。
- 实时显示检测结果。
- 截图人脸并保存。
环境准备
确保您已经安装了Python和OpenCV。如果尚未安装,请按照以下步骤进行安装:
- 安装Python:请访问Python官网下载并安装适合您操作系统的Python版本。
- 安装OpenCV:在命令行中输入以下命令以安装OpenCV库:
pip install opencv-python
项目代码
首先,我们需要导入所需的库:
import cv2
接下来,加载预训练的Haar级联分类器:
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
现在,我们将编写一个函数来检测图像中的人脸并在检测到的人脸周围绘制矩形框:
def detect_faces(img, cascade):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
return img
最后,我们将捕获摄像头的视频流,并对每一帧应用人脸检测:
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
frame = detect_faces(frame, face_cascade)
cv2.imshow('Real-time Face Detection', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
现在,您可以运行上面的代码,启动实时人脸检测程序。在弹出的窗口中,您应该能看到摄像头捕获的图像,检测到的人脸周围用矩形框标记。按“q”键退出程序。
但是如果要实现截图并且保存到文件夹还需要:
导入额外的库来处理时间和文件操作:
def save_faces(img, faces, output_dir):
for i, (x, y, w, h) in enumerate(faces):
face = img[y:y + h, x:x + w]
filename = os.path.join(output_dir, f'face_{i}.png')
cv2.imwrite(filename, face)
现在,我们需要稍微修改 detect_faces
函数,使其返回检测到的人脸坐标:
def detect_faces(img, cascade):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
return img, faces
接下来,在捕获摄像头的视频流的循环中,我们将为每个检测到的人脸创建一个以实时时间命名的文件夹,并将人脸截图保存到其中:文章来源:https://www.toymoban.com/news/detail-669403.html
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
frame, faces = detect_faces(frame, face_cascade)
if len(faces) > 0:
timestamp = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
output_dir = os.path.join('faces', timestamp)
os.makedirs(output_dir, exist_ok=True)
save_faces(frame, faces, output_dir)
cv2.imshow('Real-time Face Detection', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
现在,当程序检测到人脸时,它将自动截取人脸并将其保存为PNG格式的图像。这些图像将保存在一个名为 "faces" 的文件夹中,该文件夹中包含以实时时间命名的子文件夹。按“q”键退出程序。文章来源地址https://www.toymoban.com/news/detail-669403.html
到了这里,关于使用Python和OpenCV实现实时人脸检测并保存截图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!