gpt4 book ai didi

ios - 检测人脸时 detectMultiScale 内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-03 23:01:02 26 4
gpt4 key购买 nike

我正在使用以下函数(成功地)在 iOS 中使用 OpenCV 检测人脸,但根据 Instruments,它似乎每秒泄漏 4-5Mb 的内存。

该函数定期从 processFrame() 调用。

通过消除过程,导致问题的是在 face_cascade 上调用 detectMultiScale 的行。

我尝试过使用自动释放池围绕部分(因为我在进行视频处理时在非 UI 线程上释放内存之前遇到过这个问题)但这并没有什么不同。

我也曾尝试强制 faces Vector 释放其内存,但同样无济于事。

有没有人有什么想法?

- (bool)detectAndDisplay :(Mat)frame
{
BOOL bFaceFound = false;

vector<cv::Rect> faces;
Mat frame_gray;

cvtColor(frame, frame_gray, CV_BGRA2GRAY);
equalizeHist(frame_gray, frame_gray);

// the following line leaks 5Mb of memory per second
face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, cv::Size(100, 100));

for(unsigned int i = 0; i < faces.size(); ++i)
{
rectangle(frame, cv::Point(faces[i].x, faces[i].y),
cv::Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height),
cv::Scalar(0,255,255));
bFaceFound = true;
}

return bFaceFound;
}

最佳答案

我正在使用与您相同的源代码,遇到完全相同的问题 - 内存泄漏。唯一的区别是:我使用 Qt5 for Windows 并且加载单独的 .jpg 图像(实际上有数千个)。我尝试过相同的技术来防止崩溃,但没有成功。不知你是否已经解决了问题?

描述了类似的问题here (粗体段落,在页面的真正底部),但是这是针对以前版本的 OpenCV 界面的编写。作者说:

The above code (function detect and draw) has a serious memory leak when run in an infinite for loop for real time face detection.

我的粗略猜测是,泄漏是由 detectMultiScale() 方法中的资源处理不当造成的。我还没有检查出来,但是 cvHaarDetectObjects() 方法解释了 here ,可能是更好的解决方案(但是使用旧版本的 OpenCV 可能不是最好的主意)。

结合上一个链接的建议(在操作末尾添加这一行:cvReleaseMemStorage(&storage)),应该堵漏了。

写这篇文章让我想尝试一下,所以一旦我知道这是否有效,我会尽快告诉你。


编辑:我的猜测可能错误。尝试在每次检测后简单地清除“面孔”向量,而不是释放它的内存。我现在运行脚本已经有一段时间了,检测到几百张人脸,仍然没有任何问题。


编辑 2: 是的,就是这样。 只需在每次检测后添加 faces.clean()一切都会正常进行。干杯。

关于ios - 检测人脸时 detectMultiScale 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18234314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com