Python:可以将多处理与 CV2 对象跟踪器一起使用吗?

Python: Possible to use multiprocessing with CV2 object trackers?

我的代码中有以下循环

        # Update active trackers
        timestamp = vs.get(cv2.CAP_PROP_POS_MSEC)
        for objectID in list(trafficDict):
            ok = trafficDict[objectID].updateTracker(image, timestamp)
            if not ok:
                del trafficDict[objectID] #remove the tracker

我想通过新图像将每个跟踪器(此处:cv2.TrackerMedianFlow)的更新发送到一个单独的进程中。然而,这似乎是不可能的(“不能被腌制”)。我已经在顶层创建了一个函数来调用 class 方法,但错误并没有消失。我怀疑 CV2 不允许这样做?有人以前做过吗?

trafficDict[objectID] 似乎是一些自定义的 Class 实例。您没有分享您实际上是如何沟通这两个过程的,但是对于大多数方法,正如您的错误所暗示的那样,发送的对象必须是 pickable(可由 pickle 序列化模块)或者它必须是一个字符串,因为只有这样的类型才能通过大多数 IPC 方法实际发送。

想象一下,如果类型不会在其他进程中定义 - 它如何解释它刚刚收到的 in-memory 东西?

如果通信是 data-oriented,最简单的解决方案可能是在将它们发送到简单字典之前仅映射您需要的字段(请注意,其中的任何值该字典也必须是可拾取的!)或者自己准备一个 JSON 并通过 pipesocket.

发送一个简单的字符串