如何解析使用 Tesseract 将图像转换为文本得到的字符串?

问题描述 投票:0回答:1

我正在开发一个简单的 JavaScript 代码来从

text
中提取
image
。为此,我正在使用像
Tesseract.

这样的图像处理库

但我发现,

Tesseract
并不是100%准确。 (或者可能是我不知道如何正确使用它) 例如,将图像文本转换为字符串数组并一一扫描每个字符串后,我得到以下不相同的字符串。

年龄 + 67 性别:女性 年龄:45 性别:女性 年龄 + 45 性别: 男

年龄:44 性别:男 36 岁 性别:女 年龄:56 性别:男

年龄+63 性别:男 年龄:62 性别:女 年龄:37 性别:男

我在

+
space
的基础上分割了字符串,像这样

const AgeAndGenderArray = line.split(" ") || line.split("+");

我得到了以下输出。

['年龄',

'+', '67'
, '性别', ':', '女', '年龄', ':', '45', '性别', ':', '女', '年龄',
'+'
, '45', '性别', ':', '男']

['年龄', ':', '44', '性别', ':', '男', '年龄', '36', '性别', ':', '女', '年龄', ':', '56', '性别',

':'
, '男']

['年龄',

'+63'
, '性别', ':', '男', '年龄', ':', '62', '性别', ':', '女', '年龄', ':', '37', '性别', ':', '男']

如果您观察,所有输入字符串并不完全相同。有些正在吃

Age + 67
,有些人正在经历
Age +63
。某处有
+
,某处有
:
。所以我无法从中提取文本。

我期待这样的输出:

63     Male          
62     Female        
37     Male 
       

那么如何解析如此多样化的字符串?

我的代码:

const processImage = () => {
    Tesseract.recognize(file, "eng", { logger: (m) => console.log(m) }).then(
      ({ data: { text } }) => {
        console.log(text);
        const parsedCandidates = parseOCRResult(text);
        setCandidates(parsedCandidates);
      }
    );
    console.log(file);
  };     
       
const parseOCRResult = (text) => {    
      
// parsing logic of strings      
}
javascript tesseract
1个回答
0
投票

使用正则表达式

Age[^\d]+
进行拆分。它将搜索“年龄”后跟任何字符,但在找到数字时停止

let input = `Age + 67 Gender : Female Age : 45 Gender : Female Age + 45 Gender : Male
Age : 44 Gender : Male Age 36 Gender : Female Age : 56 Gender : Male
Age +63 Gender : Male Age : 62 Gender : Female Age : 37 Gender : Male`

let results = input.split(/Age[^\d]+/)
// clean the results
results = results.map(item => item.replace(' Gender :', '').trim()).filter(i => i.length)
console.log(results)

© www.soinside.com 2019 - 2024. All rights reserved.