【OpenCV DNN】Flask 视频监控目标检测教程 08

这篇具有很好参考价值的文章主要介绍了【OpenCV DNN】Flask 视频监控目标检测教程 08。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

欢迎关注『OpenCV DNN @ Youcans』系列,持续更新中


本系列从零开始,详细讲解使用 Flask 框架构建 OpenCV DNN 模型的 Web 应用程序。

上节介绍使用Flask框架构建一个视频流服务器,通过OpenCV捕获摄像头的实时画面,使用人脸检测级联分类器进行人脸识别,并在视频图像中标记检测到的人脸。本节我们添加一个控制按钮“Start/Stop”用来控制开始和停止播放视频流,一个帮助按钮“Help”用来提升帮助学习。


3.8 OpenCV+Flask实时监控人脸识别+控制按钮

进一步地,我们添加一个控制按钮“Start/Stop”用来控制开始和停止播放视频流,一个帮助按钮“Help”用来提升帮助学习。

我们在前端添加控制按钮“Start/Stop”,“Start”按钮用于开始播放视频,“Stop”按钮用于停止播放视频。点击这两个按钮时,会调用相应的 JavaScript 函数来显示或隐藏视频和按钮。帮助按钮“Help”使用JavaScript的alert()方法,在用户点击按钮时显示帮助信息。

在定义的视频流类VideoStream中,增加了使用 Haar 级联检测器检测图片中的人脸,步骤如下:
(1)创建 CascadeClassifier 级联分类器对象,加载人脸检测预训练模型。
(2)对于捕获的视频帧,使用detectMultiScale()方法进行人脸检测,返回检测到人脸的边界矩形。
(4)将边界矩形绘制到视频帧上。


新建 Flask 项目 cvFlask08c

新建一个Flask项目cvFlask08c,本项目的框架与cvFlask08相同。
cvFlask08c项目的文件树如下。

---文件名\
    |---models\
    |    |---haarcascade_frontalface_alt2.xml
    |---templates\
    |    |---index4c.html
|--- cvFlask08c.py

注意增加了一个子目录models保存人脸检测预训练模型文件haarcascade_frontalface_alt2.xml。

OpenCV 提供了级联分类器的方法,也可以直接下载预训练模型后使用 load() 方法加载模型。OpenCV 提供的 Haar 级联检测器的预训练模型位于 OpenCV 安装包的 \data\haarcascades文件夹,或者从 【GitHub】opencv/data at 4.x 下载。

OpenCV 提供的 haar 级联检测器的预训练模型包括:

haarcascade_eye.xml, 眼睛
haarcascade_eye_tree_eyeglasses.xml, 戴眼镜的眼睛
haarcascade_frontalcatface.xml, 正面猫脸
haarcascade_frontalcatface_extended.xml, 正面猫脸
haarcascade_frontalface_alt.xml, 正面人脸
haarcascade_frontalface_alt2.xml, 正面人脸
haarcascade_frontalface_alt_tree.xml, 正面人脸
haarcascade_frontalface_default.xml, 正面人脸
haarcascade_fullbody.xml, 人体
haarcascade_lefteye_2splits.xml, 左眼
haarcascade_license_plate_rus_16stages.xml, 
haarcascade_lowerbody.xml, 
haarcascade_profileface.xml, 
haarcascade_righteye_2splits.xml, 右眼
haarcascade_russian_plate_number.xml, 
haarcascade_smile.xml, 笑脸
haarcascade_upperbody.xml, 上身


Python程序文件

任务逻辑由Python程序文件cvFlask08.py实现,完整代码如下。

# cvFlask08c.py
# OpenCV+Flask 图像处理例程 08
# 通过浏览器播放摄像头实时监控视频+人脸检测+控制按钮
# Copyright 2023 Youcans, XUPT
# Crated:2023-5-18

# coding:utf-8
from flask import Flask, render_template, Response
import numpy as np
import cv2

app = Flask(__name__)

