Я использую NanoPi Duo 2 для проекта получения изображений в реальном времени.
Я заметил значительную разницу в производительности (скорости) между использованием камеры CSI и камеры USB.
Разница в производительности следующая, Время для OpenCV VideoCapture.read ()
CSI_OV5640_Camera = ~0.04s (40 ms)
USB_Logitech_HD_C270 = ~0.009 (9 ms)
Насколько я знаю, я понимаю, что NanoPi Duo2 не имеет графического процессора, а камера CSI будет обрабатываться процессором (так же, как камера USB).
При использовании $ htop
камеры CSI и USB показывают 100% @ одно из 4 ядер.
Обновление: обработка выходного кадра требует большей мощности процессора с камерой CSI.
Для фона,
OpenCV 3.4.6 Вывод сборки
Video I/O
- libv4l/libv4l2 NO
- v4l/v4l2 linux/videodev2.h
$ v4l2-ctl --get-fmt-video
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'YV12'
Field : Any
Bytes per Line : 960
Size Image : 460800
Colorspace : Default
Transfer Function : Default
YCbCr Encoding : Default
Quantization : Default
Flags :
Одна интересная вещь Производительность использования numpy ndarray
от CSI и USB ТАКЖЕ отличается
pyzbar.decode() calculation
CSI_OV5640_Camera = ~0.43s (430 ms)
USB_Logitech_HD_C270 = ~0.19s (190 ms)
Я думаю, что Кодировка VideoCapture.read () различна, но все, что я вижу, - это один и тот же размер (640x480, 3 цвета) с большим количеством похожих значений. Однако массив, полученный с использованием камеры CSI, требует гораздо большей мощности процессора для обработки.
Спасибо, что прочитали мой вопрос.
Для любого, у кого есть подобная проблема, я нашел причину, использующую $ htop
.
Это было связано с другим потреблением ресурсов ЦП, поскольку камера CSI требует большего количества ЦП.
Непрерывный VideoCapture.read () занимает полную мощность ЦП (100% все 4 ядра)
непрерывный VideoCapture.read () занимает максимальную 60-70%-ю мощность ЦП только в 1 ядре.
Я хочу знать далее, почему CSI требует большей мощности ЦП, чем USB камера UVC, но это должно быть отдельным вопросом.