#c #performance #opencv #optimization #raspberry-pi
#c #Производительность #opencv #оптимизация #малина-пи
Вопрос:
Я выполняю программу компьютерного зрения, написанную на C и OpenCV, на Raspberry Pi 3B, а мой модуль камеры — picamera. Грубо говоря, я вычисляю величину отклонения от дороги и отправляю ее на другую платформу.
В настоящее время моя основная методология не может стать проще, т.Е. Я не могу удалить какие-либо матричные операции. Однако мне нужно еще больше увеличить пропускную способность. На данный момент я получаю 19-20 результатов в секунду. Частота кадров в секунду моей камеры установлена на 30.
Мне было интересно, есть ли какой-нибудь способ увеличить пропускную способность? Например, я пытался использовать уровни оптимизации на g (-O2, -O3) и не заметил никакого увеличения.
Другой вариант — использовать многопоточность, поскольку моя пропускная способность ниже, чем частота кадров в секунду с камеры, возможно, я смогу захватить другой кадр, пока другой поток обрабатывает уже захваченный кадр. Однако у меня нет никакого опыта в многопоточности, поэтому я хотел спросить, может ли кто-нибудь одобрить эту стратегию или нет, поскольку у меня ограниченное время, я хочу использовать свои усилия наиболее плодотворным образом.
Любые другие предложения приветствуются. Спасибо вам за вашу помощь.
Комментарии:
1. Профилируйте свой код с помощью valgrind / callgrind или gprof
2. Я обнаружил, что обычно получаю огромный прирост от многопоточности, но тщательно оцениваю вашу производительность. Сначала посмотрите, сколько кадров в секунду вы можете достичь без какой-либо обработки вообще, просто отбрасывая кадры — это будет ваш абсолютный максимальный fps. Затем попробуйте запустить свою обработку со статическими данными, то есть без получения вообще. Затем посмотрите, что вы можете «скрыть» за сбором данных с помощью потоков.
3. @sezgin1947 внутри raspberry pi 3 есть модуль графического процессора под названием videocore, вы можете использовать его для ускорения. многопоточность также является выбором здесь, но, прежде чем перейти на многопоточность, сначала проверьте загрузку вашего процессора. я думаю, что вы уже работаете в многопоточном режиме.