使用 Tesseract 进行 OCR 会导致 GetUTF8Text 方法出现内存泄漏
Posted
技术标签:
【中文标题】使用 Tesseract 进行 OCR 会导致 GetUTF8Text 方法出现内存泄漏【英文标题】:Using Tesseract for OCR gives memory leak on GetUTF8Text method 【发布时间】:2012-06-04 02:38:32 【问题描述】:我正在使用 tesseract OCR 读取名片。 我有内存泄漏,我无法解决它,我不知道如何解决。
在我的代码中...
tesseract->Recognize(NULL);
char* utf8Text = tesseract->GetUTF8Text();
GetUTF8Text() 方法会导致内存泄漏。 这是内存泄漏工具的日志:
tesseract::TessBaseAPI::GetUTF8Text()
operator new[](unsigned long) libstdc++.6.dylib
operator new(unsigned long) libstdc++.6.dylib
malloc libsystem_c.dylib
在一些内存泄漏后,应用程序崩溃。 GetUTF8Text 在 baseapi.h 文件中。我认为 tessearact 是由 c++ 编写的。我不知道c++。 任何人都可以帮忙吗?或者有人有干净的tesseract吗?
【问题讨论】:
【参考方案1】:根据我在baseapi.h 中找到的文档。
/**
* The recognized text is returned as a char* which is coded
* as UTF8 and must be freed with the delete [] operator.
*/
char* GetUTF8Text();
因此,完成后您需要delete []
utf8text
。
tesseract->Recognize(NULL);
char* utf8Text = tesseract->GetUTF8Text();
... //use utf8Text or copy if necessary
delete [] utf8text;
【讨论】:
我真的很感谢你们俩。我已经阅读了baseapi中的评论。但我认为它是“删除 tesseract”。 我明白,尤其是当你说你不懂 C++ 时。每当您使用new []
分配一个数组时(这就是 tesseract 正在做的事情),那么您必须使用 delete []
删除它
我知道 C++,这就是我转向 vb.net 的原因。只是它还是那样吗?另外,无论如何,您如何快速获得内存泄漏。
一旦不再引用它,它就会成为泄漏。
你好,在这一行中,我的访问 tesseract->Recognize(NULL); char* utf8Text = tesseract->GetUTF8Text();请告诉我如何解决这个问题..【参考方案2】:
来自 Tesseract 文档:
识别的文本以编码为 UTF8 的 char* 形式返回,并且 必须使用 delete [] 运算符释放。
换一种说法:释放内存是你的责任,所以它是你的泄漏而不是 Tesseracts。
【讨论】:
是的,我读过。在 startOCR 中:tesseract->Recognize(NULL); char* utf8Text = tesseract->GetUTF8Text(); [self performSelectorOnMainThread:@selector(ocrProcessingFinished:) withObject:[NSString stringWithUTF8String:utf8Text] waitUntilDone:NO];在 ocrProcessingFinished 事件中:tesseract->Clear();正方体->结束();删除正方体;仍然存在内存泄漏。以上是关于使用 Tesseract 进行 OCR 会导致 GetUTF8Text 方法出现内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章
Python:在使用 python tesseract API 接口时遇到 OCR 问题
Windows安装用于OCR的Tesseract及使用命令行参数进行OCR