如何解决提高tesseract-ocr中数字识别的准确性
我最近在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被调用来读取是这样的:
正如我之前说的,由于某种原因,在大多数这些图片中,它会忽略数字,而只会读取其他所有内容,在某些图片中,它可以工作,在某些图片中,则没有一致性,或者图片上没有图案它可以识别任何东西。
解决方法
尝试设置 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();
})();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。