Node.js 提高tesseract ocr中数字识别的准确性
我最近在sharp(node.js图像编辑器)的帮助下开始使用tesseract ocr。在我的算法中,某张图片应该通过sharp进行大小调整和裁剪,并通过tesseract ocr识别剩余图片的内容。这必须在图片的两个独立部分发生两次,在图片的第一部分,它可以完美地识别字母,因此我不会发布这部分代码,它与第二部分完全相同,问题在于第二张图片。它应该读取图片中的这两个数字,它所做的只是读取除这些数字以外的所有内容Node.js 提高tesseract ocr中数字识别的准确性,node.js,discord.js,tesseract,Node.js,Discord.js,Tesseract,我最近在sharp(node.js图像编辑器)的帮助下开始使用tesseract ocr。在我的算法中,某张图片应该通过sharp进行大小调整和裁剪,并通过tesseract ocr识别剩余图片的内容。这必须在图片的两个独立部分发生两次,在图片的第一部分,它可以完美地识别字母,因此我不会发布这部分代码,它与第二部分完全相同,问题在于第二张图片。它应该读取图片中的这两个数字,它所做的只是读取除这些数字以外的所有内容 const config = { lang: "eng",
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集中在我感兴趣的图像部分。另外,因为我不太会裁剪,所以我读到,如果使用sharp对图像设置阈值,tesseract将更有效地读取图像,这是有意义的,因为它将图像像素转换为255或0
在涉及所有这些过滤器的情况下,调用最终图像tesseract读取以下内容:
正如我前面所说的,出于某种原因,在大多数图片中,它忽略了数字,只读取其他所有内容,在一些图片中它有效,在一些图片上它无效,没有一致性或模式,它无法识别任何图片。尝试设置tessedit\u char\u白名单 从
我从未使用过psm 3。通常我试6-13次。
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();
})();