Python 蟒蛇3&;Opencv3&;多处理系统错误

Python 蟒蛇3&;Opencv3&;多处理系统错误,python,opencv,python-3.x,python-multiprocessing,opencv3.0,Python,Opencv,Python 3.x,Python Multiprocessing,Opencv3.0,我目前正在使用OpenCV 3和python 3.4。我的机器是MacBookPro,带有OS X 10.10(约塞米蒂),当使用OpenCV中的一些函数与多处理库结合使用时,我遇到了问题。下面是一个(非常)简化的示例代码,它再现了错误: import multiprocessing import numpy import cv2 class Sample(): def __init__(self): self.mask = [] # Testing de

我目前正在使用OpenCV 3和python 3.4。我的机器是MacBookPro,带有OS X 10.10(约塞米蒂),当使用OpenCV中的一些函数与多处理库结合使用时,我遇到了问题。下面是一个(非常)简化的示例代码,它再现了错误:

import multiprocessing
import numpy
import cv2


class Sample():
    def __init__(self):
        self.mask = []  # Testing

    def experiment(self):

        img = cv2.imread("/Users/luigolas/PycharmProjects/PyReid/tests/test_resources/P2/cam1/P2_001_cam1_1.png")
        self.mask.append(segment(img))
        print("Segmented!")
        processes = [multiprocessing.Process(target=self._func) for i in range(3)]
        _ = [p.start() for p in processes]
        _ = [p.join() for p in processes]

    def _func(self):
        img = cv2.imread("/Users/luigolas/PycharmProjects/PyReid/tests/test_resources/P2/cam2/P2_001_cam2_1.png")
        cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
        print("Done!!")


def segment(image):
    bgdmodel = numpy.zeros((1, 65), numpy.float64)
    fgdmodel = numpy.zeros((1, 65), numpy.float64)
    mask_source = "/Users/luigolas/PycharmProjects/PyReid/resources/masks/OptimalMask.txt"
    mask = numpy.loadtxt(mask_source, numpy.uint8)
    cv2.grabCut(image, mask, None, bgdmodel, fgdmodel, 2, cv2.GC_INIT_WITH_MASK)

    mask = numpy.where((mask == 2) | (mask == 0), 0, 1).astype('uint8')

    return mask


if __name__ == '__main__':
    t = Sample()
    t.experiment()
问题是,它永远不会进入“Done!!”打印,因为它会显示OSX错误消息。完整的错误消息在下面的列表中

我已经被这个问题困扰了一段时间,还没有找到这个错误的确切原因。如果我不运行“cvtcolor”命令,就根本没有问题。以及如果“grabcut”命令未运行

UDATE: 在_func方法中,如果在打印和创建文件的第一条指令中添加打印或创建文件,则表示该进程已启动。 当执行grabcut(段内功能)和cvtcolor时,会出现问题。如果其中一个未执行,则根本没有问题。这怎么可能有关联呢

我还尝试了使用
多处理.dummy.Process
,效果很好。
OpenCV可能有问题?

我终于解决了。OpenCV的编译和安装存在问题。我真的不知道哪里出了问题,但我检查了如何配置OpenCV并对其进行了调整(添加了python 3支持)


谢谢您的帮助。

尝试将open('temp.txt',w')作为fo:pass添加到
\u func()
函数中。再次运行它并查看当前的工作目录。如果您看到文件“temp.txt”,那么您知道至少您的子流程正在正确启动。如果看不到该文件,则表示尝试启动进程的方式有问题。如果使用
多处理.dummy.Process
(线程而不是进程),该方法是否有效?如果将
\u func(self)
设置为全局函数(我没有看到
self
在任何地方使用),它会崩溃吗?请删除
segment()
调用,e tc?是的skgrrgwasme。我试过了,它创建了这个文件。J.F塞巴斯蒂安,我试过线程方法,是的,它是这样工作的。关于作为一个类方法,使用self,它是这样的,因为它是一个复制错误的简化代码,但是在我的代码中,我需要传递self参数。无论如何,如果我把它变成一个函数(不在类中,没有self),它无论如何都会崩溃。如果我删除段调用,它会工作。如果我删除cv2.cvtColor调用,它就会工作。如果两者都存在,则会引发错误。我会更新我的问题。有你同样的问题。这将有助于解释解决方案。现在,当在其他场景中测试时,我仍然存在这个问题。。。我会尝试找到解决方案并将其发布在这里。。。