Я читаю видеофайл из 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)