python-sift-kmeans-svm图片分类

1理论

理论部分见博客:SIFT+词袋+SVM的深入理解,感谢博主herr_kun,这个真是写的太好了,通俗易懂,尤其是那张自动笔画的图,真好https://blog.csdn.net/herr_kun/article/details/80220389

2代码

使用的代码来源于https://blog.csdn.net/Yan456jie/article/details/52313317
感谢博主Yan456jie
在跑代码的时候,发现该代码有一些函数在新版本的python上跑不通,有一些错误,所以调了一下

2.1debug记录

主要遇到的错误是
1前期报了一堆错,我查博客做了一堆,结果发现主要是改了文件读写的代码,结果读不到文件了,这个只能具体问题具体分析了,就不记录了。
2 路径中最好不要有中文!哪怕已经可以读取中文路径下的东西了,可是我在调用im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)时依然报错,而且是报说opencv 崩溃了。。。果真是玄学。
3 由于版本更新,sift特征的函数改变了,下列关键语句不能用了

#关键点检测对象
    fea_det = cv2.FeatureDetector_create("SIFT")
    #特征提取对象
    des_ext = cv2.DescriptorExtractor_create("SIFT")

解决方法
参考该博客,使用新的函数提取sift,感谢博主
StevenGerrad,https://blog.csdn.net/qq_40690815/article/details/104946216
4由于版本更新,cross_validation不能使用了
解决方法:参考该博客,感谢博主ronaldo2018
https://blog.csdn.net/sinat_17697111/article/details/84835873
代码中的cross_validation都改成model_selection

2.2代码

代码如下

#coding=utf-8
#-*- coding: utf-8 -*-
import argparse as ap
import cv2
import imutils
import numpy as np
import os
from sklearn.externals import joblib
from scipy.cluster.vq import *
from sklearn import preprocessing
import math
import sys
import numpy
from sklearn import metrics
from sklearn.feature_extraction.text import HashingVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.multiclass import OneVsRestClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import MultiLabelBinarizer, StandardScaler
from sklearn.svm import SVC
from sklearn.svm import LinearSVC
import codecs
from sklearn.feature_selection import SelectPercentile, f_classif
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
# from sklearn import cross_validation #报错
#ImportError: cannot import name 'cross_validation' from 'sklearn' (C:\Users\wyh\Anaconda3\lib\site-packages\sklearn\__init__.py)
# cross_validation路径换了,现在放在model_selection,改成下面这句
from sklearn import model_selection
from sklearn.utils import shuffle
import sys



if sys.getdefaultencoding()!='utf-8':
    reload(sys)
    sys.setdefaultencoding('utf-8')

'''
使用词袋模型对图像进行分类:
1、数据格式,文件夹名即类别,每个文件夹下是一类图像
2、提取sift特征,将所有图像的sift特征放在一起,进行聚类,聚出n个视觉词
3、计算每幅图像有哪些视觉词,统计出词频矩阵
4、根据矩阵计算idf,进而得到tfidf矩阵,并对其进行L2归一化(向量中每个元素除以向量的L2范数->x/平方和开根号)
5、使用一般分类模型对其进行分类,计算P,R,F
'''
def load_data(path):
    '''
    每个文件夹下是一种图片
    :param path:种类文件夹路径
    :return: 图片路径列表和标签列表
    '''
    categories = os.listdir(path)
    img_pathes = []
    labels = []
    for mypath, dirs, files in os.walk(path):
            for file in files:
                mypath1=mypath+'/'
                mytmp = os.path.
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值