# 定义视频流类
class VideoCamera(object):
    def __init__(self):
        # 创建视频捕获对象,调用笔记本摄像头
        self.video = cv2.VideoCapture(0)  # 修改 API 设置为视频输入

        # 加载 Haar 级联分类器 预训练模型
        model_path = "./models/haarcascade_frontalface_alt2.xml"
        # 加载人脸检测级联分类器
        self.face_cascade = cv2.CascadeClassifier(model_path)
        print(type(self.face_cascade))

    def __del__(self):
        self.video.release()

    def get_frame(self):
        success, image = self.video.read()
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        # 使用级联分类器检测人脸
        faces = self.face_cascade.detectMultiScale(gray, scaleFactor=1.2,
                                                   minNeighbors=5, minSize=(30, 30), maxSize=(300, 300))
        # 绘制人脸检测框
        for (x, y, w, h) in faces:
            cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)

        ret, buffer = cv2.imencode('.jpg', image)  # 编码为 jpg 格式
        frame_byte = buffer.tobytes()  # 转换为 bytes 类型
        return frame_byte

@app.route('/')
def index():
    return render_template('index4c.html')

def gen(camera):
    while True:
        frame = camera.get_frame()
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')

@app.route('/video_feed')
def video_feed():
    return Response(gen(VideoCamera()),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
    print("Running on http://127.0.0.1:5000")
    print("Running on http://192.168.3.249:5000")
    app.run(host='0.0.0.0', port=5000, debug=True)

视频流的网页模板

视频流的网页模板 index4c.html 位于templates文件夹。控制开始和停止播放视频流的控制按钮“Start/Stop”和帮助按钮“Help”,都是在网页模板 index4c.html 中定义的。

内容如下。

<!DOCTYPE html>
<html>
<head>
    <title>Video Streaming</title>
    <style>
    #video {
        display: block;
        margin: 0 auto;
        width: 600px;
        height: 360px;
    }
    #button-container {
        display: flex;
        justify-content: center;
        gap: 100px;
        margin-top: 10px;
    }
    button {
        width: 60px;
        height: 30px;
    }
    </style>
</head>
<body>
    <h2 style="text-align:center">OpenCV+Flask 例程:实时视频监控</h2>
    <img id="video" src="" style="display: block">
    <div id="button-container">
        <button id="start" onclick="start()">Start</button>
        <button id="stop" onclick="stop()" style="display: none">Stop</button>
        <button id="help" onclick="help()">Help</button>
    </div>

    <script>
    function start() {
        document.getElementById("video").src = "{{ url_for('video_feed') }}";
        document.getElementById("start").style.display = "none";
        document.getElementById("stop").style.display = "inline";
    }

    function stop() {
        document.getElementById("video").src = "";
        document.getElementById("start").style.display = "inline";
        document.getElementById("stop").style.display = "none";
    }

    function help() {
        alert("This is an OpenCV+Flask routine. OpenCV reads the camera in real-time, uses a cascaded classifier to detect faces for face detection, and the browser plays monitoring videos in real-time.");
    }
    </script>
</body>
</html>

程序运行

进入cvFlask08c项目根目录,运行程序cvFlask08c.py,启动流媒体服务器。

在局域网内设备(包括移动手机)的浏览器打开http://192.168.3.249:5000,点击“Start”按钮,就可以播放视频监控画面。画面中检测到的人脸,用蓝色方框标记。

【OpenCV DNN】Flask 视频监控目标检测教程 08


【本节完】

下节我们将讨论:OpenCV+Flask 多线程处理实时监控人脸识别。


