#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()
находиться в одном ранге (подключены к камере), а затем транслировать ее, чтобы можно было применить другой анализ. Тогда, я думаю, вам нужно собрать результаты и отобразить их в одном рейтинге (подключенном к дисплею).