OpenCV 模块可以编译为 WebAssembly 以在 Web 浏览器中使用吗?

问题描述 投票:0回答:1

我目前正在考虑尝试基于网络的增强现实,并想知道如何处理计算机视觉(CV)任务,例如

Occlusion
SLAM
,特别是在不使用
WebXR
的情况下(因为它不是在所有浏览器中可用)。

我知道 C++ 社区中有一些完善的 CV 库,例如

OpenCV
,并且想知道是否有人尝试将其模块编译为
WebAssembly
以在 Web 应用程序中使用(例如与相机源配对等)。 )例如使用
Emscripten
。这可能吗?如果可以的话,我需要特别注意哪些事情?有没有人做过(成功过?)

我从

OpenCV
下载了整个
Github
存储库,然后在使用
 WebAssembly
设置 emcmake 后尝试使用
Emscripten
将特定模块(在本例中为 rgbd)编译为
Ninja
。从概念上讲,该过程有效,但对于库中声明的某些组件总是会失败,但对于
WebAssembly build
来说可能不是必需的,例如“ittnotify”。我一直通过标志(例如
DBUILD_ITT=OFF
)在我的编译设置中关闭它们,但是对于其他组件,编译过程会在很长一段时间后一次又一次地停止,而这些组件对于
WebAssembly
构建来说似乎也不是特别必要。 3-4 小时后我停了下来,因为我不确定这是要去哪里。

当然,肯定有一种比尝试针对我的特定用例从头开始天真地实现所需的 CV 算法更聪明的方法。也许我的处理方式是错误的?有更好的方法来完成这件事吗?请原谅我,我不是这些库的专家,我只有 C/C++ 和构建等基础知识。

编辑:我找到了这个答案WebAssembly包括OpenCV,其中提供了大约6年前对此类任务的引用(https://hacks.mozilla.org/2017/09/bootcamps-web assembly-and-computer-愿景/)。不幸的是,这篇文章和相关的 github 存储库都没有真正解释他们如何执行编译过程,也不清楚 6 年后会发生什么变化。

c++ opencv augmented-reality webassembly emscripten
1个回答
0
投票

我目前正在开发 SWIG Node-API,它完全可以满足您的要求。检查这个项目:https://github.com/mmomtchev/magickwand.js和媒体文章:https://mmomtchev.medium.com/effortless-porting-a-major-c-library-to-node -js-with-swig-napi-3c1a5c4a233f

它包含将此类主要库移植到 JavaScript 的教程 - 既作为本机 Node.js 模块,又作为浏览器的 WASM 二进制文件。

您需要的不仅仅是使用 Emscripten 构建 OpenCV 及其依赖项 - 您还需要一个 JavaScript 接口。 SWIG Node-API 可以自动为您完成此操作。否则你将面临一些非常严肃的工作。 WASM 代码是汇编代码。函数需要经典的 C/C++ 调用约定,并将变量放置在堆栈上。您必须编写大量粘合代码才能使其工作。

© www.soinside.com 2019 - 2024. All rights reserved.