Многопроцессный Python с керасом и opencv - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь запустить 2 процесса параллельно, используя многопроцессный Python, но второй процесс всегда зависает.В других постах я видел, что импорт библиотеки keras внутри функции решает проблему, но у меня это не сработало.Не могу понять, что мне не хватает ... Вот краткая сводка моего кода:

import multiprocessing
import numpy as np


def detect_img():
    from keras.layers import Dense
    from keras.models import Sequential

    #Not the actual model
    model = Sequential()
    model.add(Dense(15, input_shape=(4,), activation='relu'))
    model.add(Dense(15, activation='relu'))
    model.add(Dense(15, activation='relu'))
    model.add(Dense(20, activation='relu'))
    model.add(Dense(4, activation='linear'))
    while True:
        x = np.random.rand(1, 4)
        y = model.predict(x)
        print(y)


def show_cam():
    import cv2
    cap = cv2.VideoCapture(0)
    while True:
        ret, frame = cap.read()
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':

    p1 = multiprocessing.Process(target=show_cam())
    p2 = multiprocessing.Process(target=detect_img())

    p1.start()
    p2.start()

1 Ответ

0 голосов
/ 29 января 2019

Хорошо.Я столкнулся с довольно похожим поведением во многих экспериментах.Посмотрев в Интернете, я обнаружил пост, объясняющий, что opencv реализует свою собственную параллелизацию, взаимодействуя с python GIL (Global Interpreter Lock) (я, может быть, могу углубиться в детали, если хотите ...).Решение, которое работало для меня, состояло в том, чтобы избежать использования cv2!

Конечно, это не лучший подход.но не хватает времени, чтобы найти обходной путь ...

...