文章转载于微信公众号: 小白学视觉
作者:努比
很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头。但是有时,大家又希望能够随时随地观看视频直播。
大多数人会选择使用ip摄像机(internet协议摄像机)而不是cctv(闭路电视),因为它们具有更高的分辨率并降低了布线成本。在本文中,我们将重点介绍ip摄像机。ip摄像机是一种数字摄像机,可以通过ip网络接收控制数据并发送图像数据,并且不需要本地记录设备。大多数ip摄像机都是基于rtsp(实时流协议)的,因此internet浏览器本身“不支持”它。
01.如何使用web浏览器查看实时流媒体
计算机视觉是一个跨学科领域,涉及如何制作计算机以从数字图像或视频获得高层次的理解。为了实现计算机视觉部分,我们将使用python中的
opencv模块,并在web浏览器中显示实时流,我们将使用flask web框架。在进入编码部分之前,让我们首先简要地了解这些模块。如果您已经熟悉这些模块,则可以直接跳到下一部分。
根据wikipedia的说法,flask是用python编写的微型web框架。它被归类为微框架,因为它不需要特定的工具或库。它没有数据库抽象层,表单验证或任何其他现有的第三方库提供公用功能的组件。
根据geeksforgeeks的说法,opencv是用于计算机视觉,机器学习和图像处理的巨大开放源代码库,现在它在实时操作中起着重要作用,这在当今的系统中非常重要。
02.操作步骤
第1步-安装flask和opencv:
可以使用“ _pip install_ flask”和“ _pip install opencv-python_ ”命令。我使用pycharm ide开发flask应用程序。
第2步-导入必要的库,初始化flask应用程序:
现在,我们将导入必要的库并初始化我们的flask应用程序。
#import necessary libraries
第3步-使用opencv捕获视频:
创建一个videocapture()对象以触发相机并读取视频的第一个图像/帧。我们可以提供视频文件的路径,也可以使用数字来指定本地网络摄像头的使用。要触发网络摄像头,我们将“ 0”作为参数传递。为了从ip摄像机捕获实时源,我们提供rtsp链接作为参数。
camera = cv2.videocapture(0)
第4步-添加窗口并从相机生成帧:
gen/_frames()函数进入一个循环,在该循环中,它不断从相机返回帧作为响应块。该函数要求摄像机提供一个帧,然后将其格式化为内容类型为的响应块,并使其屈服image/jpeg,如上所示。代码如下所示:
def gen_frames():
*第5步-为网络应用的默认页面定义应用路由*:
路由指的是应用程序的url模式(例如myapp.com/home或myapp.com/about)。@app.route(/)是flask提供的python装饰器,用于在我们的应用中分配url以便轻松运行。
@app.route('/')
装饰器告诉我们@app,只要用户访问给定的应用程序域(_本地服务器的localhost:5000)_.route(),就执行该index()功能。flask使用jinja模板库渲染模板。在我们的应用程序中,我们将使用模板来呈现html,这些html将显示在浏览器中。
*第6步-定义视频供稿的应用路由:*
@app.route('/video_feed')
“ / video/_feed”路由返回流式响应。由于此流返回要在网页中显示的图像,因此路由的url在image标记的“ osrc”属性中(请参见下面的“ index.html”)。浏览器将通过在其中显示jpeg图像流来自动更新图像元素,因为大多数/所有浏览器都支持多部分响应
让我们看一下我们的index.html文件:
第7步-启动flask服务器:
if __name__ == __main__:
调用app.run()并将web应用程序本地托管在[localhost:5000]上。
“ debug = true”可确保我们不需要在每次进行更改时都运行应用程序,只需在服务器仍在运行时刷新网页即可查看更改。
项目结构:
该项目保存在名为“摄像机检测”的文件夹中。我们运行“ app.py”文件。运行此文件后,我们的应用程序将托管在本地服务器的端口5000上。
只需在运行“ app.py”后在网络浏览器中键入“ localhost:5000”即可打开您的网络应用程序
app.py —这是我们在上面创建的flask应用程序
模板-此文件夹包含我们的“ index.html”文件。在渲染模板时,这在flask中是必需的。所有html文件都放在此文件夹下。
让我们看看当我们运行'app.py'时会发生什么:
在单击提供的url时,我们的web浏览器将打开实时供稿。由于我使用了上面的videocapture(0),因此网络摄像头摘要会显示在浏览器中:
中有来自ip摄像机/网络摄像机的实时视频流,可用于安全和监视目的。
代码链接:https://github.com/nakullakhotia/live-streaming-using-opencv-flask
数字音频放大器
为解决通讯信号问题,苹果2020年或将换用高通基带
STM32单片机看门狗的配置方法
四种数据中心网络虚拟化技术对比
如何使用TOF 3D超感应技术来实现人脸识别支付的详细资料概述
基于OpenCV的网络实时视频流传输教程
瑞萨电子推出具备蓝牙功能的RX23W模块,适用于物联网设备的系统控制与无线通信
迈步助行机器人入选工信部《2023年老年用品产品推广目录》
Altera Stratix V FPGA实现业界第一款单芯片双路100G转发器
C语言实现动态链表的建立
区块链的应用中哪一个是主流方向
国内第一批5G手机降为4G是不可逆转的趋势
realme真我X50 Pro将于3月12日在线上发布
此次网络袭击 研究人员称已找到个人电脑免受新勒索病毒攻击“疫苗”
电脑开机启动时提示(显示)NTLDR文件丢失解决办法及原因分
36氪WISE2022 | 聚势湾区产业生态 芯海科技赋能AIoT智慧发展
Kubernetes是什么,一文了解Kubernetes
余压传感器最重要的两个功能
欧洲发射四颗欧洲伽利略全球导航卫星 距全球定位系统更近一步
中国移动2020年首三季度财报已发布