UNPKG

@kiran.kk.phonpe/node-native-ocr

Version:

Native Node.js bindings for the Tesseract OCR project.

74 lines (58 loc) 2.04 kB
'use strict'; var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const path = require('path'); let bindings; const isElectron = process.versions.hasOwnProperty('electron'); const ocrPackagePath = 'node_modules/node-native-ocr'; if (isElectron) { const electron = require("electron"); const appPath = (electron.app || electron.remote.app).getAppPath(); const modulePath = path.resolve(appPath, ocrPackagePath, 'build/Release/node-native-ocr'); bindings = __non_webpack_require__(modulePath); } else { bindings = require('../build/Release/node-native-ocr.node'); } const DEFAULT_LANG = 'eng'; const LANG_DELIMITER = '+'; const handleOptions = (options = {}) => { if (!options.lang) { options.lang = DEFAULT_LANG; } if (!options.tessdataPath) { if (isElectron) { console.log('Electron mode.'); const electron = require("electron"); const appPath = (electron.app || electron.remote.app).getAppPath(); options.tessdataPath = path.resolve(appPath, ocrPackagePath, 'tessdata'); } else { console.log('Node mode.'); options.tessdataPath = path.resolve(__dirname, "..", "tessdata"); } } if (!options.format) { options.format = 'txt'; } if (Array.isArray(options.lang)) { options.lang = options.lang.join(LANG_DELIMITER); } return options; }; const makePromise = method => { return (arg, options) => new _promise2.default((resolve, reject) => { options = handleOptions(options); bindings[method](arg, options.lang, options.tessdataPath, options.format !== 'txt', (err, text) => { if (err) { console.log('error:', err); const error = new Error(text); error.code = err; return reject(error); } else { console.log('success:', text); } resolve(text.trim()); }); }); }; exports.recognize = makePromise('recognize');