gpt4 book ai didi

c++ - 为什么我从 Tesseract 得到如此糟糕的简单单个字符识别结果?

转载 作者:行者123 更新时间:2023-11-30 04:55:57 24 4
gpt4 key购买 nike

我正在尝试使用 Tesseract 进行单个字符识别,但结果很糟糕。“h”被识别为“n”,“4”被识别为“/i”,“O”被识别为“()”;

h_char

4_char

O_char

单字符模式好像不行,因为很多字符都被识别为两个字符,不只是一个。我的图像是简单的双层黑白 TIFF 图像,拉丁字符。这是位图字体,不是扫描图像,它们绝对干净不需要改进。О只有大约一半的字符被正确识别,这似乎是对于这样一个简单的任务来说,百分比非常低。

我使用的 Tesseract 库版本是“4.0.0-beta.3”。这就是我对 Tesseract 的称呼。

 int CharRecognizer::recognizeTIFFData(char* data, int datalength){
char *outText;
TessBaseAPI* api = new TessBaseAPI();

if (api->Init(NULL, "eng")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
api->SetPageSegMode(tesseract::PSM_SINGLE_CHAR);
Pix *image = pixReadMem(data,datalength);
api->SetImage(image);
// Get OCR result
outText = api->GetUTF8Text();
printf("\nOCR output:\n%s", outText);
// Destroy used object and release memory
int utf8 = outText[0];
api->End();
delete[] outText;
pixDestroy(&image);
return utf8;
}

我是 Tesseract 的新手,所以我可能遗漏了一些东西。我必须以某种方式训练吗 先去图书馆?也许我应该设置另一个 OcrEngineMode?我没有预料到 简单位图字体识别的问题,现在很迷茫。非常感谢您,尤丽安娜

最佳答案

通过在图像周围添加 1x1 像素边框,我能够使 tesseract 在您的情况下产生正确的结果。我在 Linux 上使用 tesseract 命令行工具对此进行了测试:

$ tesseract R2a51.png stdout --psm 10
n
$ convert R2a51.png -border 1x1 R2a51.border.png
$ tesseract R2a51.border.png stdout --psm 10
h

convert 工具用于创建带边框的图像版本。

tesseract 似乎无法正确处理与图像边缘接壤的字符(至少在默认设置下)。

注意您的第三个字符仍然被识别为 0 而不是 O 但我不确定这是否可以被视为 OCR 错误。您可能需要查看 tesseract 字符白名单来解决这个问题。

编辑:似乎“Tesseract 遗留算法”无需修改即可对您的图像进行处理。它可以通过 --oem 0 在命令行上调用。请注意,您需要在 tessdata 目录中为您的语言匹配 *.traineddata。可以从 https://github.com/tesseract-ocr/tessdata 下载合适的变体。

关于c++ - 为什么我从 Tesseract 得到如此糟糕的简单单个字符识别结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52823336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com