想做一個星系的輔助工具,由于安卓不太熟悉,先嘗試一下文字解析和核心的算法
開始
-
目前基本的目標就是從圖片中解析出每一行和每一列的數字,然后根據其計算出方塊的位置
- 兩個思路,第一種是獲取到當前游戲的截圖,從截圖中識別出數字。第二種是能否借助無障礙功能直接讀取到屏幕文本。本質都是做成一個輔助工具。
解析文字
- 借助這個工具: 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'
})
修改后大部分數字識別準確,但是圖中方框,三角這些有時會被識別為數字,指定識別的矩形區域,消除一下識別干擾
試了行, 列劃分,甚至將其劃為單個數字塊,精度還是不夠,并且劃分為單個字符后由于只計算并指定了位置,實際每次識別還是要讀取整個圖片
數字識別準確,但數字之間沒有空格,需要更精確的字符位置來分開粘在一起的數字