文字识别-Tesseract.js

想做一个星系的辅助工具,由于安卓不太熟悉,先尝试一下文字解析和核心的算法

开始

  • 目前基本的目标就是从图片中解析出每一行和每一列的数字,然后根据其计算出方块的位置


  • 两个思路,第一种是获取到当前游戏的截图,从截图中识别出数字。第二种是能否借助无障碍功能直接读取到屏幕文本。本质都是做成一个辅助工具。

解析文字

  • 借助这个工具: Tesseract.js, 先识别一下文字。官方已经提供了例子,改一下路径就可以了。
const { createWorker } = require('tesseract.js');

const worker = createWorker({
  logger: m => console.log(m), // Add logger here
});

(async () => {
  await worker.load();
  await worker.loadLanguage('eng');
  await worker.initialize('eng');
  const { data: { text } } = await worker.recognize('./game.png');
  console.log(text);
  await worker.terminate();
})();
  • 上面代码可能会卡死在加载语言数据这一块,根据这个issue,。可能是网络的原因? 但个人网络正常,因为node端运行,也没有装抓包工具,查看不到请求。还是尝试一下offline。

  • local-installation.md介绍了如何在本地安装tesseract的语言包,需要做的只是从https://github.com/naptha/tessdata/tree/gh-pages/4.0.0下载需要的语言包。并在createWorker时指定本地文件路径即可(可参照https://github.com/jeromewu/tesseract.js-offline/blob/master/node/index.js)。

  • 识别结束,控制台输出的结果很不准确,数字之间没有分割,且很多被识别成了字母


  • 文档中指出可以通过为Worker配置白名单字符。我们需要的只是数字,因此添加:

  await worker.setParameters({
    "tessedit_char_whitelist": '0123456789'
  })
  • 修改后大部分数字识别准确,但是图中方框,三角这些有时会被识别为数字,指定识别的矩形区域,消除一下识别干扰

  • 试了行, 列划分,甚至将其划为单个数字块,精度还是不够,并且划分为单个字符后由于只计算并指定了位置,实际每次识别还是要读取整个图片

  • 数字识别准确,但数字之间没有空格,需要更精确的字符位置来分开粘在一起的数字

你可能感兴趣的:(文字识别-Tesseract.js)