我正在从事计算机视觉项目,并试图找到一种方法来构建具有现代 UI 的桌面应用程序,该应用程序将能够显示由我的算法处理的实时视频。创建视频流和网络浏览器的代码将在同一台机器上。
我有一个本机 C++ 代码,可以从 IP 摄像机捕获视频,对捕获的帧进行一些处理,并在其上绘制结果。例如 - 它检测人脸并在视频帧上绘制边界框。视频处理代码非常繁重,无法翻译成javascript。
之后,我想在使用 NW.js 构建的桌面应用程序中,在基于 Web 的 GUI 中显示带有框的框架。
问题是如何以尽可能低的 CPU 使用开销显示已处理的帧?
我可以将每一帧压缩成 JPG(PNG/BMP...) 并将其发送到<img>
标签,但这种方式会占用过多的 CPU,这是最糟糕的解决方案。
完美的解决方案应该是通过本机代码将帧数据直接发送到 GPU 上的 WebGL 纹理,但我找不到如何制作它的方法。
RGB32(24) 传输可能会有所妥协,但图像流相当大(大约每秒 200 MB),这是一台 2MP/25fps 网络摄像机的流。在未来,我希望能够在一台 PC 上使用多达 4 个摄像头。
我有使用 Qt 的经验,这个任务可以用 Qt 来解决,但我真的需要一些基于 HTML5 的 GUI 及其动画、样式和其他功能。
我的目标操作系统是 Windows,但最好有跨平台的解决方案。如果 Windows 有问题 - 我可以使用 Linux。