利用OpenCV实现一个简单的实时人脸检测项目并显示FPS
Posted Blue Hole
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用OpenCV实现一个简单的实时人脸检测项目并显示FPS相关的知识,希望对你有一定的参考价值。
活动地址:毕业季·进击的技术er
在本期中,我将利用OpenCV实现一个简单的人脸识别,其中我们用到的权重文件,大家自行下载
效果:
我们本期主要用的是cv2.detectMultiScale()这个函数,cv2.detectMultiScale是Opencv中做人脸检测的时候的一个级联分类器。
Haar特征
Haar特征是一种反映图像的灰度变化,像素分模块求差值的一种特征。它分为三类:边缘特征、线性特征、中心特征和对角线特征。用黑白两种矩形框组合成特征模板,在特征模板内用 黑色矩形像素和 减去 白色矩形像素和来表示这个模版的特征值。
例如:脸部的一些特征能由矩形模块差值特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述在特定方向(水平、垂直、对角)上有明显像素模块梯度变化的图像结构。
如果对Haar特征感兴趣的同学,可以阅读此文章。
函数介绍
detectMultiScale(image,scaleFactor,minNeighbors,minSize,maxSize)
参数
- image:表示的是要检测的输入图像
- scaleFactor:为每一个图像尺度中的尺度参数,默认值为1.1。scaleFactor参数可以决定两个不同大小的窗口扫描之间有多大的跳跃,这个参数设置的大,则意味着计算会变快,但如果窗口错过了某个大小的人脸,则可能丢失物体。
- minNeighbors:参数为每一个级联矩形应该保留的邻近个数,默认为3。minNeighbors控制着误检测,默认值为3表明至少有3次重叠检测,才认为人脸确实存。
- minSize:为目标的最小尺寸,低于minSize不会被检测出来
- maxSize:为目标的最大尺寸,高于maxSize不会检测出来
整体代码:
import time
import cv2
# 获取摄像头
cap = cv2.VideoCapture(1)
# 返回当前时间戳
start_time = time.time()
counter = 0
# 设置分类器
classfier = cv2.CascadeClassifier("D:\\\\openCV\\\\haarcascade_frontalface_alt2.xml")
while cap.isOpened():
ret, frame = cap.read()
# 将图像转换为灰度图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 检测视频中所有的人脸
faceRects = classfier.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
# 检测到人脸进行画框
if len(faceRects) > 0:
for faceRect in faceRects:
x, y, w, h = faceRect
# 对每一个检测到的人脸区域绘制检测方框
cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), (188,143,143), 2)
# 按q结束显示
if cv2.waitKey(1) & 0xff == ord("q"):
break
counter += 1#计算帧数
#实时显示帧数
if (time.time() - start_time) != 0:
cv2.putText(frame, "FPS 0".format(float('%.1f' % (counter / (time.time() - start_time)))), (100, 50),
cv2.FONT_HERSHEY_SIMPLEX, 2, (30,144,255),3)
# 显示图像
cv2.imshow('frame', frame)
# 释放资源
cap.release()
cv2.destroyAllWindows()
由于篇幅其中大多参数以及相关的一些代码,还需大家仔细揣摩。
欢迎大家交流
效果如下:
活动地址:毕业季·进击的技术er
以上是关于利用OpenCV实现一个简单的实时人脸检测项目并显示FPS的主要内容,如果未能解决你的问题,请参考以下文章
使用OpenCV Android SDK从摄像头帧实时检测人脸
OpenCV+OpenVINO实现人脸Landmarks实时检测