【问题标题】:OpenCV.js is not working vue.js (electron-builder)OpenCV.js 不工作 vue.js (electron-builder)
【发布时间】:2020-09-01 18:50:39
【问题描述】:

我正在使用 electron 和 vuejs 开展一个项目(我正在使用 vue-cli-plugin-electron-builder)并且我需要实时人脸检测系统到目前为止最快和最有效的解决方案是 OpenCV.js(我有完成了我的研究)。

我一直面临的问题是根据OpenCV.js Docs我们需要将脚本标签添加到html文件中,

<script async src="https://docs.opencv.org/master/opencv.js" onload="onOpenCvReady()" type="text/javascript"></script>

我已经对其进行了测试,只有在电子窗口中关闭 nodeIntegration 时它才能正常工作。但这是不可能的,因为 electron-builder 插件只有在 nodeIntegrations 开启时才能工作。

new BrowserWindow({
    webPreferences: {
        nodeIntegration: true // I need this but i also need opencv
                              // but opencv is not working if i turn it off.
    }
})

其次,我应该继续使用 electron 还是迁移到 NW.js,我注意到 electron.js 的构建大小很大。

【问题讨论】:

    标签: javascript node.js opencv vue.js electron


    【解决方案1】:

    首先,以下说法不正确:

    electron-builder 插件只有在 nodeIntegrations 开启时才能工作。

    事实上,nodeIntegrationelectron-builder v2.0 中默认会被禁用。

    现在让我们进入正题。不要使用&lt;script&gt; 标签下载任何东西,如果这样做,每次用户打开应用程序时,都会下载脚本。您应该做的是在开发过程中安装所有节点模块,以便应用程序附带所有内容。

    要在 Electron 中使用 opencv,您只需安装 this npm module。查看 the example 了解如何在 Electron 中使用它。

    如果该模块不适合您,请尝试 this npm module 并在需要时关注 opencv docs

    要回答您关于 NW.js 的问题,这取决于您的需求。谷歌一下 Electron 和 NW.js 之间的区别,然后决定你想为你的应用使用什么。总之,Electron 更强大,更安全,即使应用程序在驱动器上占用200mb 更多,它仍然是一个更好的选择。此外,谁在乎构建的大小是否为400mb?现在不是 2010 年,现在大多数首先要使用您的应用程序的人,很可能在他们的驱动器上拥有 0.5 TB 的可用空间。

    【讨论】:

    • 您是否已将 OpenCV.js 与 Web 应用程序集成。它是一个 7mb 的 emscripten 文件(web-assembly)文件,它不能通过 web pack 或任何捆绑器加载。除此之外,我还提到我正在使用 vuejs-electron-builder 插件。不是简单的电子构建器,vuejs 插件当前需要 nodeIntegration 才能工作,不用担心下载。所有文件都将与构建捆绑在一起。 vuejs 用于 SPA,因此,用户永远不会重新加载页面。
    • @ArishKhan 伙计,你对它的工作原理有点困惑,webpack 与“加载”模块无关。我向您展示了 opencv 的 npm 绑定模块的链接,只需尝试安装并使用它即可。我说的是vue-cli-plugin-electron-builder。我已经使用该插件构建了 2 个 Electron 应用程序,并且我知道它不需要 nodeIntegration 即可工作。
    • 是的,我说的是 vue-cli-plugin-electron-builder,简而言之,通过加载我的意思是(捆绑二进制文件需要永远)捆绑。我对 vue-cli-plugin-electron-builder 知之甚少,但是每当我关闭 nodeIntegration 时,控制台中都会显示一条消息,提示找不到 require。但我会尝试你提到的绑定,谢谢
    • 正如您所说,nodeIntegration 将被禁用,而我将不得不使用 ipc 进程间通信。它不会有效,因为我需要流式传输数据并且进程间操作会降低性能,这就是我避免本地绑定的原因。
    • @ArishKhan 欢迎您。是的,我也不会禁用 nodeIntegration,因为它会丢失很多功能。另外,如果我提到的绑定模块不适合你,那么试试opencv4nodejs模块,我认为它会更容易安装,他们甚至有如何在Electron中使用它的示例,这里是链接:npmjs.com/package/opencv4nodejs#usage-with-electron
    猜你喜欢
    • 2018-02-24
    • 2019-07-08
    • 2016-06-19
    • 2019-07-01
    • 2019-07-23
    • 1970-01-01
    • 2017-09-15
    • 2017-04-08
    • 1970-01-01
    相关资源
    最近更新 更多