版权声明:
欢迎关注『OpenCV DNN @ Youcans』系列
youcans@xupt 原创作品,转载必须标注原文链接:
【OpenCV DNN】Flask 视频监控目标检测教程 08
(https://blog.csdn.net/youcans/article/details/131175664)
Copyright 2023 youcans, XUPT
Crated:2023-06-12文章来源地址https://www.toymoban.com/news/detail-487569.html


到了这里,关于【OpenCV DNN】Flask 视频监控目标检测教程 08的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OpenCV DNN】Flask 视频监控目标检测教程 05

    欢迎关注『OpenCV DNN @ Youcans』系列,持续更新中 本系列从零开始,详细讲解使用 Flask 框架构建 OpenCV DNN 模型的 Web 应用程序。 本节介绍用 Flask 构建流媒体服务器,向服务器发送请求可以播放本地视频文件。 本例程使用Flask框架构建一个视频流服务器,通过OpenCV读取本地视频

    2024年02月07日
    浏览(121)
  • 【OpenCV DNN】Flask 视频监控目标检测教程 01

    欢迎关注『OpenCV DNN @ Youcans』系列,持续更新中 【OpenCV DNN】Flask 视频监控目标检测教程 01 本系列从零开始,详细讲解使用 Flask 框架构建 OpenCV DNN 模型的 Web 应用程序。 将OpenCV DNN模型部署到Web端,不需要安装任何依赖,只需要访问Web地址就可以访问和运行应用程序。 面向P

    2024年02月07日
    浏览(111)
  • 【OpenCV DNN】Flask 视频监控目标检测教程 10

    欢迎关注『OpenCV DNN @ Youcans』系列,持续更新中 本系列从零开始,详细讲解使用 Flask 框架构建 OpenCV DNN 模型的 Web 应用程序。 在上节的基础上,本节介绍使用OpenCV DNN对实时视频进行目标检测。DNN目标检测的基本步骤也是加载图像、模型设置和模型推理。 在上节的基础上,本

    2024年02月10日
    浏览(46)
  • 【OpenCV DNN】Flask 视频监控目标检测教程 07

    欢迎关注『OpenCV DNN @ Youcans』系列,持续更新中 本系列从零开始,详细讲解使用 Flask 框架构建 OpenCV DNN 模型的 Web 应用程序。 本节介绍使用Flask框架构建一个视频流服务器,通过OpenCV捕获摄像头的实时画面,使用人脸检测级联分类器进行人脸识别,并在视频图像中标记检测到

    2024年02月13日
    浏览(42)
  • 基于视频技术与AI检测算法的体育场馆远程视频智能化监控方案

    一、方案背景 近年来,随着居民体育运动意识的增强,体育场馆成为居民体育锻炼的重要场所。但使用场馆内的器材时,可能发生受伤意外,甚至牵扯责任赔偿纠纷问题。同时,物品丢失、人力巡逻成本问题突出,体育场馆在给居民提供运动场地的同时,还需特别关注场馆内

    2024年02月07日
    浏览(57)
  • opencv系列(1)--使用opencv和Qt6做一个视频监控器人脸识别

    这个程序是自己的下班之后,看看那个坏东西想来偷看我的电脑。我就随手做的一个程序。 1.能都显示摄像头的内容。 2.如果有人进入摄像头。 3.利用opencv的模型识别人脸,识别到了就保存到自己的电脑里面。 4.并把他的照片显示到界面上一段时间,告诉他,偷窥有罪。 5.程

    2024年02月11日
    浏览(34)
  • 安防监控视频AI智能分析网关V4离岗检测算法配置步骤来啦

    我们的AI边缘计算网关硬件 —— 智能分析网关目前有5个版本:V1、V2、V3、V4、V5,每个版本都能实现对监控视频的智能识别和分析,支持抓拍、记录、告警等,每个版本在算法模型及性能配置上略有不同。硬件可实现的 AI 检测包括:人脸结构化数据、车辆结构化数据、场景检

    2024年02月07日
    浏览(46)
  • opencv dnn模块 示例(19) 目标检测 object_detection 之 yolox

    YOLOX是旷视科技在2021年发表,对标YOLO v5。YOLOX中引入了当年的黑科技主要有三点,decoupled head、anchor-free以及advanced label assigning strategy(SimOTA)。YOLOX的性能如何呢,可以参考原论文图一如下图所示。YOLOX比当年的YOLO v5略好一点,并且利用YOLOX获得当年的Streaming Perception Challenge第一

    2024年02月06日
    浏览(49)
  • 树莓派利用python-opencv使用CSI摄像头调用监控视频

    目录 一、安装python-opencv。 二、使用工具Xshell7和MobaXterm 三、连接并打开CSI摄像头 3.1连线如图所示: 3.2打开摄像头 四、编写摄像头代码调用摄像头         一定要选择配置好的安装python-opencv,不要去配置安装,然后还cmake编译,没有必要基本上安装过程都会报2-3个错误,还

    2023年04月17日
    浏览(55)
  • 【教程】视频汇聚/视频监控管理平台EasyCVR录像存储功能如何优化?具体步骤是什么?

    视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。视频监控系统EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包