带有 Vue 和 vue-cli-plugin-electron-builder 的电子应用程序无法与 Tesseract.js 一起使用

Posted

技术标签:

【中文标题】带有 Vue 和 vue-cli-plugin-electron-builder 的电子应用程序无法与 Tesseract.js 一起使用【英文标题】:Electron App with Vue and vue-cli-plugin-electron-builder can't working with Tesseract.js 【发布时间】:2020-05-21 22:40:30 【问题描述】:

我用 vue-service-cli 创建了一个项目。尝试使用 tesseract OCR 但我无法在本地和远程加载 lang.traineddata。我已经尝试了来自 tesseract.js repo 和其他许多方法的示例(它们有效),但没有结果。当我尝试加载它们时,我看到标准错误:

    Error opening data file ./eng.traineddata
    Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.
    Failed loading language 'eng'
    Tesseract couldn't load any languages!
    AdaptedTemplates != nullptr:Error:Assert failed:in file /src/src/classify/adaptmatch.cpp, line 196
    trap!

我怀疑这是“/node_modules/electron/dist/resources/electron.asar”中的 .asar 存档格式(来自 vue-cli-plugin-electron-builder)的问题。我可以从 ./public 加载文件,但我被读取的语言文件必须在进程目录中 - 我不知道这是否属实。某些配置不能一起使用。

我的代码

    const data = await Tesseract.recognize(
    "https://tesseract.projectnaptha.com/img/eng_bw.png",
    "eng",
    
      logger: console.log,
      corePath: window.location.origin + "/tesseract/tesseract-core.wasm.js",
      workerPath: window.location.origin + "/tesseract/worker.min.js",
      langPath: window.location.origin + "/tesseract/tessdata"
      //or
      langPath: path.join(__dirname, "tessdata")
    

我的依赖

"dependencies": 
    "core-js": "^3.4.4",
    "electron": "5.0.0",
    "semantic-ui-css": "^2.4.1",
    "tesseract.js": "2.0.2",
    "vue": "^2.6.10",
    "vue-class-component": "^7.0.2",
    "vue-property-decorator": "^8.3.0",
    "vue-router": "^3.1.3",
    "vuex": "^3.1.2"
  ,
  "devDependencies": 
    "@vue/cli-plugin-babel": "^4.1.0",
    "@vue/cli-plugin-eslint": "^4.1.0",
    "@vue/cli-plugin-router": "^4.1.0",
    "@vue/cli-plugin-typescript": "^4.1.0",
    "@vue/cli-plugin-vuex": "^4.1.0",
    "@vue/cli-service": "^4.1.0",
    "@vue/eslint-config-prettier": "^5.0.0",
    "@vue/eslint-config-typescript": "^4.0.0",
    "eslint": "^5.16.0",
    "eslint-plugin-prettier": "^3.1.1",
    "eslint-plugin-vue": "^5.0.0",
    "node-sass": "^4.12.0",
    "prettier": "^1.19.1",
    "pug": "^2.0.4",
    "pug-plain-loader": "^1.0.0",
    "sass-loader": "^8.0.0",
    "typescript": "~3.5.3",
    "vue-cli-plugin-electron-builder": "^1.4.4",
    "vue-template-compiler": "^2.6.10"
  

编辑: 我注意到https://github.com/auth0-blog/electron-vue 项目在 Tesseract.js 上运行良好。该项目使用 Vue 但没有 vue-vli-service,这意味着它没有确认上述论点的 vue-cli-plugin-electron-builder。我仍在寻找使用 vue-cli 的解决方案

【问题讨论】:

【参考方案1】:

感谢模块所有者,我找到了解决方案。github issue

【讨论】:

以上是关于带有 Vue 和 vue-cli-plugin-electron-builder 的电子应用程序无法与 Tesseract.js 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 Vue 和 TypeScript 类装饰器语法的外部定义组件

带有Typescript和beforeEnter保护的Vue-router,如何使用经过验证的数据?

带有 vue cli 和 TS 项目的 Vue 3 看不到 swiper 7

带有 vue-test-utils 和 Jest 的 Vue.js 单元测试用例失败

带有路由器的 Vue.js 和 OMDb 页面

带有 vue 2.16.12 的 webpack 模块联合和 single-spa-vue 不起作用