跳转到主要内容

从网页将实时视频流传输到服务器端的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

转换

创建 转换 或处理实时视频流的钩子。每个转换都接收一个

  1. img:NumPy 数组图像
  2. 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 的转换,则在页面加载时没有默认转换。

自定义主页

要构建自定义主页

  1. 初始化应用程序 而不 使用默认主页。您可以使用 aiohttpFlask 后端。
  2. 使用以下方法添加您自己的主页
    • 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>

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 官方服务器示例构建的。

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

webopencv-0.0.4.tar.gz (13.0 kB 查看哈希值

上传时间

构建分布

webopencv-0.0.4-py3-none-any.whl (12.5 kB 查看哈希值

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面