Я пытаюсь сериализовать функцию, используя dill
, которая содержит глобальную переменную.Я получаю Segmentation fault (core dumped)
.
import dill
import base64
from imutils.video import VideoStream
import cv2
import imutils
args ={
"prototxt": "MobileNetSSD_deploy.prototxt.txt",
"model": "MobileNetSSD_deploy.caffemodel",
"confidence":0.2
}
net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])
def detect(frame):
f1 = imutils.resize(frame,width=500)
global net
blob = cv2.dnn.blobFromImage(cv2.resize(f1,(300,300)), 0.007843,(300,300), 127.5 )
net.setInput(blob)
detections = net.forward()
return detections
s = base64.b64encode(dill.dumps(detect,recurse=True))
print(s)
и в другом файле он получает искаженную версию функции, которая является выводом первой функции
import dill
import base64
from imutils.video import VideoStream
import cv2
import imutils
args ={
"prototxt": "MobileNetSSD_deploy.prototxt.txt",
"model": "MobileNetSSD_deploy.caffemodel",
"confidence":0.2
}
net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])
b = # searialized function string
f = base64.b64decode(b)
func = dill.loads(f)
frame = cv2.imread("1.jpg")
print(func(frame))
среды, библиотекиВсе настройки в обеих системах идентичны.После отладки кода я обнаружил, что переменная net
отсутствует в функции, созданной после десеализации
Каков возможный способ сериализации этого?
Обновление: Запуск обработчика ошибок дал этот вывод
Fatal Python error: Segmentation fault
Current thread 0x00007f4147647700 (most recent call first):
File "/home/sandeep/Huawei/real-time-object-detection/migration_test1.py", line 17 in detect
File "migration_test2.py", line 17 in <module>
Segmentation fault (core dumped)
line 17 in migration_test1.py represents the `line net.setInput(blob)`
line 17 in migration_test2.py represents the `line print(func(frame))`