Linux离线文字识别 C++ 调用Tesseract
·
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
更多推荐



所有评论(0)