Многопроцессорная обработка изображений в Python 3 не дает достаточной производительности - PullRequest
0 голосов
/ 03 июля 2018

Я читаю видеофайл из opencv и сохраняю их кадры в списке. Затем я предоставляю этот список функции обнаружения лица, которая, в свою очередь, сохраняет местоположение лица в другом списке, проблема в том, что когда я даю равное количество Кадр для многопроцессорного кода и одного кода обработки, производительность не сильно отличается. пожалуйста, проверьте мой код, предложите возможное решение. Я использую python 3.5, количество ядер процессора равно 4. Предполагается, что многопроцессорный код дает почти четырехкратную производительность, но дает лишь несколько секунд.

Мой код:

import cv2,time,dlib,imutils
from multiprocessing import Pool

detector = dlib.get_frontal_face_detector()
vidcap=cv2.VideoCapture(r'/home/deeplearning/PycharmProjects
     /sjtech/jurassic_park_intro.mp4')


count = 0
frame_list = []

def parallel_detection(f):
      return detector(f,1)

success,image = vidcap.read()
while success:
     print('Read a new frame: ', success)
     frame_list.append(image)
     count += 1
     success,image = vidcap.read()




del frame_list[-1]
print("out of while")

p = Pool()
t1 = time.time()
#below is my multiprocessing code, on 40 frames it takes 42 seconds
face_location=p.map(parallel_detection,frame_list[900:940])
#below is single processing code, it takes 50 seconds
face_location=[detector(frame_list[x],1) for x in range(900,940)]
print(time.time()-t1)
...