9

我在 Visual Studio 2010 中有一个 C++ 项目并希望使用 OCR。我遇到了许多 Tesseract 的“教程”,但遗憾的是,我得到的只是头痛和浪费时间。

在我的项目中,我将图像存储为Mat。我的问题的一种解决方案是将此 Mat 保存为图像(例如 image.jpg),然后像这样调用 Tesseract 可执行文件:

system("tesseract.exe image.jpg out");

这让我得到一个输出out.txt然后我打电话

infile.open ("out.txt");

从 Tesseract 读取输出。

这一切都很好,就像一把椅子,但它不是一个最佳解决方案。在我的项目中,我正在处理一个视频,因此以 10+ FPS保存/调用 .exe/write/read并不是我真正想要的。我想将 Tesseract 实现到现有代码,以便能够将 Mat 作为参数传递并立即将结果作为字符串。

您知道使用 Visual Studio 2010 实现 Tesseract OCR 的任何好的教程(首选分步)吗?还是您自己的解决方案?

4

3 回答 3

19

好的,我想通了,但它仅适用于ReleaseWin32配置(无调试或 x64)。Debug 配置下有很多链接错误。

所以,

1.首先,在这里下载准备好的库文件夹(Tesseract + Leptonica):

镜像 1(谷歌驱动器)

镜子 2(MediaFire)


2.提取tesseract.zipC:\


3.在 Visual Studio 中,进入C/C++ > General > Additional Include Directories

插入C:\tesseract\include


4.根据Linker > General > Additional Library Directories

插入C:\tesseract\lib


5.根据Linker > Input > Additional Dependencies

添加:

liblept168.lib
libtesseract302.lib

示例代码应如下所示:

#include <tesseract\baseapi.h>
#include <leptonica\allheaders.h>
#include <iostream>

using namespace std;

int main(void){

    tesseract::TessBaseAPI api;
    api.Init("", "eng", tesseract::OEM_DEFAULT);
    api.SetPageSegMode(static_cast<tesseract::PageSegMode>(7));
    api.SetOutputName("out");

    cout<<"File name:";
    char image[256];
    cin>>image;
    PIX   *pixs = pixRead(image);

    STRING text_out;
    api.ProcessPages(image, NULL, 0, &text_out);

    cout<<text_out.string();

    system("pause");
}

对于与 OpenCV 和Mat类型图像的交互,请查看这里

于 2013-11-22T09:48:50.667 回答
2

自上次回复以来已经很多,但它可能对其他人有所帮助;

  1. 我认为您还必须将“liblept168.lib”和“liblept168d.lib”添加到附加依赖项
  2. 将“liblept168.dll”和“liblept168d.dll”添加到您的 exe 的目标位置。
  3. 将#include 添加到您的代码中。

(此答案必须是对布鲁斯答案的评论。很抱歉造成混淆。)

于 2013-11-06T11:39:42.093 回答
0

您需要通过 API 使用该库。

最可能:

于 2013-08-12T06:45:23.160 回答