Python单词包聚类

Python单词包聚类,python,opencv,k-means,sift,Python,Opencv,K Means,Sift,编辑:以下是所有仍有问题的人的完整代码 我正在尝试用筛子和弓做一个图像识别项目。到目前为止,我正在努力训练和建立我的字典。我已经阅读了5个不同类的图像,计算了描述符,并将它们并排添加到python列表([])。现在,我正试图使用python版本的BowmainFilter将我的描述符聚类为k=5(这是否正确?对于5个类?)。我试图将cluster()传递给描述符向量,但得到了错误 Traceback (most recent call last): File "C:\Python27\Pro

编辑:以下是所有仍有问题的人的完整代码

我正在尝试用筛子和弓做一个图像识别项目。到目前为止,我正在努力训练和建立我的字典。我已经阅读了5个不同类的图像,计算了描述符,并将它们并排添加到python列表([])。现在,我正试图使用python版本的BowmainFilter将我的描述符聚类为k=5(这是否正确?对于5个类?)。我试图将cluster()传递给描述符向量,但得到了错误

Traceback (most recent call last):


File "C:\Python27\Project2\beginning.py", line 40, in <module>
    bow.cluster(des)
TypeError: descriptors data type = 17 is not supported

如您所见,我一直在添加sift描述符,然后尝试转换为numpy数组(所需的格式)

多亏了opencv论坛,我才明白这一点,而不是使用另一个列表(我使用了上面的描述符),只需使用bow.add(dsc)将您找到的描述符直接添加到您的包中即可


编辑:对于其他有问题的人,我已经上传了脚本的其余部分

Hi,我想做一个10级的图像分类,我想在android智能手机上运行。你能告诉我你对python的发现吗???@sau你能澄清一下你在寻找什么吗?我想在智能手机上运行一个深度学习模型,将图像分为一些类别。现在我希望这个模型的尺寸非常小。@briansrlsjust对你的答案投了赞成票,因为这很有帮助,因为缺乏关于如何做到这一点的清晰文档。请您在OP中添加完整代码,编辑您的答案好吗?我不知道该把
bow.add(doc)
-thx@pepe抱歉花了这么长时间,我刚刚添加了代码。想弄明白这件事真的很痛苦,所以我很高兴能帮上忙。BoW算法的参数k与你试图分类的类的数量无关,它是聚类的数量(即视觉单词)。它基本上表示生成的特征向量的维数,5可以很小。我见过它在k从500-1000到1M的范围内成功使用。看一看你是对的,这是一篇比较老的帖子,但我记得我认为5个集群是合乎逻辑的,因为我有5个类,所以我想要5个质心。更现实的数字会高得多
sift = cv2.SIFT()

descriptors = []
for path in training_paths:
    image = cv2.imread(path)
    print path
    gray = cv2.cvtColor(image, cv2.CV_LOAD_IMAGE_GRAYSCALE)
    kp, dsc= sift.detectAndCompute(gray, None)
    descriptors.append(dsc)

des = np.array(descriptors)

k=5
bow = cv2.BOWKMeansTrainer(k)
bow.cluster(des)
dictionarySize = 5

BOW = cv2.BOWKMeansTrainer(dictionarySize)

for p in training_paths:
    image = cv2.imread(p)
    gray = cv2.cvtColor(image, cv2.CV_LOAD_IMAGE_GRAYSCALE)
    kp, dsc= sift.detectAndCompute(gray, None)
    BOW.add(dsc)

#dictionary created
dictionary = BOW.cluster()