#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, которые есть . Теоретически.
Есть идеи, как я мог бы это сделать? Я использую 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, пожалуйста, проверьте мой ответ ниже: я написал свой собственный модуль…