Видеоаналитика для многопроцессорной или параллельной обработки

#python-3.x #artificial-intelligence #mpi #python-multiprocessing

#python-3.x #искусственный интеллект #mpi #python-многопроцессорная обработка

Вопрос:

Я работаю над анализом видео с использованием искусственного интеллекта для проекта. Ниже приведена структура папок проекта:

введите описание изображения здесь

Я пробовал параллелизм на основе MPI, но функция imshow() продолжает отключаться в зависимости от того, какой процесс завершается первым(код приведен ниже):

 import time import cv2 import imagezmq import facialFeatures import objectdetection import faceDetection import horizontalMovement import datetime from mpi4py import MPI  def proctoring():  print("Inside proctoring function....")  while True:   print("Inside while loop....")   cam_id, frame = image_hub.recv_image()   print("Read the frame....")   if rank == 0:  print("Rank: ", str(rank), "of ", str(size))  faceDetection.recog(frame)  cv2.imshow(cam_id, frame)    elif rank == 1:  print("Rank: ", str(rank), "of ", str(size))  objectdetection.object_detection(frame)  cv2.imshow(cam_id, frame)    elif rank == 2:  print("Rank: ", str(rank), "of ", str(size))  facialFeatures.detect(frame)  cv2.imshow(cam_id, frame)    else:  print("Rank: ", str(rank), "of ", str(size))  horizontalMovement.movement_track(frame)  cv2.imshow(cam_id, frame)   image_hub.send_reply(b'OK')  if __name__ == '__main__': image_hub = imagezmq.ImageHub() print("Initializing MPI....") comm = MPI.COMM_WORLD size = comm.Get_size() rank = comm.Get_rank() print("Calling the method.....") proctoring() print("Finished MPI Process....") MPI.Finalize()  

I tried multiprocessing in python as:

 import time import cv2 import imagezmq import facialFeatures import objectdetection import faceDetection import horizontalMovement import datetime import multiprocessing   def facialRecog(frame):  faceDetection.recog(frame)  cv2.imshow(cam_id, frame)   def objectDetect(frame):  objectdetection.object_detection(frame)  cv2.imshow(cam_id, frame)   def facialFeatureDetect(frame):  facialFeatures.detect(frame)  cv2.imshow(cam_id, frame)   def horizontalMovement(frame):  horizontalMovement.movement_track(frame)  cv2.imshow(cam_id, frame)   if __name__ == '__main__':  image_hub = imagezmq.ImageHub()  while True:  cam_id, frame = image_hub.recv_image()  process1 = multiprocessing.Process(target=facialRecog, args=(frame, ))  process2 = multiprocessing.Process(target=objectDetect, args=(frame, ))  process3 = multiprocessing.Process(target=facialFeatureDetect, args=(frame, ))  process4 = multiprocessing.Process(target=horizontalMovement, args=(frame, ))   """Starting processes"""  process1.start()  process2.start()  process3.start()  process4.start()  """Ending processes"""   print("Acknowledging the frame")  image_hub.send_reply(b'OK')  

Но в этом случае я получаю пустой экран в MPI, я, по крайней мере, постоянно показывал и выходил из окна приложения, но здесь я получаю черное окно.

Основная идея заключается в том, что существуют 5 моделей искусственного интеллекта, предоставляющих функции 5-анализа в видеопотоке, желательно вызвать все 5 моделей на одном кадре и получить комбинированный обработанный кадр почти в реальном времени, как показано на рисунке ниже.

введите описание изображения здесь

Любая помощь будет признательна.

Комментарии:

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