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

news2024/11/17 13:47:50

欢迎关注『OpenCV DNN @ Youcans』系列,持续更新中
【OpenCV DNN】Flask 视频监控目标检测教程 01

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

    • 1. 面向Python程序的Web框架
    • 2. Flask 框架的安装与使用
      • 2.1 Flask 安装
      • 2.2 Flask 框架例程
      • 2.3 绑定IP和端口
      • 2.4 Flask路由


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

将OpenCV DNN模型部署到Web端,不需要安装任何依赖,只需要访问Web地址就可以访问和运行应用程序。

面向Python程序的Web框架可以用于部署应用程序。Web框架使开发者可以专注于应用程序的核心算法和业务逻辑,而不必具体处理底层细节,例如协议、套接字或进程和线程管理。


1. 面向Python程序的Web框架

Web 框架主要用于网站开发,为开发者实现业务逻辑提供了一套通用方法,可以实现数据的交互和业务功能的完善。

开发者在基于Web框架实现业务逻辑时,可以专注于应用程序的核心算法和业务逻辑,而不必具体处理底层细节,例如协议、套接字或进程和线程管理。在进行数据缓存、数据库访问、数据安全校验等方面,不需要自己重新实现。

Python的开发速度和灵活性使其可以很容易地快速建立和运行网站。,Python在web框架中提供了大量的选择和自由度。

Django
Django是一个免费的、开源的全栈Python Web 开发框架,开发快速、代码较少、可扩展性强。Django 采用 MTV(Model、Template、View)模型组织资源,框架功能丰富,模板扩展选择最多,适合大型网站开发。Django的学习曲线相对陡峭,灵活度较差。

Flask
Flask 是一个Python 编写的Web微框架,让我们可以用Python语言快速实现Web服务。只提供Web服务器支持,不提供全栈开发支持。Flask 非常轻量、学习简单,适合小微原型系统的开发。

Bottle
Bottle 是一个用于 Python 的快速、简单和轻量级的 WSGI 微型网络框架。它作为单个文件模块分发,除了 Python 标准库之外没有任何依赖项。支持干净和动态的 URL。

Flask 是非全栈框架,Flask 具有以下依赖项:

  1. Werkzeug WSGI 工具包: WSGI 实用程序库
  2. Jinja2:模板引擎

Django 和 Flask 均可用于部署开发计算机视觉和深度学习应用程序,但 Flask 的学习曲线更平滑,且 Flask 专注于极简主义。


2. Flask 框架的安装与使用

2.1 Flask 安装

为了使用 Flask 构建计算机视觉 Web 应用程序,首先进行安装:

$ pip3 install flask

安装完成后,通过控制台命令cmd或 Anaconda Prompt (miniconda)进入命令行进行测试。

$ python

>>> import  flask
>>> print(flask.__version__)
2.3.1

在这里插入图片描述


2.2 Flask 框架例程

使用Flask框架编写一个显示“Hello Flask!”的web程序,介绍如何配置、调试Flask框架。

(1)新建一个Flask项目,项目的文件树如下。

---项目文件名\
    |---static\
    |---templates\
    |--- server.py

项目默认配置建立static和templates目录,static目录用来存放静态资源,例如图片、js、css文件等,templates目录存放模板文件。网站逻辑保存在Python程序文件server.py中。

# server.py
from flask import Flask  # 导入 Flask 包

app = Flask(__name__)  # 用当前脚本名称实例化Flask对象

@app.route('/')  # 将函数绑定到指定URL
def hello():
    return 'Hello Flask!'

if __name__ == '__main__':
    app.run()  # 启动一个本地开发服务器,激活该网页

例程首先创建 Flask 类的实例,作为Web服务器的网关接口(Web Server Gateway Interface, WSGI)。然后,route()装饰器用于指定URL的触发函数,将触发函数绑定到指定URL。最后,函数返回在浏览器中显示的内容。

(2)运行Python程序。

