Приложение Django Mediapipe: как управлять задержками при обработке видео в реальном времени?

Я разрабатываю Django-приложение, которое открывает камеру клиента через JS с помощью navigator.MediaDevices.getUserMedia(), отправляет блоб на сервер через websocket, а затем сервер должен обработать изображения с помощью библиотеки mediapose.

Я использую следующие три функции соответственно:

  1. преобразуйте блоб в cv-изображение
def blob2image(bytes_data):
    np_data = np.frombuffer(bytes_data, dtype=np.uint8)
    img = cv2.imdecode(np_data, cv2.IMREAD_COLOR)
    if img is None:
        raise ValueError("Could not decode image from bytes")
    return img
  1. извлеките маркеры из изображения
def extractMarkers(image, pose, mp_drawing, custom_connections):
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    results = pose.process(image)

    mp_drawing.draw_landmarks(
        image,
        results.pose_landmarks,
        connections = custom_connections, 
        ) 
    return image, results
  1. конвертируйте аннотированное изображение в b64_img
  2. .
def image2b64(img):
    _, encoded_image = cv2.imencode('.jpg', img)
    b64_img = base64.b64encode(encoded_image).decode('utf-8')
    return b64_img

Код работает, но продолжает накапливать задержку во время потоковой передачи. Есть ли способ избавиться от буфера или улучшить производительность кода?

Я попробовал локально код для извлечения маркеров extractMarkers(), не используя серверное приложение Django, получая изображения, поступающие с локальной камеры, и он работает без проблем.

Я также попробовал использовать приложение Django для получения изображений от клиента и отправки их на сервер через websocket, а затем только отправлять обратно клиенту изображения, преобразованные в ч/б, и это также работает без проблем.

Почему простое добавление функции извлечения маркера замедляет все и в основном приводит к накоплению кадров в буфере?

Вернуться на верх