python计算机视觉-图像内容分类

手势识别

先去作者的网址下载了该有的代码http://shop.oreilly.com/product/0636920022923.do

涉及的python文件有dsift,sift,imtool,import knn, bayes


处理数据的代码:

def get_imlist(path):
    """    Returns a list of filenames for 
        all jpg images in a directory. """
    path=str(path)
    if path=="":
        return[ ]
    path=path.replace("/","\\")
    return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.ppm')]


def get_dsift(imlist):
    for filename in imlist:
        featfile=filename[:-3]+'dsift'
dsift.process_image_dsift(filename,featfile,10,5,resize=(50,50))


imlist1=get_imlist('D:/DLcode/PCV/uniform/train')
imlist2=get_imlist('D:/DLcode/PCV/uniform/test‘)
get_dsift(imlist1)
get_dsift(imlist2)


在做这部分的时候,由于我眼瞎,一直把ppm的文件看成是ppg.所以怎么也没有生成dsift文件。

还有一个事情是,我直接找到存放图像的目录,拷贝其路径D:\DLcode\PCV\uniform\train.但是怎么也不成功。后来才知道应该把‘\’改成'/' 

然后就成功生成稠密sift特征文件了。


由于原作者文档里有svm.所以我又去找怎么安SVM.当然网上众说纷纭,但是我仍没有成功。

后来还是去python的包的网址去找SVM的.whl文件。然后pip install~~ 安装成功了~


之后用knn分类,神奇的是,正确率达到百分百。不可能啊,然后我就调了好久。最后发现问题又出现在路径上面

def read_gesture_features_labels(path):
    # create list of all files ending in .dsift
    featlist = [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.dsift')]

    # read the features
    features = []
    for featfile in featlist:
        l,d = sift.read_features_from_file(featfile)
        features.append(d.flatten())
    features = array(features)

    # create labels
    labels = [featfile.split('\\')[-1][0] for featfile in featlist]
    return features,array(labels) 


在作者原文上是   labels = [featfile.split('/')[-1][0] for featfile in featlist]

然而处理以后的路径是D:/DLcode/PCV/uniform/train\\A.dsift

所以处理的标记永远是t类.....

懒得处理路径了,我就直接改成了\\


然后就都能成功了,虽然精确率有点低,好歹跑通了啊。可能是数据比较少的原因吧。

下图是用knn分类



下是用svm分类:




你可能感兴趣的:(python计算机视觉-图像内容分类)