这是我的代码:
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 != 0
并且opencv报告它内存不足。我不懂为什么?我只是创建所有级联一次,然后多次使用它们,我看到我需要在每次迭代后调用cascade.deallocate(),然后重新创建级联但是python声称cascade.desallocate()不存在以及每次都必须重建级联的明显性能。
有人可以帮忙吗?感谢
答案 0 :(得分:0)
我发现了这个问题,就在cascade.detectMultiScale之后我需要调用
del frame
出于某种原因,OpenCV在读取图像并且变量超出范围时不会释放内存,我在GitHub上报告了这个内存泄漏