VideoCapture.read () с использованием OpenCV. Почему USB-камера быстрее, чем CSI-камера? (Без графического процессора)

Я использую 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, требует гораздо большей мощности процессора для обработки.

Спасибо, что прочитали мой вопрос.

0
задан 24 July 2019 в 03:44

1 ответ

Для любого, у кого есть подобная проблема, я нашел причину, использующую $ htop.

Это было связано с другим потреблением ресурсов ЦП, поскольку камера CSI требует большего количества ЦП.



С камерой CSI (OV5640)

Непрерывный VideoCapture.read () занимает полную мощность ЦП (100% все 4 ядра)


С камерой USB (Logitech C270)

непрерывный VideoCapture.read () занимает максимальную 60-70%-ю мощность ЦП только в 1 ядре.



Я хочу знать далее, почему CSI требует большей мощности ЦП, чем USB камера UVC, но это должно быть отдельным вопросом.

0
ответ дан 23 October 2019 в 09:21

Другие вопросы по тегам:

Похожие вопросы: