Python3 & Opencv3 & Multiprocessing 引发系统错误

标签 python opencv python-3.x python-multiprocessing opencv3.0

我目前正在使用 OpenCV 3 和 python 3.4。我的机器是装有 OS X 10.10 (Yosemite) 的 MacBook Pro,在结合使用 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()

问题是它永远不会到达“完成!!”打印,因为它中断显示 OS X 错误消息。完整的错误消息在此 GIST

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

更新: 在 _func 方法中,如果我添加打印或创建文件作为打印和创建的第一条指令,这意味着该进程已启动。 当同时执行 grabcut(在段函数中)和 cvtcolor 时会出现问题。如果其中一个未执行,则完全没有问题。怎么可能有关系呢?

我也尝试过使用 multiprocessing.dummy.Process 并且成功了。 也许是 OpenCV 的问题?

最佳答案

好吧,我终于解决了。是OpenCV编译安装的问题。不能真正说出哪里出了问题,但我检查了如何 homebrew配置 OpenCV 并对其进行调整(添加 python 3 支持)。

感谢您的帮助。

关于Python3 & Opencv3 & Multiprocessing 引发系统错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26492337/

相关文章:

python - 如何在 ipython 笔记本中重新加载图像?

python - python 中是否有与 Linq.Expressions.Expression 等效的东西?

java - 使用 OpenCV Haar 级联进行面部特征检测

python - 将 gif 图像放入 tkinter 窗口

python - 如何在 ubuntu (20.04) 上使用 sudo python -m

python - 从列表理解和一般情况下有效地创建 numpy 数组

OpenCV-Visual Studio 2015

android - AsyncTask Android

python - 如何在 Telegram Bot 中获取用户名?

python - 根据 pandas 的条件将行分成 2 行