2017-04-03 75 views
0

我一直在试图挽救一个cv2.knearest训练模型到文件。对于下面的代码(蟒蛇2)酸洗cv2.Knearest对象不工作

import numpy as np 
import cv2 
from sklearn.datasets import load_digits 
import pickle 
from sklearn.externals import joblib 
samples = np.float32(np.loadtxt('feature_vector_pixels.data')) 
responses = np.float32(np.loadtxt('samples_pixels.data')) 
model = cv2.KNearest() 
model.train(samples, responses) 
# save the model to disk 
filename = 'init_model.sav' 
pickle.dump(model, open(filename, 'wb')) 

我得到

Traceback (most recent call last): 
File "picklemake.py", line 14, in <module> 
pickle.dump(model, open(filename, 'wb')) 
File "C:\Users\Karthik\Anaconda3\envs\py27\lib\pickle.py", line 1376, in dump 
Pickler(file, protocol).dump(obj) 
File "C:\Users\Karthik\Anaconda3\envs\py27\lib\pickle.py", line 224, in dump 
self.save(obj) 
File "C:\Users\Karthik\Anaconda3\envs\py27\lib\pickle.py", line 306, in save 
rv = reduce(self.proto) 
File "C:\Users\Karthik\Anaconda3\envs\py27\lib\copy_reg.py", line 70, in _reduce_ex 
raise TypeError, "can't pickle %s objects" % base.__name__ 
TypeError: can't pickle KNearest objects 

是还有其他方法可以将这个模型保存到文件中。

而且 使用model.save,我得到OpenCV Error: The function/feature is not implemented() in CvStatModel::write, file ..\..\..\modules\ml\src\inner_functions.cpp

回答

1

好友,阅读文档下一次。

Knearest延伸CvStatModel。后者有save(...)方法的两个重载不正是你想做的事。

我不知道确切的原因,但经验法则是,如果你使用Python包装在C(++)库,它的类通常不会pickle'able。

+0

使用model.save,我得到'OpenCV的错误:功能/特性未实现()在CvStatModel ::写,文件.. \ .. \ .. \模块\毫升的\ src \ inner_functions.cpp' –

+0

我的不好。我将留下记录的答案,尽管它没用。我不知道如何帮助你。顺便说一句,这个信息添加到原来的问题,它会令你得到的答案上去的机会。 –