мультипроцессорное cv2 detectAndCompute TypeError - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь использовать метод cv2 detectAndCompute с многопроцессорным пулом следующим образом:

import cv2
from multiprocessing import Pool

orb = cv.ORB_create(nfeatures=5000, scoreType=cv.ORB_HARRIS_SCORE, edgeThreshold=5, patchSize=35, scaleFactor=1.5,
                    nlevels=8, WTA_K=3)

old_lab = cv.cvtColor(old_frame, cv.COLOR_RGB2LAB)
new_lab = cv.cvtColor(new_frame, cv.COLOR_RGB2LAB)

with Pool(6) as p:
    res = p.starmap(orb.detectAndCompute, [[old_lab[:, :, 0], None],
                                           [new_lab[:, :, 0], None],
                                           [old_lab[:, :, 1], None],
                                           [new_lab[:, :, 1], None],
                                           [old_lab[:, :, 2], None],
                                           [new_lab[:, :, 2], None]])

kp1_l, des1_l = res[0][0], res[0][1]
kp2_l, des2_l = res[1][0], res[1][1]
kp1_a, des1_a = res[2][0], res[2][1]
kp2_a, des2_a = res[3][0], res[3][1]
kp1_b, des1_b = res[4][0], res[4][1]
kp2_b, des2_b = res[5][0], res[5][1]

к сожалению, я получаю следующее исключение:

 Incorrect type of self (must be 'Feature2D' or its derivative)

, когда я использую вAndAndCompute в 1 главномПоток работает нормально, но при запуске с многопроцессорным пулом возникает исключение.

Обновление: при использовании класса упакованного потока (как показано ниже):

class ThreadWithReturnValue(Thread):
    def __init__(self, group=None, target=None, name=None,
             args=(), kwargs={}, Verbose=None):
        Thread.__init__(self, group, target, name, args, kwargs)
        self._return = None

    def run(self):
        if self._target is not None:
            self._return = self._target(*self._args, **self._kwargs)

    def join(self, *args):
        Thread.join(self, *args)
        return self._return

, кажется, работает нормально иверните значения, которые мне нужны (эта конкретная оболочка потока используется для другой части проекта, и эта оболочка, кажется, работает).

Цените любые замечания по этому вопросу.

Спасибо заВаше время,

С уважением, Дэвид.

...