C++及OpenCV中調用Tesseract

參考地址

How to Use Tesseract with c++ or OpenCV and some code trace

1.Tesseract 在C++中直接使用

// tess.cpp: 
// Recognize text on an image using Tesseract API and print it to the screen
// Usage: ./tess image.png

#include <tesseract/baseapi.h>
#include <tesseract/strngs.h>
#include <iostream>

int main(int argc, char** argv)
{
    if (argc != 2)
    {
        std::cout << "Please specify the input image!" << std::endl;
        return -1;
    }

    const char* lang = "eng";
    const char* filename = argv[1];

    //新建tess基類
    tesseract::TessBaseAPI tess;
    //初始化
    tess.Init(NULL, lang, tesseract::OEM_DEFAULT);
    //設置識別模式
    tess.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);

    FILE* fin = fopen(filename, "rb");
    if (fin == NULL)
    {
        std::cout << "Cannot open " << filename << std::endl;
        return -1;
    }
    fclose(fin);

    STRING text;
    //進行識別
    if (!tess.ProcessPages(filename, NULL, 0, &text))
    {
        std::cout << "Error during processing." << std::endl;
        return -1;
    }
    else
        std::cout << text.string() << std::endl;

    return 0;
}

ubuntu下編譯命令

g++ -I/usr/local/include `pkg-config --cflags --libs tesseract` tess.cpp -o tess

進行OCR識別的主體函數爲:

 

tesseract::TessBaseAPI::
bool TessBaseAPI::ProcessPage(Pix* pix, int page_index, const char* filename,
                              const char* retry_config, int timeout_millisec,
                              STRING* text_out)

在分析流程時,專注此API,位置在baseapi.cpp;

後續分析;

2. Tesseract同OpenCV結合使用

可以選擇ROI然後進行OCR;

爲了識別cv::Mat矩陣,將其傳遞至TessBaseAPI::SetImage();

使用TessBaseAPI::GetUTF8Text()得到識別後的文字;

// tesscv.cpp:
// Using Tesseract API with OpenCV

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <tesseract/baseapi.h>
#include <iostream>

int main(int argc, char** argv)
{
    // Usage: tesscv image.png
    if (argc != 2)
    {
        std::cout << "Please specify the input image!" << std::endl;
        return -1;
    }

    // Load image
    cv::Mat im = cv::imread(argv[1]);
    if (im.empty())
    {
        std::cout << "Cannot open source image!" << std::endl;
        return -1;
    }

    cv::Mat gray;
    cv::cvtColor(im, gray, CV_BGR2GRAY);
    // ...other image pre-processing here...

    // Pass it to Tesseract API
    tesseract::TessBaseAPI tess;
    tess.Init(NULL, "eng", tesseract::OEM_DEFAULT);
    tess.SetPageSegMode(tesseract::PSM_SINGLE_BLOCK);
    tess.SetImage((uchar*)gray.data, gray.cols, gray.rows, 1, gray.cols);

    // Get the text
    char* out = tess.GetUTF8Text();
    std::cout << out << std::endl;

    return 0;
}

ubuntu 編譯命令

g++ -I/usr/local/include `pkg-config --cflags --libs opencv tesseract` tesscv.cpp -o tesscv

over!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章