繁体   English   中英

减少 Tesseract OCR 执行时间

[英]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();
}

我也知道缺乏垃圾收集

如果您对提高速度感兴趣,则必须衡量每一步和整个过程。 这可以让您更好地了解可能的预期:

  1. tesseract 初始化- 较小的数据 (ocrb_int) 会有所帮助,但磁盘访问是有限的(例如访问 tesseract 库)。 还删除一些 tesseract 功能可能会减小 tesseract 大小 - 在互联网上搜索)
  2. 图像加载- 磁盘访问和图像大小是您的限制。 你可以玩不同的图像格式
  3. OCR 过程本身 - 图像预处理可以在这个阶段提供帮助(但无论如何它会花费你一些东西)

好的,所以我能够将运行时间减少到 0.036 秒,我正在为未来的开发人员编写我的步骤:)

  1. 我使用了 CMAKE 并且只包含了必要的库,我不知道这对运行时间有多大影响,但我想这是一个很好的做法。

  2. 我用 tesseract 训练了我自己的数据,进行了大量的试验/错误,但最终设法创建了一个具有良好时间/准确性权衡的新数据。

  3. 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();

希望这可以帮助!

根据这个tesseract 有一些 OpenCl 支持,所以在 GPU 中运行它可以提高性能。

如果这不是一个选项,您可以最小化要处理的数据。 尽量不要加载完整的图像,而只加载包含文本的部分。 这称为CRAFT ,但是我主要可以找到 python 实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM