Приложение Django Mediapipe: как управлять задержками при обработке видео в реальном времени?
Я разрабатываю Django-приложение, которое открывает камеру клиента через JS с помощью navigator.MediaDevices.getUserMedia()
, отправляет блоб на сервер через websocket, а затем сервер должен обработать изображения с помощью библиотеки mediapose.
Я использую следующие три функции соответственно:
- преобразуйте блоб в 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
- извлеките маркеры из изображения
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
- конвертируйте аннотированное изображение в b64_img .
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, а затем только отправлять обратно клиенту изображения, преобразованные в ч/б, и это также работает без проблем.
Почему простое добавление функции извлечения маркера замедляет все и в основном приводит к накоплению кадров в буфере?