首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular + Tesseract.js (和opencv.js)

Angular + Tesseract.js (和opencv.js)
EN

Stack Overflow用户
提问于 2021-01-22 22:20:35
回答 1查看 294关注 0票数 1

我目前尝试在angular中使用tesseract.js,以便对之前在opencv.js中修改过的图像执行一些识别。

现在通过opencv.js进行图像操作真的很棒,但我不知道我用tesseract.js的不同尝试出了什么问题……

当我在网上学习一些教程时,它工作得很好,例如,我可以在默认的示例图像上执行OCR (仅限revelant部分)

代码语言:javascript
复制
     const exampleImage = 'https://tesseract.projectnaptha.com/img/eng_bw.png';

        const worker = Tesseract.createWorker({
          logger: m => console.log(m)
        });

        Tesseract.setLogging(true);
        work();

        async function work() {
          await worker.load();
          await worker.loadLanguage('eng');
          await worker.initialize('eng');

          let result = await worker.detect(exampleImage);
          console.log(result.data);

          await worker.terminate();
        }

但是,当我尝试对之前处理过的图像(通过opencv.js)、cv.Mat()图像或生成的html canvas执行相同的操作时……我总是得到相同的错误:

tesseract.js error : TypeError: Cannot read property 'SetImage' of null

我也得到了这个错误:Error in pixReadMem: size < 12

我真的不知道我做错了什么,我相信我的错误可能是我给出图片给tesseract的方式……但是我试过的所有方法都不起作用,所以我在这里请求你的帮助。

代码不工作的示例:

代码语言:javascript
复制
    const worker = Tesseract.createWorker({
          logger: m => console.log(m)
        });

        Tesseract.setLogging(true);
        work(onlyDocument);

        async function work(d) {
          await worker.load();

          const ctx = document.getElementById('result').getContext('2d');

          const buffer = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height).data.buffer;

          const result2 = await worker.detect(buffer);

          console.log(result2.data);

          await worker.terminate();
        }

我必须准确地说,我尝试了我能想到的每一种格式,以将该图像提供给tesseract.js (缓冲区、画布、数组等)

EN

回答 1

Stack Overflow用户

发布于 2021-09-01 08:00:40

在执行任何OCR任务之前,您需要对Tesseract API执行initialize。这将解决以下错误。

tesseract.js错误: TypeError:无法读取null的属性'SetImage‘

解决方案:

代码语言:javascript
复制
 //Your async function
 async function work(d) {
   await worker.load();
   await worker.loadLanguage('eng');
   await worker.initialize('eng');
   //language choice (e.g.: 'eng') based on trained data available
   //Image like input can now be given to recognize(), detect() methods
   ...
   await worker.terminate();
 }

初始化后,只要API的输入是类似于图像的,那么无论图像是经过预处理还是未处理的,都应该可以正常工作。希望这能解决你的问题。

附注:教程示例初始化了API,因此没有抛出错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65846909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档