Почему Tesseract менее точен при запуске через NodeJS по сравнению с прямым запуском из командной строки? - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь извлечь текст из локальных изображений PNG. Я использую Tesseract и запускаю JS-файлы из командной строки через узел.

Если я запускаю Tesseract из командной строки, он работает отлично, если я запускаю его через Javascript, он не работает.

Я прочитал много постов с советами о том, как повысить точность распознавания, но здесь это не проблема. Проблема здесь заключается в том, что текст из png-файла, который я использую, может быть извлечен совершенно точно, но точность резко меняется в зависимости от того, какой метод я использую для запуска Tesseract.

Когда я запускаю Tesseract непосредственно из командной строки с помощью команды tesseract.exe manual.png usingcommandline (manual.png - это файл, из которого я извлекаю файл, и я сохраняю его в файлеcommandline.txt) - возвращаемый файл очень точный.

Однако, когда я запускаю свой файл Javascript из командной строки, используя node ocr.js (который запускает приведенный ниже код) для того же файла, это гораздо менее точно. Это непригодно. (Код ниже создает файл vianodejs.txt с results.text (текст из файла manual.png в нем)

var Tesseract = require('tesseract.js');
var filename = 'manual.png';
var fs = require('fs');

Tesseract.recognize(filename)
  .then(function (result) {fs.writeFileSync('vianodejs.txt', result.text, function(err) {
        if (err) {
            console.log(err);
        } else {
            console.log("file written successfully");
            }
        })
    process.exit(0)
  })

Это один и тот же файл manual.png, который я использую в обоих случаях, но он гораздо менее точен, когда я запускаю Tesseract через программу Javascript. В конечном счете мне нужно запустить его через программу Javascript, чтобы мое приложение работало, и мне нужен уровень точности, который я получаю с помощью другого метода.

Все идеи приветствуются. Благодарю.

Кроме того, у меня есть дополнительный вопрос, который покажет мою неопытность.

На Tesseract.recognize(filename) - как это называется технически? Это метод (распознать), работающий на объекте (тессеракт). Где функция? Могу ли я поместить все это в функцию, которая будет запускаться после завершения другого шага? (Другим шагом является сохранение фотографии в первую очередь с использованием библиотеки веб-снимков)

...