Сериализация функции с глобальной переменной - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь сериализовать функцию, используя 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))`
...