版权声明:——转载请留言询问—— https://blog.csdn.net/weixin_44344462/article/details/88288506
说明
一个自主的人脸检测项目需要首先创建人脸信息特征库,这就给想体验一下人脸检测新鲜感的朋友设下了一个门槛。但是也就是说我们可以利用别人已经训练好的特征库来进行自己的项目。
这个小项目就是利用一份已经训练好的人脸特征来进行人脸检测,并且本次用到的特征文件是Opencv
官方开源的,实践下来效果虽然不是特别的理想,但是“尝尝鲜”则绰绰有余。
模型
请右键并另存为,或者点击后复制保存,连接不太稳定隔十几秒多次尝试。
检测效果截图
要保证脸部受光较为充足,红色实心方框为后期遮挡处理。
代码
说明
将第
8
行的路径换成下载好的模型路径。
import cv2 as cv
# 人脸检测
def image_faceDetect(image):
# 转换成灰度图像
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
# 载入模型
modePath = 'haarcascade_frontalface_alt_tree.xml'
# 获得检测器
detector = cv.CascadeClassifier(modePath)
# 人脸检测
face = detector.detectMultiScale(gray, 1.8, 1)
# 将检测到的人脸信息框,绘制到原图
for i in face:
x, y, w, h = i
cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)
# 显示
cv.imshow("result", image)
# 摄像头信息获取与图像显示
def video_faceDetect():
# 获取摄像头
capture = cv.VideoCapture(0)
while True:
# 读取摄像头图像
ret, frame = capture.read()
# 反转图像
frame = cv.flip(frame, 1)
# 缩放图像
frame = resize(frame)
# 人脸检测
image_faceDetect(frame)
# 窗口显示
c = cv.waitKey(10)
# Esc退出
if c == 27:
break
# 缩放函数
def resize(image, rate = 2):
w, h, _ = image.shape
w = round(w / rate)
h = round(h / rate)
return cv.resize(image, (h, w))
# 主函数
def main():
video_faceDetect()
if __name__ == "__main__":
main()