我真的需要一些帮助,我是新的编码和我试图使一个脚本,它需要一张图片,找到文本从图像使用tesseract,搜索一个特定的字符串从tesseract图像,然后执行一个动作的基础上,如果字符串被发现。我的问题是,每次我运行脚本,它使用以前版本的图像保存,当时给了我错误的结果,我真的需要一些帮助。
const robot = require('robotjs')
const Jimp = require('jimp')
const Tesseract = require('tesseract.js');
const { Console, log } = require("console");
const fs = require('fs');
const {readFileSync, promises: fsPromises} = require('fs');
const { resolve } = require('path');
const myLogger = new Console({
stdout: fs.createWriteStream("normalStdout.txt")
});
const myLogger2 = new Console({
stdout: fs.createWriteStream("normalStdout2.txt")
});
//////////////////////////////////////////////////////////////////////////////////////////
function main(){
sleep(2000);
performRead();
}
//Edited function to sync instead of async - The problem is still persisting
//Edited function to include tesseractimage() in callback of writeimage()
function writeImage(){
var width = 498;
var height = 135;
var img4 = robot.screen.capture(0, 862, width, height).image;
new Jimp({data: img4, width, height}, (err, image) => {
image.write("image.png", function() {
tesseractimage();
});
});
console.log("Image 1 created");
}
function tesseractimage(){
Tesseract.recognize("image.png", 'eng')
.then(out => myLogger.log(out));
//Saves image to normalstdOut.txt
console.log("Tesseracted image")
}
function readTest(normalStdout, Viverz) {
var path = require('path');
const contents = readFileSync(path.resolve("normalStdout.txt"), 'utf-8');
const result = contents.includes("Viverz");
console.log(result);
}
//Edited performRead removing the call for tesseractimage();, it is now in writeimage();
function performRead(){
writeImage();
readTest();
}
function sleep(ms){
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
return null;
}
main();
I have tried changing functions to async functions,
i've tried numerous methods, pauses,
reiterations of functions multiple times,
nothing saves the file until the script ends and
then after it will find the correct string from the
previously saved screenshot, not the new one.
// Current output:
Image 1 created
false
Tesseracted image
( Even when forcing tesseractimage() to call before the result is published it still has the same problem of not reading the file until the script it over
1条答案
按热度按时间rmbxnbpk1#
使用
image.write()
时从writeImage()
调用tesseractimage()
的一种方法:使用
image.writeAsync()
时,从writeImage()
调用tesseractimage()
的一种方法是:还要从
performRead()
中删除函数调用。有关参考,请查看"Writing to files and buffers"。