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

问题描述

我的代码中包含以下循环

        # 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)发送到单独的进程中。但是,这似乎是不可能的(“不能腌制”)。我已经在顶层创建了一个函数调用方法,但是错误并没有消失。我怀疑CV2不允许这样做吗?以前有做过的人吗?

解决方法

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

想像一下,如果在其他过程中不会定义类型-它如何解释刚刚收到的内存中的东西?

如果通信是面向面向数据的,则最简单的解决方案是仅映射所需的字段,然后再将其发送到简单的字典中(请注意,该dict中的任何值都必须是可选的还是自己准备一个JSON,然后通过pipesocket发送一个简单的字符串。