我正在使用dlib的HOG人脸检测器。尝试通过pickling / unpickling设置和从redis(localhost)加载模型会导致分段错误。下面是相同的代码。
from redis import Redis
from pickle import dumps, loads
redis = Redis(host='localhost', port=6379, db=0, password='')
from dlib import get_frontal_face_detector
face_detector = get_frontal_face_detector()
redis.set('faceDetector',dumps(face_detector))
retobj = loads(redis.get('faceDetector'))
导致
Segmentation Fault (core dumped)
选择加载和转储来将自定义类对象(dlib.HOG_detector)pickle和unpickle到redis内存。还尝试过使用' dill'图书馆没有运气。
令人困惑的是,这在我的本地计算机(OS X)上运行时没有任何错误,但是在使用Python 2.7.12的Ubuntu 16.04 LTS上运行会产生上述结果。
我之前没有包含的操作系统之间的唯一区别是我在本地计算机上运行virtualenv中的代码。但是我认为这不应该直接或间接地导致这个错误。
寻找可以指向正确方向的任何指针或建议。谢谢!
编辑:根据戴维斯的建议,我尝试使用pickle格式的第2版来挑选对象。发布这个我在尝试从pickle模块加载时遇到下面提到的错误,我仍然无法解决。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/pickle.py", line 1388, in loads
return Unpickler(file).load()
File "/usr/lib/python2.7/pickle.py", line 864, in load
dispatch[key](self)
File "/usr/lib/python2.7/pickle.py", line 1089, in load_newobj
obj = cls.__new__(cls, *args)
TypeError: pybind11_object.__new__(dlib.fhog_object_detector) is not safe, use object.__new__()