Медленный захват камеры на Raspberry Pi 400

Используя 64-битную версию Ubuntu на Raspberry Pi 400, я получаю очень низкую частоту кадров, например, 2,2 кадра в секунду.

int main() {
    cv::VideoCapture cap(0);
    do {
        double t = (double)cv::getTickCount();
        std::cout << "Tick count: " << cv::getTickCount() << std::endl;         
        cap >> img;
        key = cv::waitKey(1);
        t = ((double)cv::getTickCount() - t)/cv::getTickFrequency();
        std::cout<< " Frequency: " << cv::getTickFrequency() << std::endl;
        std::cout<< "Tick: " << t << std::endl;
        std::cout<< "Rate: " << (1.0 / t)<< std::endl;
    } while(key != 27);
    return 0;
}

Как видите, я даже не показываю изображение на экране и не выполняю никаких операций с изображением.

Та же камера работает лучше при использовании другими приложениями (например, сыром). Есть ли механизмы для достижения лучшей производительности?

ОБНОВЛЕНИЕ: здесь у вас есть информация о моей сборке

Общая конфигурация OpenCV 4.2.0 ======================================= Контроль версий: неизвестно

Дополнительные модули: Расположение (дополнительно): /build/opencv-f6XtMJ/opencv-4.2.0+dfsg/contrib/modules Контроль версий (дополнительно): неизвестно

Платформа: Отметка времени: 2020-10-04T07: 09: 34Z Хост: Linux 4.15.0-118-generic aarch64 CMake: 3.16.3 Генератор CMake: Инструмент сборки Ninja CMake: / usr / bin / ninja Конфигурация: Выпуск

Характеристики ЦП / аппаратного обеспечения: Базовый уровень: NEON Требуется FP16: NEON отключен: VFPV3

OpenCV модули: Для того, чтобы быть построены: aruco bgsegm биоинспирированных calib3d ccalib основные наборы данных DNN dnn_objdetect dnn_superres пм лицо features2d Flann FreeType нечеткой HDF сверхтонкая highgui img_hash imgcodecs imgproc ява line_descriptor мл objdetect optflow phase_unwrapping фото участка качество python3 форма рег rgbd заметности стерео сшивание structured_light superres surface_matching отслеживания текста видео videoio videostab именно ximgproc xobjdetect xphoto Отключено: мир инвалидов по зависимости: SFM Занято: cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev CVV GAPI JS MATLAB Ovis python2 TS Применение: приложения Документация: Doxygen питон Javadoc несвободных алгоритмы: НЕТ

GUI: GTK +: ДА (версия 3.24.23) GThread: ДА (версия 2.66.0) GtkGlExt: НЕТ Поддержка OpenGL: НЕТ Поддержка VTK: ДА (версия 6.3.0)

Медиа-ввод-вывод: ZLib: /usr/lib/aarch64-linux-gnu/libz.so (версия 1.2.11) JPEG: /usr/lib/aarch64-linux-gnu/libjpeg.so (версия 80) WEBP: / usr / lib / aarch64-linux-gnu / libwebp.so (кодировщик версии: 0x020e) PNG: /usr/lib/aarch64-linux-gnu/libpng.so (версия 1.6.37) TIFF: / usr / lib / aarch64- linux-gnu / libtiff.so (версия 42 / 4.1.0) OpenEXR: /usr/lib/aarch64-linux-gnu/libImath.so /usr/lib/aarch64-linux-gnu/libIlmImf.so / usr / lib / aarch64-linux-gnu / libIex.so /usr/lib/aarch64-linux-gnu/libHalf.so /usr/lib/aarch64-linux-gnu/libIlmThread.so (версия 2.5.3) GDAL: ДА (/ usr / lib / libgdal.so) GDCM: ДА (3.0.7) HDR: ДА SUNRASTER: ДА PXM: ДА PFM: ДА

