要使用 OpenCV 机器学习算法,您必须编写一些包装类:
1.第一堂家长课
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.最后SvM包装器:
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.使用示例:
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)
设置参数
设置参数很简单 - 只需编写一个将参数作为键保存的字典即可。您应该查看原始文档以查看所有可能的参数和允许的值:http://opencv.itseez.com/modules/ml/doc/support_vector_machines.html#cvsvmparams http://opencv.itseez.com/modules/ml/doc/support_vector_machines.html#cvsvmparams
是的,svm_type 和 kernel_type 的可能值在 C++ 中,但有一种简单的方法可以将这些常量转换为 Python 表示形式,例如 CvSVM::C_SVC 在 Python 中写为 cv2.SVM_C_SVC。
Prelude要获取更多机器学习算法的包装器,请查看字母识别.py磁盘上的 opencv 示例中的示例或 OpenCV 存储库的打开 url:https://github.com/Itseez/opencv/tree/master/samples/python2 https://github.com/Itseez/opencv/tree/master/samples/python2