我使用 tesseract.js 来检测 Node JS 中的数字。 例如这是我的形象:
我运行我的脚本,它检测到如下内容:
289 ,0
并且由于图像中的噪声,它考虑了空格,其他符号如逗号等
无论如何我可以指定仅数字,而没有其他符号,例如空格和逗号?
这也是我的代码:
tesseract.recognize(
__dirname + '/Captcha.png',
'eng',
{ logger: m => console.log(m) }
).then(({ data: { text } }) => {
console.log(text);
});
答案 0 :(得分:0)
我不知道 js tesseract API,但似乎有一个非常简单的解决方法,之后通过过滤器:
tesseract.recognize(
__dirname + '/Captcha.png',
'eng',
{ logger: m => console.log(m) }
).then(({ data: { text } }) => {
const filteredText = Array.from(text.matchAll(/\d/g)).join("")
console.log(filteredText)
})
这里只是过滤功能的测试:
if (Array.from("209, 1".matchAll(/\d/g)).join("") !== "2091") {
throw("Not working")
}
答案 1 :(得分:0)
我刚刚开始学习 tesseract.js 的内部结构以完成一项任务。
API 文档解释了如何在工作中使用一些参数来实现您想要的:tessedit_char_whitelist(设置白名单字符使结果只包含这些字符)preserve_interword_spaces< /strong>(保留单词之间的空格) 来自https://github.com/naptha/tesseract.js/blob/master/docs/examples.md
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',
preserve_interword_spaces: '0',
});
const { data: { text } } = await worker.recognize('https://tesseract.projectnaptha.com/img/eng_bw.png');
console.log(text);
await worker.terminate();
})();