Программа для стриминга и обработки видео с usb-камеры в режиме реального времени

aleksandra

New member
31.10.2024
4
0
1
Мне нужно написать программу для стриминга и обработки видео с usb-камеры в режиме реального времени.
Я писала на c++ с использованием библиотек SDL2 и OpenCV. Моя камера поддерживает в формате MJPEG при разрешении 1920x1080 60.00fps. Камера еще поддерживает формат YUV, но при нем на 1920x1080 камера может максимум выдавать 20.00 fps
Я запускаю программу на своем компьютере и у меня выдается 45-55fps, я скомпилировала программу на репке и при запуске видео с камеры выдается 16-17fps.
Хотела проверить в чем именно проблема: в моей программе или репка не тянет, запустив штатную линуксовую программу guvcview, но guvcview просто не видит камеру, хотя моя программа видит камеру.

Главная задача - выводить видео в разрешении 1920x1080 с fps максимально приближенным к 60.00, репка может такое потянуть или нет? Если да, то какие библиотеки аппаратного ускорения есть или может нужно использовать другие средства разработки, чтобы добиться высокого разрешения и частоты кадров.
Видео еще необходимо обрабатывать при нажатии различных клавиш (контрастность изменить, количество красного, синего и т.д.)

Исходники своего кода прикладываю.
 

Вложения

  • исходники.txt
    35,2 КБ · Просмотры: 1
Не шарю настолько глубоко в программировании, но думаю, здесь как раз нюанс в том, что ваши библиотеки на Репе (устаревшие?) не поддерживают mjpeg, а принимают данные в YUV формате. А в этом формате скорости USB 2.0 банально не хватает для пропихивания FullHD с высоким фреймрейтом. Попробуйте на "большом компе" в вашей программе врубить YUV и посмотреть, начнутся ли такие же тормоза? У меня вот есть кетайский HDMI-видеозахватчик с USB 2, так вот он именно так себя и ведёт: под mjpeg грабит FullHD шустренько, но с артефактами, а под YUV - чистенько, но медленно.
А бывают ли веб-камеры с USB 3.0? Если и бывают, то на третьей Репе это ничего не даст, ведь у неё только USB 2.0 на борту.
 
Не шарю настолько глубоко в программировании, но думаю, здесь как раз нюанс в том, что ваши библиотеки на Репе (устаревшие?) не поддерживают mjpeg, а принимают данные в YUV формате. А в этом формате скорости USB 2.0 банально не хватает для пропихивания FullHD с высоким фреймрейтом. Попробуйте на "большом компе" в вашей программе врубить YUV и посмотреть, начнутся ли такие же тормоза? У меня вот есть кетайский HDMI-видеозахватчик с USB 2, так вот он именно так себя и ведёт: под mjpeg грабит FullHD шустренько, но с артефактами, а под YUV - чистенько, но медленно.
А бывают ли веб-камеры с USB 3.0? Если и бывают, то на третьей Репе это ничего не даст, ведь у неё только USB 2.0 на борту.
Библиотеки, которые я использую поддерживают MJPEG (при инициализации камеры я подаю на не настройку, чтобы кадры в формате MJPEG выдавались). В формате YUV fps на компьютере падает с 50 до 20.
 
Библиотеки, которые я использую поддерживают MJPEG
Поддерживают на самом деле, или "должны поддерживать"? Или по факту просто связываются с камерой в том формате, в котором у них получилось? Как это проверить, сам я не знаю. Может, заставить выводить какие-нибудь логи, в которые будет писаться именно тот формат, с которым камера работает в текущем подключении?