运行程序server.py,在控制台显示如下的消息,表明Web服务器已启动。

$ python server.py

* Serving Flask app 'server'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000/
(Press CTRL+C to quit)

(3)在浏览器中访问http://127.0.0.1:5000/。
这将对服务器发送GET请求,该请求将返回相应的消息:

127.0.0.1 - - [26/Apr/2023 21:42:13] “GET / HTTP/1.1” 200 -
127.0.0.1 - - [26/Apr/2023 21:42:13] “GET /favicon.ico HTTP/1.1” 404 -

在这里插入图片描述


2.3 绑定IP和端口

虽然flask命令可以启动一个本地服务器,但是每次程序修改后都需要手动重启服务器。将应用对象的debug属性设为True,可以启用Debug模式。

app.run(debug=True)

在Debug模式下,修改应用代码之后服务器会自动重启,当应用出错时还会提供一个调试器。重新运行Python程序,在控制台将显示如下的消息。

* Serving Flask app 'server2'
* Debug mode: on 

* Restarting with stat
 * Debugger is active!
 * Debugger PIN: 110-148-621

Flask默认的绑定IP为127.0.0.1,端口为5000。通过设置参数host可以自定义IP地址,设置参数port可以自定义端口。

app.run(host=‘0.0.0.0’)

重新运行Python程序,在控制台将显示如下的消息。

 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://192.168.3.249:5000

这样就可以从局域网内的其他设备执行请求。例如,从连接局域网的手机访问IP地址:http://192.168.3.249:5000,将对服务器发送GET请求,并在手机浏览器中显示网页内容。

在这里插入图片描述


2.4 Flask路由

Web框架使用路由技术直接访问所需的页面,而无需从主页导航。

Flask中使用route()装饰器将应用程序的URL绑定到函数,可以实现路由访问。例如:@app.route('/hello')将URL/hello规则绑定到hello_world()函数。

@app.route('/hello')
def hello_world():
   return 'hello world'

用户访问 http://localhost:5000/hello,将在浏览器中显示hello_world()函数的输出。
application对 象的add_url_rule()函数也可用于将URL与函数绑定,如上例所示,使用route()装饰器的目的也由以下表示:

def hello_world():
   return 'hello world'
app.add_url_rule('/', 'hello', hello_world)

通过向规则参数添加变量部分,可以动态构建URL。此变量部分标记为<converter:variable_name>。它作为关键字参数传递给与规则相关联的函数。
例如,在下面的例程中,route()装饰器的规则参数包含附加到URL’/hello’的<name>

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello world!'

@app.route('/user')
def hello_user():
    return 'Hello user!'

@app.route('/hello/<name>')
def hello_name(name):
    return 'Hello %s!' % name

if __name__ == '__main__':
    app.run(host='0.0.0.0')

如果在浏览器中输入http://localhost:5000/hello/youcans作为URL,则’youcans’ 将作为参数提供给 hello_name()函数。该请求将返回相应的消息:

 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:80
 * Running on http://192.168.3.249:80
Press CTRL+C to quit
127.0.0.1 - - [27/Apr/2023 09:06:27] "GET /hello/youcans HTTP/1.1" 200 -
127.0.0.1 - - [27/Apr/2023 09:06:27] "GET /favicon.ico HTTP/1.1" 404 -

在这里插入图片描述

【本节完】
下节内容:使用OpenCV+Flask部署Web应用程序


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

