在启用 OpenCL 选项的情况下使用 Tesseract 时出现 malloc 错误

malloc error while using Tesseract with OpenCL option enabled

本文关键字:Tesseract 错误 malloc OpenCL 启用 选项 情况下      更新时间:2023-10-16

我在启用OpenCL选项的情况下编译了Tesseract 3.04.00。尝试使用 GetUTF8Text() 从图像中提取文本时,存在 malloc 错误,我想是内存泄漏。

找到了之前添加的内存泄漏错误的补丁,但是,我编译的版本已经添加了补丁。我不确定为什么会发生内存泄漏。

这是我得到的输出:

[DS] Profile read from file (tesseract_opencl_profile_devices.dat).
[DS] Device[1] 1:Intel(R) Core(TM) i5-4250U CPU @ 1.30GHz score is 14049349632.000000
[DS] Device[2] 1:HD Graphics 5000 score is 14049349632.000000
[DS] Device[3] 0:(null) score is 21474836480.000000
[DS] Selected Device[2]: "HD Graphics 5000" (OpenCL)
ACP(15114,0x7fff795bf300) malloc: *** mach_vm_map(size=1125865547108352) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug

以前有人遇到过这个问题吗?我该如何解决这个问题?

我不

熟悉Tesseract,但我怀疑你提到的补丁是针对不同的问题。

查看输出详细信息,看起来您使用的是苹果计算机。请查看下面的链接,其中包含一些在Mac OS X上安装和使用Tesseract的"方法":https://ryanfb.github.io/etc/2015/03/18/experimenting_with_opencl_for_tesseract.html

希望这对解决问题有用。无论如何,错误"无法分配区域"意味着没有剩余内存空间。确实需要大量的内存(size=1125865547108352,大约 1.126 PB)。要弄清楚到底发生了什么,你应该使用 gdb 这样的分析工具分析代码(实际上错误消息说"在malloc_error_break中设置断点进行调试"),或者至少上传一个小程序可用于重现问题。

你的内存用完了。 (错误代码 = 3)"无法分配区域"表示 Malloc 尝试分配的内存多于可用内存。

也许您可以尝试将识别限制为图像的子矩形 - 在 SetImage 之后调用 SetRectangle(左、上、宽、高)。每个 SetRectangle 都会清除识别结果,以便可以使用同一图像识别多个矩形。例如

  api->SetRectangle(30, 86, 590, 100);

如果没有看到您的代码,我猜您要么没有销毁对象并释放内存,要么该版本存在错误。 要检查它是否是前者,您可以使用内存泄漏检测工具/库,要检查它是否是后者,您可以调试它或只是尝试使用其他版本。