从网页将实时视频流传输到服务器端的Python OpenCV脚本
项目描述
webopencv · demo · 一键设置
将网络摄像头从网页流式传输到服务器端OpenCV Python脚本。这使您能够在Python中使用网络摄像头,而无需在您的计算机上安装任何东西。
🎥 直播演示: webopencv.glitch.me
👉 1-click WebOpenCV设置: 在Glitch上分支
💻 查看演示源代码: 在Glitch上 或 在Github上
由Alvin Wan创建,用于在线计算机视觉教程
为什么使用WebOpenCV?
WebOpenCV使任何人都能轻松开始在自己的Python中处理自己的网络摄像头。在WebOpenCV之前,您需要(1)在自己的计算机上安装包、包管理器和一些工具,然后(2)祈祷网络摄像头访问能够正常工作。现在,您只需单击一次即可启动一个预先设置的免费远程服务器。无需在您的计算机上进行安装。
入门指南
对于一键WebOpenCV设置,在Glitch上分支。
或者,要在您的计算机上本地设置,请安装Python包。
pip install webopencv
创建一个新文件 app.py
。
import webopencv as wcv
app = wcv.WebApplication()
@app.transform('Hello')
def helloworld(img, frame):
return img
if __name__ == '__main__':
app.run()
然后,运行该文件。
python app.py
默认情况下,这将在 https://localhost:8080
启动一个网络服务器。导航到该 URL,然后点击“启动”以查看演示。注意:在本地开发时,导航到 https://0.0.0.0:8080
不会工作。请确保使用 localhost
。
转换
创建 转换 或处理实时视频流的钩子。每个转换都接收一个
img
:NumPy 数组图像frame
:包含元数据的VideoFrame
对象,例如时间
与 Flask 路由类似,您可以使用装饰器注册转换。将您希望添加到转换中的任何处理添加到其中,并在结束时返回图像。例如,以下示例通过添加黑边将“电影”裁剪添加到实时流中。
@app.transform('Cinematic')
def cinematic(img, frame):
h, w, _ = img.shape
img[-w//4:] = 0
img[:w//4] = 0
默认转换:使用 transform
装饰器中的 default=True
将转换设置为页面加载时的默认转换。请注意,只能设置一个默认转换。如果没有设置 default=True
的转换,则在页面加载时没有默认转换。
自定义主页
要构建自定义主页
- 初始化应用程序 而不 使用默认主页。您可以使用
aiohttp
或Flask
后端。 - 使用以下方法添加您自己的主页
- WebOpenCV 的客户端 JavaScript:
<script src="/client.js"></script>
- 一个
video
标签,具有id="video"
,用于网络摄像头流:<video id="video" autoplay="true" playsinline="true"></video>
- 一个
button
标签,具有id="action"
,用于“启动”和“停止”:<button id="action"></button>
- WebOpenCV 的客户端 JavaScript:
aiohttp:默认后端使用 aiohttp
,因此您可以像对待任何其他 web.Application
对象一样对待 app
。
from aiohttp import web
import webopencv as wcv
app = wcv.WebApplication(use_default_homepage=False)
html = """
<html>
Custom webpage
<button id="action"></button>
<video id="video" autoplay="true" playsinline="true"></video>
<script src="/client.js"></script>
</html>
"""
def index(app):
return web.Response(text=html, content_type="text/html")
if __name__ == '__main__':
app.router.add_get_url('/', index)
app.run()
Flask:您还可以使用 Flask 后端,将 app
当作任何其他 Flask
对象对待。注意,Flask 实现丢弃了 ICE 连接。需要调试。
import webopencv as wcv
app = wcv.Flask(use_default_homepage=False)
@app.route("/")
def index():
return """
<html>
Custom webpage
<button id="action"></button>
<video id="video" autoplay="true" playsinline="true"></video>
<script src="/client.js"></script>
</html>
"""
if __name__ == '__main__':
app.run()
致谢:这个库是基于 aiortc
官方服务器示例构建的。
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装包 的信息。