Python Opencv 'numpy.ndarray'对象没有属性'iteritems'



最近我一直在研究一个对象识别器。下面编写的一些代码是复制的。当我运行代码时,我遇到了这个奇怪的错误:AttributeError: 'numpy.ndarray' object has no attribute 'iteritems'我无法修复。我在互联网上查找,但没有找到可以使用的相关答案。提前谢谢。

错误:

Traceback (most recent call last):
File "/Users/arkumar/TestProj./ObjDetect.py", line 67, in <module>
ma = Matcher('features.pck')
File "/Users/arkumar/TestProj./ObjDetect.py", line 40, in __init__
for k, v in self.data.iteritems():
AttributeError: 'numpy.ndarray' object has no attribute 'iteritems'

法典:

import cv2
import pickle
import numpy as np
import scipy
import os

class ExtractFeatures():
def __init__(self, img = 'NULL', vectorSize = 32, out = 'features.pck'):
self.img = img
self.out = out
self.vectorSize = vectorSize
self.surf = cv2.xfeatures2d.SURF_create(400)
self.img = cv2.imread(img)
self.kp, self.des = self.surf.detectAndCompute(self.img, None)

self.vectorSize = 32
self.kp = sorted(self.kp, key=lambda x: -x.response)[:self.vectorSize]
print self.des
self.des = self.des.flatten()
needed_size = (self.vectorSize * 64)
if self.des.size < needed_size:
dsc = np.concatenate([self.des, np.zeros(needed_size - self.des.size)])
print(self.des)
with open(self.out, 'w') as fp:
pickle.dump(self.des, fp)

class Matcher(object):
def __init__(self, path = 'NULL'):
with open('features.pck') as fp:
self.data = pickle.load(fp)
self.names = []
self.matrix = []
for k, v in self.data.iteritems():
self.names.append(k)
self.matrix.append(v)
self.matrix = np.array(self.matrix)
self.names = np.array(self.names)
def cos_cdist(self, vector):
v = vector.reshape(1, -1)
return scipy.spatial.distance.cdist(self.matrix, v, 'cosine').reshape(-1)
def match(self, image_path, topn=5):
features = ExtractFeatures(image_path)
img_distances = self.cos_cdist(features)
nearest_ids = np.argsort(img_distances)[:topn].tolist()
nearest_img_paths = self.names[nearest_ids].tolist()
return nearest_img_paths, img_distances[nearest_ids].tolist()
def show_img(path):
img = cv2.imread(path, mode="RGB")
img.imshow()
cv2.waitkey(0)
imagePath = 'flute.jpg'
ExtractFeatures(imagePath)
ma = Matcher('features.pck')

print 'Query:'
show_img(imagePath)
names, match = ma.match(imagePath, topn=3)
print 'Result:'
print 'Match :   '
show_img(os.path.join(imagePath))

有人可以帮忙吗?

我刚刚发现了如何解决这个令人费解的问题。 @FlyingTeller说它需要一本字典。这对我有帮助,因为我Self.data翻译成字典。谢谢。

相关内容

  • 没有找到相关文章

最新更新