如何在 Visual Studio 2010 中实现 Tesseract 以与项目一起运行

Posted

技术标签:

【中文标题】如何在 Visual Studio 2010 中实现 Tesseract 以与项目一起运行【英文标题】:How to implement Tesseract to run with project in Visual Studio 2010 【发布时间】:2013-08-13 09:36:50 【问题描述】:

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

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

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

这让我得到一个输出 out.txt 然后我调用

infile.open ("out.txt");

从 Tesseract 读取输出。

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

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

【问题讨论】:

【参考方案1】:

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

所以,

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

Mirror 1(Google Drive)

Mirror 2(MediaFire)


2.tesseract.zip 提取到C:\


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 类型图像的交互,请查看 HERE

【讨论】:

我说过这样的语言数据路径有效。 api.Init("C:\\tessdata", "eng", tesseract::OEM_DEFAULT); 我找不到“tessdata”的文件夹??我应该创建它还是必须在文件夹@İsmailKocacan 我下载文件夹你的链接但它没有tessdata?? @OpenMinded 用户@İsmailKocacan 使用了自定义“tessdata”语言文件夹,所以问他。【参考方案2】:

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

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

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

【讨论】:

当您说“将#include 添加到您的代码”时,究竟必须包含什么? 你应该添加:#include #include 【参考方案3】:

您需要通过 API 使用该库。

很可能:

首先下载库 (https://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-3.02.02-win32-lib-include-dirs.zip&can=2&q=)。它们是用 Visual 2008 编译的,但应该足够了

直接使用 API(例如,查看使用它的开源项目:https://code.google.com/p/qtesseract/source/browse/#svn%2Ftrunk%2Ftessdata)并阅读此答案中的链接:How can i use tesseract ocr(or any other free ocr) in small c++ project?

【讨论】:

下载了库。在 C/C++>General>Additional Include Directories: 添加了 \include 文件夹。在 Linker>General>Additional Library Directories: 添加了 \lib 文件夹。在 Linker>Input>Additional Dependencies: 添加了 libtesseract302.liblibtesseract302d.lib。编写了一个简单的程序,但由于对象上调用的每个方法的链接错误而无法构建。例如:Error 9 error LNK2019: unresolved external symbol "public: char * __cdecl tesseract::TessBaseAPI::GetUTF8Text(void)" (?GetUTF8Text@TessBaseAPI@tesseract@@QEAAPEADXZ) referenced in function main。我错过了什么? 好消息:编译步骤正在运行。坏消息,链接步骤失败。看起来它没有找到正确的链接库。我建议在发布中使用 libtesseract302.lib,在调试中使用 libtesseract302d.lib。您可以在可视化项目中转到 ConfigurationPropertis / Linked / 命令行,以确保命令行指向正确的位置 因为 OpenCV 一直使用 x64 配置...所以我切换到 x86。不再有 Tesseract 链接错误。现在我有类似的链接错误,但有 OpenCV 函数。所以我扔掉了 OpenCV 并试图构建 Tesseract 只是为了看看它是否有效。为 pixRead(Leptonica?)切换了 imread(OpenCV)。显然,它不能识别这个函数 pixRead。我想我需要 leptonica 标头? allheaders.h 还是什么?我慢慢放弃一切:-/

以上是关于如何在 Visual Studio 2010 中实现 Tesseract 以与项目一起运行的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2010 中使用 Visual Studio 2008 创建的 DLL?

在 Visual Studio 6 中从 VB 调用 VS2010 C++ dll

如何使用 Visual Studio for Mac 在 Xamarin.Forms 中实现多目标?

visual studio 2010不能正确安装,急求

关于在Visual Studio2010中如何卸载Visual Asixist这个插件?为啥将它卸载后Visual Studio启动后仍然有

如何在 GUI 中实现我的 while 循环以使用 Visual Studio 在 C/C++ 中保持按键