Вот мой код:
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 () не существует, а такжеочевидное снижение производительности при необходимости воссоздавать каскады каждый раз.
Может кто-нибудь помочь?Спасибо