Python进程池报错TypeError: can‘t pickle cv2.dnn_Net objects

2023-05-16

Python进程池报错

Traceback (most recent call last):
  File "data_pool2.py", line 86, in <module>
    processData1()
  File "data_pool2.py", line 75, in processData1
    print('res:',res[0].get().shape,len(res))
  File "D:\python_fancp\Anaconda3.7\lib\multiprocessing\pool.py", line 657, in get
    raise self._value
  File "D:\python_fancp\Anaconda3.7\lib\multiprocessing\pool.py", line 431, in _handle_tasks
    put(task)
  File "D:\python_fancp\Anaconda3.7\lib\multiprocessing\connection.py", line 206, in send
    self._send_bytes(_ForkingPickler.dumps(obj))
  File "D:\python_fancp\Anaconda3.7\lib\multiprocessing\reduction.py", line 51, in dumps
    cls(buf, protocol).dump(obj)
TypeError: can't pickle cv2.dnn_Net objects

原因就是:
  神经网络CNN的模型加载中不能用类Class的self变量,将相关的模型加载过程,修改为全局变量,解决问题。

这种方式加载模型报错

class FaceFeatureAPI:
    def __init__(self, pb_path):
        self.opencv_net = cv2.dnn.readNetFromTensorflow(pb_path)

改为全局变量加载

PB_PATH = os.path.join(r"./models", "frozen_model.pb") 
opencv_net = cv2.dnn.readNetFromTensorflow(PB_PATH)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python进程池报错TypeError: can‘t pickle cv2.dnn_Net objects 的相关文章

随机推荐