Python OpenCV SVM implementation

后端 未结 2 1612
挽巷
挽巷 2021-01-31 23:03

So I have a matrix with my sample images (all turned into vectors) which was run trough PCA/LDA, and a vector which denotes the class each images belongs to. Now I want to use t

2条回答
  •  灰色年华
    2021-01-31 23:21

    To use OpenCV machine learning algorithms, you have to write some wrapper classes:

    1. First parent class

    class StatModel(object):
        '''parent class - starting point to add abstraction'''    
        def load(self, fn):
            self.model.load(fn)
        def save(self, fn):
            self.model.save(fn)
    

    2. Finally SvM wrapper:

    class SVM(StatModel):
        '''wrapper for OpenCV SimpleVectorMachine algorithm'''
        def __init__(self):
            self.model = cv2.SVM()
    
        def train(self, samples, responses):
            #setting algorithm parameters
            params = dict( kernel_type = cv2.SVM_LINEAR, 
                           svm_type = cv2.SVM_C_SVC,
                           C = 1 )
            self.model.train(samples, responses, params = params)
    
        def predict(self, samples):
            return np.float32( [self.model.predict(s) for s in samples])
    

    3.Example usage:

    import numpy as np
    import cv2
    
    samples = np.array(np.random.random((4,2)), dtype = np.float32)
    y_train = np.array([1.,0.,0.,1.], dtype = np.float32)
    
    clf = SVM()
    clf.train(samples, y_train)
    y_val = clf.predict(samples)
    

    Setting parameters

    Setting parameters is simple - just write a dictionary that holds the parameters as keys. You should look original documentation to see all possible parameters and allowed values: http://opencv.itseez.com/modules/ml/doc/support_vector_machines.html#cvsvmparams

    Yes, possible values for svm_type and kernel_type are in C++, but there is easy way to convert those constants into Python representation, for example CvSVM::C_SVC is written as cv2.SVM_C_SVC in Python.

    Prelude To get more wrappers for machine learning algorithms, look into letter-recog.py example in your opencv examples on disk or open url of OpenCV repository: https://github.com/Itseez/opencv/tree/master/samples/python2

提交回复
热议问题