C++ 如何在VisualStudio2010中实现Tesseract与project一起运行

C++ 如何在VisualStudio2010中实现Tesseract与project一起运行,c++,opencv,ocr,tesseract,C++,Opencv,Ocr,Tesseract,我在Visual Studio 2010中有一个C++项目,希望使用OCR。我遇到了许多Tesseract的“教程”,但遗憾的是,我得到的只是头痛和浪费时间 在我的项目中,我有一个存储为垫子的图像。我的问题的一个解决方案是将此Mat保存为图像(例如image.jpg),然后调用Tesseract可执行文件,如下所示: system("tesseract.exe image.jpg out"); #include <tesseract\baseapi.h> #include <

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

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

system("tesseract.exe image.jpg out");
#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");
}
这会给我一个output.txt,然后我调用

infile.open ("out.txt");
从Tesseract读取输出

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


您是否知道使用VisualStudio2010实现Tesseract OCR的好教程(请参阅分步教程)?还是您自己的解决方案?

您需要通过API使用库

很可能:

  • 首先,下调libs()。它们是用Visual2008编译的,但应该足够了

  • 直接使用API(例如,查看使用它的开源项目:)并阅读以下答案中的链接:


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

  • 我认为还必须将“liblept168.lib”和“liblept168d.lib”添加到其他依赖项中
  • 将“liblept168.dll”和“liblept168d.dll”添加到exe的目标
  • 将#include添加到代码中
    (此答案必须是对Bruce答案的评论。抱歉混淆。)

    好的,我想出来了,但它只适用于发行版和Win32配置(无调试或x64)。调试配置下存在许多链接错误

    所以

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


    2.提取
    tesseract.zip
    C:\


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

    插入
    C:\teseract\include


    4.
    链接器>常规>附加库目录下

    插入
    C:\tesseract\lib


    5.
    链接器>输入>其他依赖项下

    加:


    示例代码应如下所示:

    system("tesseract.exe image.jpg out");
    
    #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");
    }
    
    #包括
    #包括
    #包括
    使用名称空间std;
    内部主(空){
    tesseract::TessBaseAPI;
    api.Init(“,”eng“,tesseract::OEM_DEFAULT);
    api.SetPageSegMode(静态_cast(7));
    api.SetOutputName(“输出”);
    coutimage;
    PIX*pixs=pixRead(图像);
    字符串文本输出;
    ProcessPages(图像、NULL、0和文本输出);
    
    Cout下载库。在C/C++>General>Additional Include目录中:Added\Include文件夹。在Linker>General>Additional Library目录中:Added\lib文件夹。在Linker>Input>Additional Dependencies中:Added libtesseract302.lib和libtesseract302d.lib。编写了一个简单的程序,由于每个名为o的方法的链接错误而无法生成n对象。例如:
    Error 9 Error LNK2019:未解析的外部符号“public:char*\uu cdecl tesseract::TessBaseAPI::GetUTF8Text(void)”(?GetUTF8Text@TessBaseAPI@tesseract@@QEAAPEADXZ)在函数main
    中引用。我缺少什么?好消息:编译步骤正在工作。坏消息,链接步骤失败。它似乎找不到用于链接的正确库。我建议在发行版中使用libtesseract302.lib,在调试中使用libtesseract302d.lib。您可以在中转到ConfigurationPropertis/Linked/命令行确保命令行指向正确位置的可视化项目由于OpenCV,一直在使用x64配置…因此我切换到x86。没有更多的Tesseract链接错误。现在我有类似的链接错误,但使用OpenCV函数。因此我丢弃了OpenCV,尝试构建Tesseract,只是为了看看它是否有效。切换imread(OpenCV)对于pixRead(Leptonica?)。显然,它不识别这个函数pixRead。我想我需要Leptonica头?allheaders.h还是什么?我慢慢放弃了一切:-/我说语言数据路径就像它工作的那样。api.Init(“C:\\tessdata”,“eng”,tesseract::OEM_DEFAULT);我找不到“tessdata”的文件夹??我应该创建它还是它必须在@İsmailKocacanI下载文件夹中?您的链接但它没有tessdata???@OpenMindedCustom“tessdata”语言文件夹由用户@İsmailKocacan使用,所以请询问他。当您说“添加#包含到您的代码中”时,必须包含哪些内容?您应该添加:#包含#包含#