Видео ввод / вывод: DC1394: ДА (2.2.6) FFMPEG: ДА avcodec: ДА (58.91.100) avformat: YES (58.45.100) avutil: YES (56.51.100) swscale: YES (5.7.100) avresample: ДА (4.0.0) GStreamer: ДА (1.18.0) PvAPI: НЕТ v4l / v4l2: ДА (linux / videodev2.h)

Параллельная структура: TBB (версия 2020.3, интерфейс 11103)

Трассировка: ДА (встроенная)

Другие сторонние библиотеки: Lapack: NO Eigen: YES (версия 3.3.7) Пользовательский HAL: NO Protobuf: /usr/lib/aarch64-linux-gnu/libprotobuf.so (3.12.3)

OpenCL: ДА (без дополнительных функций) Включить путь: / usr / include / CL Библиотеки ссылок: динамическая загрузка

Python 3: Интерпретатор: / usr / bin / python3 (версия 3.8.6) Библиотеки: /usr/lib/aarch64-linux-gnu/libpython3.8.so (версия 3.8.6) numpy: / usr / lib / python3 / dist-packages / numpy / core / include (ver 1.18.4) путь установки: lib / python3.8 / dist-packages

Python (для сборки): / usr / bin / python3

Java:
ant: / usr / bin / ant (версия 1.10.8) JNI: / usr / lib / jvm / default-java / include / usr / lib / jvm / default-java / include / linux / usr / lib / jvm / default-java / включить оболочки Java: ДА Тесты Java: НЕТ

Установить в: / usr

Я думаю, что нашел проблему. перечисляя разрешения камеры, я мог видеть, что была настройка только с 2 кадрами в секунду, и это было при использовании формата YUYV. Я установил на входе MJPG с

int main() {
    cv::VideoCapture cap(0);
    do {
        double t = (double)cv::getTickCount();
        std::cout << "Tick count: " << cv::getTickCount() << std::endl;         
        cap >> img;
        key = cv::waitKey(1);
        t = ((double)cv::getTickCount() - t)/cv::getTickFrequency();
        std::cout<< " Frequency: " << cv::getTickFrequency() << std::endl;
        std::cout<< "Tick: " << t << std::endl;
        std::cout<< "Rate: " << (1.0 / t)<< std::endl;
    } while(key != 27);
    return 0;
}

, а частота кадров увеличилась до 19-20, что все еще мало, но может быть приемлемо.


Возможно, стоит изменить cv::getBuildInformation(); на _2_, _3_ подождет не менее миллисекунды, может быть и больше. _4_ может быть медленным _5_ делает его еще медленнее   —  person Hola Soy Edu Feliz Navidad    schedule 14.04.2021

См. также:  Объединения, псевдонимы и подбор текста на практике: что работает, а что нет?

@MarkSetchell добавил информацию о сборке.   —  person Hola Soy Edu Feliz Navidad    schedule 14.04.2021

@AlanBirtles, это не вина cout или endl. Я уже без них пробовал и производительность такая же.   —  person Hola Soy Edu Feliz Navidad    schedule 14.04.2021

вы пробовали изменить / удалить _1_? вы используете оптимизацию компилятора?   —  person Hola Soy Edu Feliz Navidad    schedule 14.04.2021

@AlanBirtles получил эту ошибку: ‘pollKey’ не является членом ‘cv’ Я не знаю, является ли pollKey новой функцией или что-то в этом роде. Во всяком случае, я бы сказал, что проблема не в этом.   —  person Hola Soy Edu Feliz Navidad    schedule 14.04.2021

