下面是我的代码:
def load_cascades():
cascades = []
for root, dirs, files in os.walk(rooted('data/logos')):
for fname in files:
if fname == 'cascade.xml':
path = os.path.join(root, fname)
cascade = cv2.CascadeClassifier(path)
cascades.append(cascade)
return cascades
cascades = load_cascades()
def get_heuristics(pair):
url = pair[0]
image = pair[1]
matches_any_logos = False
for cascade in cascades:
frame = cv2.imread(image, 0)
logos = cascade.detectMultiScale(
image=frame,
minNeighbors=5,
minSize=(25, 25),
)
if len(logos) > 0:
matches_any_logos = True
return {
'matches_any_logos': matches_any_logos,
'matches_corresponding_urls': matches_corresponding_urls,
}
class LogoDetectionVectorizer(DictVectorizer):
def fit(self, x, y=None):
x = [get_heuristics(v) for v in x]
return super(LogoDetectionVectorizer, self).fit(x)
def fit_transform(self, x, y=None):
x = [get_heuristics(v) for v in x]
return super(LogoDetectionVectorizer, self).fit_transform(x)
def transform(self, x, y=None):
x = [get_heuristics(v) for v in x]
return super(LogoDetectionVectorizer, self).transform(x)这是模型训练的机器学习算法中的一个模块,我有一组与我训练的徽标相关的训练模型,但是当我尝试在大型数据集上训练模型时,我得到了这个错误:
cv2.error: /io/opencv/modules/core/src/matrix.cpp:436: error: (-215) u != 0opencv报告内存不足。我不明白为什么?我只是创建了一次所有的级联,然后多次使用它们,我发现我需要在每次迭代后调用cascade.deallocate(),然后重新创建级联,但是python声称cascade.desallocate()并不存在,而且每次都必须重新创建级联会带来明显的性能影响。
有人能帮帮忙吗?谢谢
发布于 2018-05-22 17:49:30
我找到了问题所在,在cascade.detectMultiScale之后我需要打电话给
del frame由于某些原因,OpenCV在读取图像时不会释放内存,并且变量已超出范围,我在GitHub上报告了此内存泄漏
https://stackoverflow.com/questions/50447893
复制相似问题