如何打包具有 OCR 功能的电子应用程序?
How can I package an electron app with OCR features?
我构建了一个 electron 应用程序,运行 遇到需要添加一些 OCR 功能的情况。
我发现人们大多使用 tesseract.js 但它比原生 tesseract-ocr(因子或 10-20)慢得多。
这就是为什么 tesseract.js 不是我的选择。或者我可以只使用众多 tesseract 节点之一 modules which are out there。理论上。
问题:这些节点模块需要编译的 tesseract-ocr 二进制文件(通常使用 apt 或 brew 安装)。
我不希望我的用户必须经历额外的设置麻烦,我希望我可以将所有内容都放入电子安装程序中。
有什么办法可以完成这项工作吗?
我正在使用 electron-builder 来打包我的应用程序。
您正在寻求使用用于生产的电子应用程序打包的本机模块打包。总体思路是使用 electron-rebuild
为 electron 编译本机库。您可以参考 electron docs or in electron-builder 文档中的原生模块构建。您可以设置 buildDependenciesFromSource: true
以在使用 electron-builder
.
时编译特定平台构建的本机依赖项
基本配置你可以看看,
"build": {
"appId": "com.trinityinfosystem.electron.exchange.stream",
"productName": "Accurate",
"copyright": "Copyright © 2018 Trinity InfoSystem",
"buildDependenciesFromSource": true,
"mac": {
"category": "public.app-category.utilities",
"icon": "assets/icon.icns",
"target": [
"dmg"
]
},
"win": {
"publisherName": "Trinity InfoSystem"
"target": [
"nsis"
]
},
"linux": {
"target": [
"AppImage",
"tar.gz"
]
},
"dmg": {
"background": "assets/background.png",
"icon": "assets/icon.icns",
"title": "Accurate Installer"
},
"nsis": {
"oneClick": false,
"perMachine": false,
"allowToChangeInstallationDirectory": true
}
}
您链接的节点模块不是本机节点模块(一个除外),而只是生成进程的 CLI 包装器,这就是为什么它们需要用户安装工具。
要解决此问题,您需要一个本机节点模块,例如,node-tesseract 将是您应该使用的模块。您可以使用 electron-builder
或此命令(用您的目标设置替换标记的部分)通过 node-gyp
为电子重建它:
node-gyp rebuild --target=YOUR_ELECTRON_VERION --arch=YOUR_ARCH -RELEASE_OR_DEBUG --dist url=https://electronjs.org/headers --directory=./node_modules/node-tesseract`
由于我没有进一步测试 node-tesseract
较新节点版本的功能,因此有些功能可能无法立即运行。如果它不起作用,您可能需要花一些时间通过 NAPI 为节点包装 c++ 库 libtesseract
。你只需要包装你需要的功能而不是一切。
完成后,您可以按照@Kiran Maniya 描述的步骤进行操作
你最后是怎么实现这个功能的?我们最近遇到了类似的问题(我们必须在小区域做 10 ocr/seconde)所以我们选择了“capture2text”cli(不需要最终用户安装任何东西。)但是我们的应用程序的重量从 40 Mo 到 120 Mo,很多。所以我很想知道你最后是怎么解决的。
最后,在一位出色的开发伙伴的帮助下,我设法让事情正常进行。
这是 node-native-ocr,它可以完美地与电子一起工作:
https://www.npmjs.com/package/node-native-ocr
我构建了一个 electron 应用程序,运行 遇到需要添加一些 OCR 功能的情况。 我发现人们大多使用 tesseract.js 但它比原生 tesseract-ocr(因子或 10-20)慢得多。 这就是为什么 tesseract.js 不是我的选择。或者我可以只使用众多 tesseract 节点之一 modules which are out there。理论上。
问题:这些节点模块需要编译的 tesseract-ocr 二进制文件(通常使用 apt 或 brew 安装)。 我不希望我的用户必须经历额外的设置麻烦,我希望我可以将所有内容都放入电子安装程序中。
有什么办法可以完成这项工作吗? 我正在使用 electron-builder 来打包我的应用程序。
您正在寻求使用用于生产的电子应用程序打包的本机模块打包。总体思路是使用 electron-rebuild
为 electron 编译本机库。您可以参考 electron docs or in electron-builder 文档中的原生模块构建。您可以设置 buildDependenciesFromSource: true
以在使用 electron-builder
.
基本配置你可以看看,
"build": {
"appId": "com.trinityinfosystem.electron.exchange.stream",
"productName": "Accurate",
"copyright": "Copyright © 2018 Trinity InfoSystem",
"buildDependenciesFromSource": true,
"mac": {
"category": "public.app-category.utilities",
"icon": "assets/icon.icns",
"target": [
"dmg"
]
},
"win": {
"publisherName": "Trinity InfoSystem"
"target": [
"nsis"
]
},
"linux": {
"target": [
"AppImage",
"tar.gz"
]
},
"dmg": {
"background": "assets/background.png",
"icon": "assets/icon.icns",
"title": "Accurate Installer"
},
"nsis": {
"oneClick": false,
"perMachine": false,
"allowToChangeInstallationDirectory": true
}
}
您链接的节点模块不是本机节点模块(一个除外),而只是生成进程的 CLI 包装器,这就是为什么它们需要用户安装工具。
要解决此问题,您需要一个本机节点模块,例如,node-tesseract 将是您应该使用的模块。您可以使用 electron-builder
或此命令(用您的目标设置替换标记的部分)通过 node-gyp
为电子重建它:
node-gyp rebuild --target=YOUR_ELECTRON_VERION --arch=YOUR_ARCH -RELEASE_OR_DEBUG --dist url=https://electronjs.org/headers --directory=./node_modules/node-tesseract`
由于我没有进一步测试 node-tesseract
较新节点版本的功能,因此有些功能可能无法立即运行。如果它不起作用,您可能需要花一些时间通过 NAPI 为节点包装 c++ 库 libtesseract
。你只需要包装你需要的功能而不是一切。
完成后,您可以按照@Kiran Maniya 描述的步骤进行操作
你最后是怎么实现这个功能的?我们最近遇到了类似的问题(我们必须在小区域做 10 ocr/seconde)所以我们选择了“capture2text”cli(不需要最终用户安装任何东西。)但是我们的应用程序的重量从 40 Mo 到 120 Mo,很多。所以我很想知道你最后是怎么解决的。
最后,在一位出色的开发伙伴的帮助下,我设法让事情正常进行。 这是 node-native-ocr,它可以完美地与电子一起工作: https://www.npmjs.com/package/node-native-ocr