酸洗cv2.Knearest对象不起作用

问题描述 投票:0回答:1

我一直在尝试将cv2.knearest训练过的模型保存到文件中。对于下面的代码(python 2)

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

python pickle cv2
1个回答
1
投票

Knearest延伸CvStatModel。后者有两个save(...)方法的重载,完全符合你的需要。

我不确切知道为什么,但经验法则是如果你在C(++)库上使用python包装器,它的类通常不会被pickleable。

© www.soinside.com 2019 - 2024. All rights reserved.