我最近在Sharp(node.js图像编辑器)的帮助下开始使用tesseract-ocr。在我的算法中,应该对某些图片进行锐化调整大小和裁剪,并获得tesseract-ocr识别的其余图片的内容。这必须在图片的两个单独的部分中发生两次,在图片的第一部分上它可以完美地识别字母,因此我不会张贴这部分代码,无论如何它与第二部分相同,问题在于第二张图片。应该读取图片中的这两个数字,而要做的只是读取所有这些数字。
const config = {
lang: "eng",
oem: 1,
psm: 3,
}
let originalImage = `tmp_scrsht.jpg`;
let outputImagelevel = 'levelcropped.jpg'
sharp(originalImage).resize({ height: 1000 }).extract({ width : 300, height:250 , left: 5, top: 500}).threshold(230).toFile(outputImagelevel)
.then(function(new_file_info) {
tesseract.recognize(outputImagelevel, config)
.then(text => {
console.log(text)
var newtext = text.split(' ') && text.split('\n')
level = newtext[0];
message.author.send(`number is: ${level}`);
})
})
调整初始图像的大小并进行裁剪,以便使tesseract集中在我感兴趣的图像部分。另外,由于我没有裁剪的运气,因此我读到如果对图像设置锐利度的阈值,则tesseract将更有效地读取图像,这将图像像素转换为255或0是有意义的。
包含所有这些过滤器,最终的图像tesseract被调用来读取是这样的:
正如我之前说的,由于某种原因,在大多数这些图片中,它会忽略数字,而只会读取其他所有内容,在某些图片中,它可以工作,在某些图片中,则没有一致性,或者图片上没有图案它可以识别任何东西。
答案 0 :(得分:0)
尝试设置 tessedit_char_whitelist
来自examples
const { createWorker } = require('tesseract.js');
const worker = createWorker();
(async () => {
await worker.load();
await worker.loadLanguage('eng');
await worker.initialize('eng');
await worker.setParameters({
tessedit_char_whitelist: '0123456789',
});
const { data: { text } } = await worker.recognize('https://tesseract.projectnaptha.com/img/eng_bw.png');
console.log(text);
await worker.terminate();
})();