gpt4 book ai didi

Python多进程无法pickle opencv videocapture对象

转载 作者:行者123 更新时间:2023-12-04 13:43:34 25 4
gpt4 key购买 nike

我正在尝试创建一个独立的过程来处理我从相机获取的图像。但是 multiprocessing 似乎很难从 opencv 中 pickle 视频捕获模块。任何人都可以建议解决方法吗?我正在使用 python 3.7.1

from multiprocessing import Process
import multiprocessing as mp
import time
import logging
import logging.handlers
import sys

import logging
from enum import Enum
import cv2


class Logger():
@property
def logger(self):
component = "{}.{}".format(type(self).__module__, type(self).__name__)
#default log handler to dump output to console

return logging.getLogger(component)



class MyProcess(Logger):

def __init__(self, ):
self.process = Process(target = self.run, args=())
self.exit = mp.Event()
self.logger.info("initialize class")
self.capture = cv2.VideoCapture(0)

def run(self):
while not self.exit.is_set():

pass
print("You exited!")

def shutdown(self):
print("Shutdown initiated")
self.exit.set()


if __name__ == "__main__":
p = MyProcess()
p.process.start()
print( "Waiting for a while")
time.sleep(3)
p.shutdown()
time.sleep(3)
print("Child process state: {}".format(p.process.is_alive()))

特定的返回错误表示无法 pickle 视频捕获对象。

转储中的文件“C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\multiprocessing\reduction.py”,第 60 行
ForkingPickler(文件,协议(protocol))。转储(对象)

类型错误:无法 pickle cv2.VideoCapture 对象

最佳答案

我不是专家,但我遇到了同样的问题,我以这种方式解决了。
而不是在初始化函数中使用 cv2.VideoCapture(0)

 def __init__(self, ):
self.process = Process(target = self.run, args=())
self.exit = mp.Event()
self.logger.info("initialize class")
self.capture = cv2.VideoCapture(0)
我将初始化移动到运行功能
 def run(self):
self.capture = cv2.VideoCapture(0)
while not self.exit.is_set():
它对我有用。
也许它也对你有帮助

关于Python多进程无法pickle opencv videocapture对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53308334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com