Как я могу упаковать приложение electron с функциями распознавания?

#electron #tesseract #electron-builder #node-gyp #tesseract.js

#electron #tesseract #electron-builder #узел-gyp #tesseract.js

Вопрос:

Я создал приложение electron и столкнулся с ситуацией, когда мне нужно добавить некоторые функции распознавания. Я понял, что люди в основном используют tesseract.js но это намного медленнее, чем родной tesseract-ocr (коэффициент или 10-20). Вот почему tesseract.js для меня это не вариант. В качестве альтернативы я мог бы просто использовать один из многих модулей узла tesseract, которые есть . Теоретически.

Проблема: для этих модулей узла требуются скомпилированные двоичные файлы tesseract-ocr (которые обычно устанавливаются с помощью apt или brew). Я не хочу, чтобы моим пользователям приходилось проходить через дополнительные трудности с настройкой, я бы предпочел, если бы я мог просто поместить все в программу установки electron.

Есть идеи, как я мог бы это сделать? Я использую electron-builder для упаковки своего приложения.

Ответ №1:


Вы ищете упаковку собственного модуля с приложением electron для производства. Общая идея заключается в компиляции собственной библиотеки для использования electron electron-rebuild . Вы можете обратиться к сборке собственного модуля в electron docs или в electron-builder docs . Вы можете настроить 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
    }
  }
 

Комментарии:

1. Спасибо, я все еще не думаю, что это помогло бы упаковать все зависимости в программу установки electron. Tesseract использует множество дополнительных инструментов, которые также должны быть включены.

2. Вы, должно быть, используете оболочку tesseract для node.

3. Вы имеете в виду одну из библиотек, упомянутых выше? Или какой-то конкретный?

Ответ №2:

Модули узла, которые вы связали, не являются собственными модулями узла (кроме одного), а просто оболочкой CLI, которая запускает процесс, поэтому они требуют, чтобы инструменты были установлены пользователем.

Чтобы решить эту проблему, вам нужен собственный модуль узла, например, node-tesseract будет тем, который вы должны использовать. Вы можете перестроить его для electron node-gyp либо с помощью electron-builder , либо с помощью этой команды (замените отмеченные части вашими целевыми настройками):

 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 функциональность с более новыми версиями узлов, есть несколько вещей, которые могут не сработать сразу. В случае, если это не сработает, возможно, вы захотите потратить некоторое время на упаковку библиотеки c libtesseract для node с помощью NAPI. Вам нужно только обернуть функции, которые вам нужны, не все.

Как только это будет сделано, вы можете следовать инструкциям, описанным @Kiran Maniya

Комментарии:

1. спасибо за объяснение! Не уверен в подходе NAPI, о котором вы упомянули. Разве это не то, что уже было сделано другими? Я только что нашел «Penteract», который упоминается здесь: tesseract-ocr.github.io/tessdoc/AddOns.html#tesseract-wrappers

2. Я пытался использовать penteract, но теперь я столкнулся со следующей ошибкой: github.com/kaelzhang/penteract-ocr/issues/11

3. Penteract выглядит как правильный выбор, но для проблемы я не уверен, почему это происходит, если существует сборка релиза, она должна быть в состоянии загрузить ее просто отлично. Иногда я сталкивался с подобными проблемами, когда для NODE_ENV было установлено значение development или release . Я могу еще раз взглянуть на Рождество 😉

Ответ №3:

В конце концов мне удалось заставить все работать с помощью отличного помощника разработчика. Вот node-native-ocr, и он безупречно работает с electron: https://www.npmjs.com/package/node-native-ocr

Ответ №4:

Как вы в итоге реализовали эту функцию? Недавно мы столкнулись с похожей проблемой (нам приходится выполнять распознавание 10 раз в секунду на небольших участках), поэтому мы выбрали cli «capture2text» (не требует установки от конечного пользователя. ) но вес нашего приложения подскакивает с 40 до 120 месяцев, что очень много. Поэтому мне было бы интересно узнать, как вы решили это в конце.

Комментарии:

1. Привет @Nemzytch, пожалуйста, проверьте мой ответ ниже: я написал свой собственный модуль…