Tesseract是一个文字识别库,支持100多种语言。前面的博客有写到android调用的(Android离线文字识别-tesseract4android调用-CSDN博客),本文写下Linux的c++调用。

0,github:GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engine (main repository)

1,安装Tesseract OCR

sudo apt install tesseract-ocr

2,安装Tesseract的C++ API开发库

sudo apt-get install libtesseract-dev

3,语言包下载路径:https://github.com/tesseract-ocr/tessdata_best

4,语言包安装路径:/usr/share/tesseract-ocr/4.00/tessdata/

5,支持语言列表:Languages/Scripts supported in different versions of Tesseract | tessdoc

6,调用demo:

#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
#include <opencv2/opencv.hpp>
 
 //编译:g++ -o callTesseract callTesseract.cpp -llept -ltesseract  `pkg-config --cflags --libs opencv4`

int main() {
    char *outText;
    tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
    // 初始化Tesseract,设置语言为英语,并指定是否需要对结果进行布局分析。
    if (api->Init(NULL, "eng")) {
        printf("Could not initialize tesseract.\n");
        exit(1);
    }

    //白名单
    api->SetVariable("tessedit_char_whitelist", "1234567890ABCDEFGHJKLMNPQRSTUVWXYZ");
    //分辨率
    api->SetVariable("user_defined_dpi", "300");

    //读取图片
    cv::Mat originalImage = cv::imread("/home/huahua/lpr_eng.png", cv::IMREAD_COLOR); 
    if (originalImage.empty())
    {
        std::cerr << "Could not open or find the image" << std::endl;
    }

    // 将彩色图像转换为灰度图像
    cv::Mat grayImage;
    cv::cvtColor(originalImage, grayImage, cv::COLOR_BGR2GRAY);

    // 对灰度图像进行二值化
    cv::Mat binaryImage;
    cv::threshold(grayImage, binaryImage, 128, 255, cv::THRESH_BINARY);

    api->SetImage(image.data, image.cols, image.rows, image.step / image.cols, image.step);

    //识别范围
    //api->SetRectangle(image.cols*0.5, 0, image.cols*0.95, image.rows);

    // 获取OCR结果
    outText = api->GetUTF8Text();
    printf("OCR output:\n%s", outText);
 
    // 清理工作
    api->End();
    delete [] outText;
    delete api;
 
    return 0;
}

7,demo依赖opencv,编译报错的话,需要手动安装下

sudo apt install libopencv-dev

更多推荐