[英]Decreasing Tesseract OCR Execution time
我使用 Tesseract 制作了一个光学字符识别程序,但是它的运行速度比预期的要慢。 我使用我在 github 上找到的 ocrb 训练数据,我相信创建自己的训练数据更小会提高执行速度。 我对 OCR 比较陌生,所以您有任何提高时间效率的技巧吗? 也许是 Pix 的替代品?
在我的电脑上它的运行时间是 0.1 秒,如果它低于 0.066 就完美了。 这是我的 function:
std::string imageToText() {
tesseract::TessBaseAPI api;
api.Init("./tessdata", "ocrb_int");
Pix* image = pixRead("randommrz.jpg");
api.SetImage(image);
return api.GetUTF8Text();
}
我也知道缺乏垃圾收集
如果您对提高速度感兴趣,则必须衡量每一步和整个过程。 这可以让您更好地了解可能的预期:
好的,所以我能够将运行时间减少到 0.036 秒,我正在为未来的开发人员编写我的步骤:)
我使用了 CMAKE 并且只包含了必要的库,我不知道这对运行时间有多大影响,但我想这是一个很好的做法。
我用 tesseract 训练了我自己的数据,进行了大量的试验/错误,但最终设法创建了一个具有良好时间/准确性权衡的新数据。
I did preprocessing manually with OpenCV, didn't use leptonica ( pixRead()
etc.) First problem i encountered in this step was: tessApi->SetImage()
function takes Pix* object
, but there is a overloaded option which you can use喜欢:
tesseract::TessBaseAPI* tess = new tesseract::TessBaseAPI(); cv::Mat image = cv::imread("filename.png"); /* Preprocessing */ tess->SetImage(image.data, image.cols, image.rows, 3, image.step); return tessApi->GetUTF8Text();
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.