为何Tesseract-OCR 4(C++ API)运行速度远低于pytesseract
可能的原因及排查方向
- 编译配置差异:这是最常见的诱因。请确认你编译C代码时使用的是Visual Studio的
Release模式,且开启了O2最高优化等级。默认Debug模式会保留大量调试断言、关闭编译优化,运行速度会比Release版慢3~10倍不等。而pytesseract调用的系统Tesseract CLI程序一般都是官方预编译的Release优化版本,本身性能就远高于Debug编译的C程序。 - 训练数据集差异:Tesseract的
tessdata有三个官方分支:fast(速度最快、精度最低)、standard(平衡)、best(精度最高、速度最慢)。请确认你的C代码加载的tessdata文件,和pytesseract调用CLI时用的tessdata是完全相同的版本,避免C侧加载了best数据集、CLI侧用fast数据集导致的速度差。 - 运行参数未对齐:你的C++代码没有显式指定OCR引擎模式、页分割模式等参数,不同编译版本的Tesseract默认参数可能存在差异。你可以在两侧显式指定相同参数对齐测试:
- pytesseract侧修改config为
r'-l eng --oem 3 --psm 3' - C++侧在
Init完成后添加两行配置:api->SetOcrEngineMode(tesseract::OEM_DEFAULT); api->SetPageSegMode(tesseract::PSM_AUTO);
- pytesseract侧修改config为
- 依赖库性能差异:你的C代码用Leptonica的
pixRead加载图像,而Python侧用高度优化的OpenCVimread加载图像。如果你的Leptonica库也是Debug编译、未开启优化,图像读取和预处理阶段就会产生大量耗时。你可以尝试C侧也用OpenCV加载图像,再转换为Tesseract可接收的格式,排除Leptonica的性能影响。 - Tesseract版本差异:你C++侧使用的是Tesseract 4版本,而pytesseract调用的系统CLI如果是Tesseract 5.x版本,5.x版本相比4.x做了大量性能优化,同配置下速度可以提升2~5倍,需要确认两侧Tesseract主版本完全一致。
内容的提问来源于stack exchange,提问作者Benny
相关产品推荐
相关产品推荐

