Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to implement Tesseract to run with project in Visual Studio 2010

I have a C++ project in Visual Studio 2010 and wish to use OCR. I came across many "tutorials" for Tesseract but sadly, all I got was a headache and wasted time.

In my project I have an image stored as a Mat. One solution to my problem is to save this Mat as an image (image.jpg for example) and then call Tesseract executable file like this:

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

Which gets me an output out.txt and then I call

infile.open ("out.txt");

to read the output from Tesseract.

It is all good and works like a chair but it is not an optimal solution. In my project I am processing a video so save/call .exe/write/read at 10+ FPS is not what I am really looking for. I want to implement Tesseract to existing code so to be able to pass a Mat as an argument and immediately get a result as a String.

Do you know any good tutorial(pref. step-by-step) to implement Tesseract OCR with Visual Studio 2010? Or your own solution?

like image 483
OpenMinded Avatar asked Aug 12 '13 06:08

OpenMinded


People also ask

Is tesseract an API?

Tesseract is an offline and open-source text recognition engine with a fully-featured API that can be easily implemented into any business project via some wrapper modules for Python, pytesseract is one example.


2 Answers

OK, I figured it out but it works for Release and Win32 configuration only (No debug or x64). There are many linking errors under Debug configuration.

So,

1. First of all, download prepared library folder(Tesseract + Leptonica) here:

Mirror 1(Google Drive)

Mirror 2(MediaFire)


2. Extract tesseract.zip to C:\


3. In Visual Studio, go under C/C++ > General > Additional Include Directories

Insert C:\tesseract\include


4. Under Linker > General > Additional Library Directories

Insert C:\tesseract\lib


5. Under Linker > Input > Additional Dependencies

Add:

liblept168.lib
libtesseract302.lib

Sample code should look like this:

#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");
}

For interaction with OpenCV and Mat type images look HERE

like image 197
OpenMinded Avatar answered Nov 15 '22 21:11

OpenMinded


It has been a lot since the last reply but it may be help to others;

  1. I think you must also add "liblept168.lib" and "liblept168d.lib" to Additional Dependencies
  2. Add "liblept168.dll" and "liblept168d.dll" to the destination of your exe.
  3. Add #include to your code.

(This answer must be a comment to Bruce's answer. Sorry for confusion. )

like image 42
farukterzioglu Avatar answered Nov 15 '22 19:11

farukterzioglu