版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:
【OpenCV DNN】Flask 视频监控目标检测教程 01 (https://blog.csdn.net/youcans/article/details/130785571)

Copyright 2023 youcans, XUPT
Crated:2023-05-20

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/548641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023-5-20基于52单片机的智能家居系统(蓝牙)

资料已上传在微信公众号&#xff1a;风吹摇铃 奔赴星海 此系统可根据开发板原理图搭配外载模块实现功能&#xff0c;也可以根据原理图焊接或者PCB焊接。 注意&#xff1a;根据开发板搭载外部模块实现功能&#xff0c;需根据开发板原理图修改代码 0、整理及编写了19个常用的5…

NameServer路由注册与发现

NameServer在RocketMQ中主要承担的就是路由的管理、服务注册、以及服务的发现。在RocketMQ这承担着很重要的责任。 整体架构&#xff1a; 消息生产者在发送消息前需要考虑的问题就是&#xff0c;我需要发给谁&#xff1f;地址在哪儿&#xff1f;对于消费者也一样。那么NameSer…

软件工程 | 期末复习

一、软件与软件危机 1、软件发展经历三个阶段&#xff1a;程序设计、程序系统、软件工程 2、软件的概念&#xff1a;软件是计算机系统与硬件相互依存的另一部分&#xff0c;包括程序、数据以及相关文档的完整集合&#xff0c;软件程序数据文档 数据&#xff1a;使程序能够适…

测试人员转型是大势所趋:我的十年经验告诉我,你必须要行动起来了。

做测试十多年&#xff0c;有不少人问过我下面问题&#xff1a; 现在的手工测试真的不行了吗&#xff1f; 测试工程师&#xff0c;三年多快四年的经验&#xff0c;入门自动化测试需要多久&#xff1f; 自学自动化测试到底需要学哪些东西&#xff1f; 不得不说&#xff0c;随着行…

学习open62541 --- [76] 使用智能指针处理内存释放问题

在使用监测项时&#xff0c;一般都会加一个context&#xff0c;然后在回调函数里使用这个context&#xff0c;这就需要保证context的内存空间在执行回调函数时是有效的。往往有以下三种方法&#xff1a; 使用静态内存空间&#xff1a;使用static创建静态变量&#xff0c;然后把…

【Python 爬虫常见的报错及其解决方法】零基础也能轻松掌握的学习路线与参考资料

Python 爬虫被广泛应用于数据采集和分析。然而&#xff0c;爬虫在运行过程中常常会遇到各种问题和错误&#xff0c;降低了爬虫效率、准确性和可靠性。因此掌握爬虫常见报错及其解决方法是非常关键的。本文将介绍 Python 爬虫常见的报错及其解决方法&#xff0c;并提供参考资料和…

内存泄漏的原因,内存泄漏如何避免?内存泄漏如何定位?

1. 内存溢出 内存溢出 OOM &#xff08;out of memory&#xff09;&#xff0c;是指程序在申请内存时&#xff0c;没有足够的内存空间供其使用&#xff0c;出现out of memory&#xff1b;比如申请了一个int,但给它存了long才能存下的数&#xff0c;那就是内存溢出。 2. 内存泄…

PyTorch LSTM和LSTMP的原理及其手写复现

PyTorch LSTM和LSTMP的原理及其手写复现 0、前言全部参数的细致介绍代码实现Reference 0、前言 关于LSTM的原理以及公式其实在这篇博客一步一步详解LSTM网络【从RNN到LSTM到GRU等&#xff0c;直至attention】讲的非常清晰明了了。 这里就是写出LSTM的pytorch的实现&#xff0c;…

【随笔记】全志 T507 PF4 引脚无法被正常设置为中断模式的问题分析

相关信息 硬件平台&#xff1a;全志T507 系统版本&#xff1a;Android 10 / Linux 4.9.170 问题描述&#xff1a;PF4 无法通过标准接口设置为中断模式&#xff0c;PF1、PF2、PF3、PF5 都可以。 分析过程 一开始以为是引脚被其它驱动占用引起&#xff0c;或者该引脚不具备中断…

高光谱成像技术在果蔬品质检测中的应用

在当前市场经济背景下&#xff0c;食品安全问题是消费者最为关心的问题之一&#xff0c;尤其是果蔬产品&#xff0c;农药残留问题和品质问题直接关系着消费者的权益和人身安全。针对传统化学检测的缺陷&#xff0c;本文结合高光谱成像技术&#xff0c;对其在果蔬品质与安全无损…

【C++】多态的概念/重写/虚表/抽象类

多态 多态的概念多态的定义和实现重写抽象类多态的原理虚表的构建原理虚函数的调用原理 多态的概念 多态就是多种形态&#xff0c;传递不同的对象&#xff0c;会调用不同的方法。 多态的定义和实现 那么在C语法中&#xff0c;多态是如何实现的呢&#xff1f; 我们首先要在继承…

vue学习 - 基础篇

初始工程结构 这里我们使用script标签从cdn获取vue.js, 而不是使用脚手架vue-cli, 因为cdn比较方便一点, 也不用配置node之类的比较麻烦 index.html <!DOCTYPE html> <html><head><title>VueJS Course</title><link rel"stylesheet"…

第三篇、基于Arduino uno,用oled0.96寸屏幕显示dht11温湿度传感器的温度和湿度信息——结果导向

0、结果 说明&#xff1a;先来看看拍摄的显示结果&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;本次使用的oled是0.96寸的&#xff0c;别的规格的屏幕不一定适用本教程&#xff0c;一般而言有显示白色、蓝色和蓝黄一起显示的&#xff0…

RabbitMQ日常使用小结

一、使用场景 削峰、解耦、异步。 基于AMQP(高级消息队列协议)协议来统一数据交互,通过channel(网络信道)传递信息。erlang语言开发&#xff0c;并发量12000&#xff0c;支持持久化&#xff0c;稳定性好&#xff0c;集群不支持动态扩展。 RabbitMQ的基本概念 二、组成及工作流…

可见性原子性有序性的+线程传参的方式+Java如何实现多个线程之间共享数据+线程间通信+死锁产生

//为了均衡CPU和内存的速度差异,增加了缓存 导致了可见性的问题; //操作系统增加了进程 线程 分时复用CPU,均衡CPU和io设备的速速差异 导致了原子性问题; //jvm指令重排序(优化指令排序) 导致了有序性的问题 可见性问题是指 线程A修改共享变量,修改后CPU缓存中的数据没有及时同…

Emacs之目前最快补全插件lsp-bridge(八十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

数据分析12——Pandas中数据合并方法

0、前言&#xff1a; 在pandas中进行数据合并的操作和数据库中的join操作非常类似。 1、merge横向合并&#xff1a; 前言&#xff1a;该函数只能做横向合并函数名&#xff1a;merge()函数参数&#xff1a; left: 数据类型为’DataFrame | Series’&#xff0c;需要进行合并的…

[CTF/网络安全] 攻防世界 PHP2 解题详析

[CTF/网络安全] 攻防世界 PHP2 解题详析 index.php.phps扩展名姿势 翻译&#xff1a;你能给这个网站进行身份验证吗&#xff1f; index.php index.php是一个常见的文件名&#xff0c;通常用于Web服务器中的网站根目录下。它是默认的主页文件名&#xff0c;在访问一个网站时&am…

说说计算这事儿:从开关到人工智能

目录 一 前言 二 计算历史 三 计算探秘 四 算力优化 五 未来展望 一 前言 计算本身其实是一个比较抽象的词&#xff0c;或者说比较笼统。很多场景都可能用到计算这个词&#xff0c;因此具体的含义就需要根据上下文来确定。今天我们讨论的计算&#xff0c;是比较狭义的计算…

【环境准备】在虚拟机的Ubuntu下安装VS Code并配置C/C++运行环境

1.点击进入 vscode官网 下载.deb安装包 2.启动虚拟机下的Ubuntu&#xff0c;Windows下的Xftp和Xshell Xftp&#xff1a;用于将刚刚在Windows下下载好的vscode.deb安装包传输到Ununtu中。Xshell&#xff1a;用于远程登录Ununtu&#xff0c;进行 vscode.deb 安装包安装&#xff…