Как передать поток openCV на HTML-страницу?
Я создаю робота, на котором будет веб-камера, чтобы обеспечить некоторое простое обнаружение объекта. На данный момент я хотел бы просто передать видео на веб-страницу, размещенную на роботе, и иметь возможность просматривать ее с другого устройства. Я написал простой тест script в Python (я в конечном итоге перейду на С++, мой язык выбора), который может получить поток из моей веб-камеры, а затем делать все, что мне нужно от него. Проблема в том, что я не могу записать видео в файл во время работы приложения, он записывает только файл после выхода из script. У меня уже есть веб-сервер, и я могу написать базовый код в HTML для размещения видео из файла, и все это работает.
Подводя итог:
Является ли openCV2 в Python и/или С++ способным воспроизводить видео, используя только openCV?
Если нет, то в какой библиотеке вы бы порекомендовали, чтобы я попытался взять объект захвата CV или объект Mat и записать его в поток, который затем я могу разместить на веб-странице?
В HTML, есть ли тег хорошая идея для потокового видео с?
Большое спасибо за совет, я могу использовать все указатели * Я могу получить!
Если вам нужно что-то уточненное/отправленное код/объяснения дальше, чем то, что я дал, спросите, и я сделаю это!
Ответы
Ответ 1
Вопрос о потоковых кадрах из OpenCV и Python был рассмотрен в следующем потоке:
Образцы открытых изображений OpenCV для FFmpeg
Это не сработало для меня, но они утверждают, что это было для них.
Причина, по которой это не работает в моем случае, кажется, что для некоторых выходных кадров добавлены или потеряны дополнительные байты, где-то между выходом на stdout в capture.py и входом в FFMPEG. Следовательно, количество байтов не соответствует количеству кадров. Я не знаю, почему это так. Я использовал Windows 7.
Мне будет интересно услышать, что вы думаете, если попробуете это. Я также попробовал модифицированную версию capture.py с помощью cv2 и не смог по тем же причинам.
Ответ 2
Попробуйте прочитать этот и .
Итак, в основном вы должны использовать OpenCV для захвата фреймов и упаковывать их в определенные форматы, соответствующие потоковому протоколу, а затем с вашего сервера используйте HTML5, чтобы поместить его на страницу. Возможно, вам понадобится использовать VLC или FFMepg для упаковки cv:: Mat. Надеюсь, это будет полезно.
Ответ 3
В лабораторных условиях вы отправляете полные изображения
Похоже, вы находитесь в лабораторных условиях, поэтому есть упрощенное, но пригодное для использования решение, просто поместите PNG в Base64 с помощью Websockets. На стороне клиента (веб-браузер) вы получаете только изображения base64 и загружаете их непосредственно в src
<img>
. Он работает для лабораторных сценариев очень хорошо, хотя и медленный.