UNPKG

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

Version:

Native Node.js bindings for the Tesseract OCR project.

59 lines (47 loc) 1.56 kB
const path = require('path') let bindings const isElectron = process.versions.hasOwnProperty('electron') const ocrPackagePath = 'node_modules/@kiran.kk.phonpe/node-native-ocr' 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 Promise((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')