欢迎光临
我们一直在努力

OCR C++ Tesseract监控识别进度(多线程)

这个程序使用C++标准多线程库监控Tesseract OCR的识别进度。

 输入图片:程序运行后会在CMD里打印识别结果:

第一行打印识别进度,在up的电脑上只从1%加载到61%,就开始打印输出结果了。

代码:

#include <tesseract/baseapi.h>
#include <tesseract/ocrclass.h>
#include <leptonica/allheaders.h>
#include <thread>

void monitorProgress(ETEXT_DESC *monitor, int page);
void ocrProcess(tesseract::TessBaseAPI *api, ETEXT_DESC *monitor);

void monitorProgress(ETEXT_DESC *monitor, int page) {
while (1) {
printf( "\\r%3d%%", monitor[page].progress);
fflush (stdout);
if (monitor[page].progress==100)
break;
}
}

void ocrProcess(tesseract::TessBaseAPI *api, ETEXT_DESC *monitor) {
api->Recognize(monitor);
}

int main() {
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
ETEXT_DESC *monitor = new ETEXT_DESC();
if (api->Init("/tesseract/tessdata_best", "eng")) {
fprintf(stderr, "Could not initialize tesseract.\\n");
return 1;
}
api->SetPageSegMode(tesseract::PSM_AUTO);
Pix *image = pixRead("/tesseract-ocr/test/testing/phototest.tif");
if (!image) {
fprintf(stderr, "Leptonica can't process input file!\\n");
return 2;
}
api->SetImage(image);
int page = 0;
std::thread t1(ocrProcess, api, monitor);
std::thread t2(monitorProgress, monitor, page);
t1.join();
t2.join();
pixDestroy(&image);
char *outText = api->GetUTF8Text();
printf("\\n%s", outText);
if (outText)
delete [] outText;
api->End();
delete api;
return 0;
}

赞(0)
未经允许不得转载:171主机测评 » OCR C++ Tesseract监控识别进度(多线程)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址