Замедление видеопотока на стороне приемника при обработке

#python #opencv

Вопрос:

 import time
import threading
import cv2
import imagezmq
import cv2
from flask import Flask, Response
import emotion_detection_copy, mouth_open_copy
import objectdetection
import final_recogcopy
import predict
import person_and_phone_copy, head_pose_copy
import eye_tracker_copy
import predict
import datetime

image_hub = imagezmq.ImageHub()
while True:
    cam_id, frame = image_hub.recv_image()
    print("before", datetime.datetime.now())
    # predict.predict_labels(frame) # working fine
    t1 = 
    threading.Thread(target=final_recogcopy.recog(frame),args())
    t2 = 
   threading.Thread(target=objectdetection.object_detection(frame), args=())  # working fine
    t3 = threading.Thread(target=emotion_detection_copy.detect_emotion(frame), args=())  # working fine
    t4 = threading.Thread(target=person_and_phone_copy.person_and_phone_count(frame), args=())  # working fine
    t5 = threading.Thread(target=head_pose_copy.head_position(frame), args=())  # working fine    cv2.waitKey(1)
    t6 = threading.Thread(target=eye_tracker_copy.gaze_detection(frame))
     final_recogcopy.recog(frame)
    t7 = threading.Thread(target=mouth_open_copy.mouth_opening_detection(frame))
    
x = datetime.datetime.now()

    #print(start)
    t2.start()
    start1 = time.time()
    t3.start()
    start2 = time.time()
    t4.start()
    start3 = time.time()
    t5.start()
    start4 = time.time()
    t6.start()
    start5 = time.time()
    t1.start()
    start = time.time()
    # t7.start()

    t1.join()
    y = datetime.datetime.now()
    print("diff is", y - x)
    end = time.time()
    print(end)
    print("Total time taken T1", start - end)
    t2.join()
    end1 = time.time()
    print("Total time taken T2", start1 - end1)
    t3.join()
    end2 = time.time()
    print("Total time taken T3", start2 - end2)
    t4.join()
    end3 = time.time()
    print("Total time taken T4", start3 - end3)
    t5.join()
    end4 = time.time()
    print("Total time taken T5", start4 - end4)
    t6.join()
    end5 = time.time()
    print("Total time taken T6", start5 - end5)
    # t7.join()


    print("after", datetime.datetime.now())
    cv2.imshow(cam_id, frame)
    cv2.waitKey(1)
    image_hub.send_reply(b'OK')
 

Я использую imagezmq для потоковой передачи видео на python с моей веб-камеры с помощью opencv. когда я транслирую обычное видео на сторону приемника, оно нормальное на стороне приемника, но при обработке, такой как обнаружение объектов и т. Д. На стороне приемника, видео не будет похоже на близкое к реальному времени, оно очень грязное и медленное . пожалуйста, помогите.

 Thanks
 

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

1. обработка занимает много времени. вот почему все идет медленнее.

2. да, Кристоф Раквиц ,для обработки кадра требуется 11 секунд, я также использовал многопоточность, но та же проблема существует. Как я могу продолжить, чтобы избежать этого .

3. вы могли бы начать с того, чтобы показать, что именно вы делаете

4. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

5. Видео обычно идет со скоростью 30 кадров в секунду. 11 секунд-это слишком долго, и даже если вы работаете в нескольких потоках, у вас будет накопление невыполненной работы. Некоторые вопросы для рассмотрения: вам нужно обработать это видео в реальном времени или вы можете сохранить его в файл и обработать в автономном режиме? Вам нужно обработать каждый отдельный видеокадр? Действительно ли вам нужны ВСЕ эти процессы для определения вашей проблемы? На каком оборудовании вы работаете (можно ли его улучшить)?