正方体的Node.js - 使用“郎”选项导致崩溃

问题描述:

Tesseract.js用不同的语言不是英语的基本用法使得整个系统崩溃:正方体的Node.js - 使用“郎”选项导致崩溃

var options = { 
    lang: 'deu', 
}; 

var image = require("path").join(__dirname, 'lib/images/ocr-test-text.png'); 

var Tesseract = require('tesseract.js') 

Tesseract.recognize(image, options) 
.progress(function (info) { 
    console.log(info); 
}) 
.then(function (data) { 
    console.log('done', data); 
    process.exit(); 
}) 

触发以下错误:

> node index.js 
{ status: 'loading tesseract core' } 
{ status: 'loaded tesseract core' } 
{ status: 'initializing tesseract', progress: 0 } 
pre-main prep time: 68 ms 
{ status: 'initializing tesseract', progress: 1 } 
{ status: 'downloading deu.traineddata.gz', 
    loaded: 116, 
    progress: 0.00011697604814572795 } 
events.js:182 
     throw er; // Unhandled 'error' event 
    ^

Error: incorrect header check 
    at Gunzip.zlibOnError (zlib.js:146:15) 

Github的问题:https://github.com/naptha/tesseract.js/issues/129

任何想法发生了什么?

更新: 以下从第一个答案的指令,并下载“申” traineddata后,下面的错误出现:

export TESSDATA_PREFIX=/opt/TESSDATA && node get-text-from-image.js /opt/app/out/image.png 
params [ '/opt/app/out/image.png' ] 
progress { status: 'loading tesseract core' } 
progress { status: 'loaded tesseract core' } 
progress { status: 'initializing tesseract', progress: 0 } 
pre-main prep time: 62 ms 
progress { status: 'initializing tesseract', progress: 1 } 
progress { status: 'loading deu.traineddata', progress: 0 } 
progress { status: 'loading deu.traineddata', progress: 1 } 
progress { status: 'initializing api', progress: 0 } 
Failed loading language 'deu' 
Tesseract couldn't load any languages! 
progress { status: 'initializing api', progress: 0.3 } 
progress { status: 'initializing api', progress: 0.6 } 
progress { status: 'initializing api', progress: 1 } 
progress { status: 'recognizing text', progress: 0 } 
AdaptedTemplates != NULL:Error:Assert failed:in file ../classify/adaptmatch.cpp, line 190 

/opt/app/node_modules/tesseract.js-core/index.js:4 
function f(a){throw a;}var h=void 0,i=!0,j=null,k=!1;function aa(){return function(){}}function ba(a){return function(){return a}}var n,Module;Module||(Module=eval("(function() { try { return TesseractCore || {} } catch(e) { return {} } })()"));var ca={},da;for(da in Module)Module.hasOwnProperty(da)&&(ca[da]=Module[da]);var ea=i,fa=!ea&&i; 
      ^
abort() at Error 
    at Na (/opt/app/node_modules/tesseract.js-core/index.js:32:26) 
    at Object.ka [as abort] (/opt/app/node_modules/tesseract.js-core/index.js:507:108) 
    at _abort (/opt/app/node_modules/tesseract.js-core/index.js:373:173) 
    at $L (/opt/app/node_modules/tesseract.js-core/index.js:383:55709) 
    at jpa (/opt/app/node_modules/tesseract.js-core/index.js:388:22274) 
    at lT (/opt/app/node_modules/tesseract.js-core/index.js:387:80568) 
    at mT (/opt/app/node_modules/tesseract.js-core/index.js:387:80700) 
    at Array.BS (/opt/app/node_modules/tesseract.js-core/index.js:387:69011) 
    at bP (/opt/app/node_modules/tesseract.js-core/index.js:383:110121) 
    at jT (/opt/app/node_modules/tesseract.js-core/index.js:387:80280) 
If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information. 

它未能解开deu.traineddata.gz - 不知道为什么。你可能想要自己下载文件并尝试用手工进行压缩。但这并不是module creator所建议的方式;这里有其他的东西可以尝试。

在运行node.js的机器上下载语言文件并将它们放置在某处。

https://github.com/tesseract-ocr/tessdata

在环境中,确保变量TESSDATA_PREFIX点到该位置。例如,您可以将它们放入/opt/tessdata。如果你这样做,你可以设置TESSDATA_PREFIX这样的:

export TESSDATA_PREFIX=/opt/tessdata 

再试一次;这次它不应该尝试自己下载和解压缩它们。

+0

谢谢!我试过了你的第二个建议 - 下载并设置env var,但是输出的是不同的错误。 – maephisto

+0

你真的把文件放在'/ opt/tessdata'中吗?我的意思是作为一个例子,你应该用'/ opt/tessdata'替换你实际放置它们的目录。对不起,我编辑了我的答案。 – MySidesTheyAreGone