我在QT中使用Tesseract OCR c ++库从png图像中获取文本 使用此代码
const char* lang = "eng";
QString filename = "D:/image.png";
tesseract::TessBaseAPI tess;
tess.Init(NULL, lang, tesseract::OEM_DEFAULT);
tess.SetPageSegMode(tesseract::PSM_AUTO);
FILE* fin = fopen(filename.toStdString().c_str(), "rb");
if (fin == NULL)
{
std::cout << "Cannot open " << filename.toStdString().c_str() << std::endl;
return;
}
fclose(fin);
STRING text;
if (tess.ProcessPages(filename.toStdString().c_str(), NULL, 0, &text))
{
ui->plainTextEdit->setPlainText(QString::fromUtf8(text.string()));
//show result in plainttext qt gui
}
将数据放在表格中的数据不够准确,它给了我奇怪的字符,当我使用在线OCR网站将我的图像转换为文本(相同的图像)时,它完全100%准确,所以是什么使得它给了我这个错误的文本这是一个库的问题?还是我的代码?或者如果有更好的免费库我可以使用更准确吗?
我从pdf获得图像我使用ghost脚本来获得高质量的图像,因此OCR库应该能够获得正确的数据
答案 0 :(得分:0)
我对cpp没有经验,但我认为你的问题很可能与下面的行有关:
tess.Init(NULL, lang, tesseract::OEM_DEFAULT);
必须显示tessdata
文件夹。您可以编写文件夹名称,而不是NULL
,例如"C:/tessdata/"
。再一次,我对cpp没有经验,这就是为什么你可以决定斜杠“/”或反斜杠“\”。该文件夹应包含语言文件。
答案 1 :(得分:0)
正如Eddge在他的评论中提到的,你应该应用一些图像预处理的东西,scripts有imagemagick串。 Ans当然,OpenCV也会对这些东西有很大的帮助。
下一点可能是PSM模式,默认情况下应满足您提取整页信息的需求。
如您所述,在线OCR的结果也不是100%。
There is "1 S Days" instead of "15 Days"
There is "Mail: finance(a)" instead of "E Mail: finance@"
There is "TiA THE GREEN HOL1 5" instead of "T/A THE GREEN HOU 5"
等
您使用的是哪个Tesseract版本?我强烈建议使用3.05。 (4.0显示了更好的结果,但尚未正式发布)。
以下链接可以帮助您获得结果:https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality
P.S。我希望你有资格公开分享这些财务文件;)