keras入门系列(四)——使用opencv实现人脸实时检测

【参考视频网址:】https://space.bilibili.com/45151802/video
(老师讲的特别好,良心推荐)
【github代码下载:】https://github.com/Seasea77/keras_small_project_19_07_26

1. 实现功能:使用keras opencv实现人脸检测

2. 文件目录:

在这里插入图片描述

opencv_face_pic.py识别图片中的人脸

opencv_face_video.py识别视频中的人脸

3. opencv_face_video.py

注意:将第8行代码中的haarcascade_frontalface_alt.xml换成自己电脑的中的绝对路径

"""1视频检测人脸"""


import cv2


# 导入人脸检测模型
FaceModel = cv2.CascadeClassifier("D:\\software-installation\\opencv\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt.xml")
# FaceModel = cv2.CascadeClassifier("D:\\software-installation\\opencv\\opencv\\build\\etc\\haarcascades\\haarcascade_eye_tree_eyeglasses.xml")
# 替换成绝对路径,并且用\\双反斜杠

# 开始摄像头
capture = cv2.VideoCapture(0)
# 若有多个摄像头,从0,1,2开始读摄像头。读视频只需要把0换成视频路径加名称。
# opencv读过来的视频是没有声音的。


while True:
    # 读取摄像头数据
    ret, frame = capture.read()  # 不要写反了*********************************1
    # 返回两个值,ret表示读取图像True,frame表示一帧一帧的图

    # 降维打击,3维变成1维,运算轻松很多。
    gray = cv2.cvtColor(src=frame, code=cv2.COLOR_RGB2GRAY)

    # 检测人脸
    faces = FaceModel.detectMultiScale(gray, scaleFactor=1.1)
    print("faces:", faces)
    # 影响整体检测,不能低于1.1,到3左右
    # faces返回的是人脸坐标

    # 标记人脸
    for (x, y, w, h) in faces:  # faces不能是列表,是二维矩阵。
        print(x, y, w, h)
        print("_______________")
        # 画外边框
        cv2.rectangle(frame, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)
        # 添加名字
        cv2.putText(frame, "HD", org=(x, y-10), fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=1, color=(0, 255, 0), thickness=1)

        # 创建窗口
        cv2.namedWindow("LiveFace", cv2.WINDOW_AUTOSIZE)  # 窗口大小不可改变
        # cv2.namedWindow("input image", 1)  # 1为自动调整窗口大小模式, cv2.namedWindow("input image", 0)  #  0窗口大小可以调整
        # cv2.WINDOW_FREERATIO  自适应比例

        # 放窗口里面
        cv2.imshow("LiveFace", frame)
        if cv2.waitKey(1) & 0xFF == ord("x"):  # 在显示窗口上按x结束窗口显示。
            break
        # cv2.waitKey(0)  # 参数none和0是代表无限延迟,而整数数字代表延迟多少ms。
        # cv2.waitKey(1)  # 最高速率取照片。如果把图片关掉,则该指令结束。
capture.release()  # 释放资源
cv2.destroyAllWindows()  # 关闭窗口

4. opencv_face_pic.py

注意:将第6行代码中的haarcascade_frontalface_alt.xml换成自己电脑的中的绝对路径

"""2静态图片检测"""


import cv2

FaceModel = cv2.CascadeClassifier("D:\\software-installation\\opencv\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt.xml")
frame = cv2.imread("test.jpg")
print(frame)
gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
faces = FaceModel.detectMultiScale(gray, scaleFactor=1.2)
# 如果检测出有n张脸,则faces有n行数据 *********************************2
# [[ 634  272  170  170]
#  [ 267  341  295  295]
#  [ 975  393  392  392]
#  [ 108  658  281  281]
#  [1291   27   86   86]
#  [ 711   69  178  178]
#  [ 773  599  272  272]
#  [ 597  587   54   54]]
for (x, y, w, h) in faces:
    cv2.rectangle(frame, (x, y), (x + w, y + h), color=(0, 255, 0), thickness=2)
    cv2.putText(frame, "HDHD", org=(x, y-10), fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=1, color=(0, 255, 0), thickness=1)
    cv2.namedWindow("Face_detection", cv2.WINDOW_AUTOSIZE)
    cv2.imshow("Face_detection", frame)
cv2.waitKey(0)  # 由于只有一张图片
cv2.destroyAllWindows()

5. 测试结果

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值