C / C ++: построены как динамические библиотеки ?: ДА Компилятор C ++: / usr / bin / c ++ (версия 10.2.0) Флаги C ++ (выпуск): -g -O2 -fdebug-prefix-map = / build / opencv-f6XtMJ / opencv-4.2.0 + dfsg =. -fstack-protector-strong -Wformat -Werror = format-security -Wdate-time -D_FORTIFY_SOURCE = 2 -fsigned-char -W -Wall -Werror = return-type -Werror = non-virtual-dtor -Werror = address -Werror = точка-последовательности -Wformat -Werror = безопасность-формата -Wmissing-декларации -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-Promo -Wuninitialized -Winit-self -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough = 3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-section -fdata-section -fvisibility = скрытый -fvisibility-inlines-hidden -g -O2 -fdebug-prefix-map = / build / opencv-f6XtMJ / opencv-4.2.0 + dfsg =. -fstack-protector-strong -Wformat -Werror = format-security -DNDEBUG Флаги C ++ (отладка): -g -O2 -fdebug-prefix-map = / build / opencv-f6XtMJ / opencv-4.2.0 + dfsg =. -fstack-protector-strong -Wformat -Werror = format-security -Wdate-time -D_FORTIFY_SOURCE = 2 -fsigned-char -W -Wall -Werror = return-type -Werror = non-virtual-dtor -Werror = address -Werror = точка-последовательности -Wformat -Werror = безопасность-формата -Wmissing-декларации -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-Promo -Wuninitialized -Winit-self -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough = 3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-section -fdata-section -fvisibility = hidden -fvisibility-inlines-hidden -g -DDEBUG -D_DEBUG Компилятор C: / usr / bin / cc Флаги C (выпуск): -g -O2 -fdebug-prefix-map = / build / opencv-f6XtMJ / opencv-4.2 .0 + dfsg =. -fstack-protector-strong -Wformat -Werror = format-security -Wdate-time -D_FORTIFY_SOURCE = 2 -fsigned-char -W -Wall -Werror = return-type -Werror = non-virtual-dtor -Werror = address -Werror = точка-последовательности -Wformat -Werror = безопасность-формата -Wmissing-декларации -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-Promo -Wuninitialized -Winit-self -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough = 3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-section -fdata-section -fvisibility = скрытый -fvisibility-inlines-hidden -g -O2 -fdebug-prefix-map = / build / opencv-f6XtMJ / opencv-4. 2.0 + dfsg =. -fstack-protector-strong -Wformat -Werror = format-security -DNDEBUG Флаги C (отладка): -g -O2 -fdebug-prefix-map = / build / opencv-f6XtMJ / opencv-4.2.0 + dfsg =. -fstack-protector-strong -Wformat -Werror = format-security -Wdate-time -D_FORTIFY_SOURCE = 2 -fsigned-char -W -Wall -Werror = return-type -Werror = non-virtual-dtor -Werror = address -Werror = точка-последовательности -Wformat -Werror = безопасность-формата -Wmissing-декларации -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-Promo -Wuninitialized -Winit-self -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough = 3 -Wno-strict-overflow -fdiagnostics-show-option -pthread -fomit-frame-pointer -ffunction-section -fdata-section -fvisibility = hidden -fvisibility-inlines-hidden -g -DDEBUG -D_DEBUG Флаги компоновщика (Release): -Wl, -Bsymbolic-functions -Wl, -z, relro -Wl, -z, now -Wl, — gc-section — Wl, -Bsymbolic-functions -Wl, -z, relro -Wl, -z, now флаги компоновщика (отладка): -Wl, -Bsymbolic-functions -Wl, -z, relro -Wl, -z, now -Wl, —gc-section
ccache: НЕТ Предварительно скомпилированные заголовки: НЕТ Дополнительные зависимости: dl m pthread rt 3-сторонние зависимости:   —  person Hola Soy Edu Feliz Navidad    schedule 17.04.2021

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Hola Soy Edu Feliz Navidad

    Если вы вернете удаленные заголовки, другие люди могут запустить ваш код. Если вы добавите cap.set(cv::CAP_PROP_FOURCC ,cv::VideoWriter::fourcc('M', 'J', 'P', 'G') ); результат, кто-то может обнаружить проблему. Если вы покажете свою команду компиляции с параметрами, проблема может стать очевидной.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: