我正在使用 NanoPi Duo 2 进行实时图像采集项目。
我注意到使用 CSI 摄像头和 USB 摄像头之间存在显着的性能(速度)差异。
性能差异如下, Time for OpenCV VideoCapture.read()
CSI_OV5640_Camera = ~0.04s (40 ms)
USB_Logitech_HD_C270 = ~0.009 (9 ms)
据我所知,我知道 NanoPi Duo2 没有任何 GPU,CSI 摄像头将由 CPU 处理(与 USB 摄像头相同)。
使用$ htop
CSI 和 USB 摄像头显示 100% @ 4 个内核之一。
更新:输出帧处理需要更多的 CPU 功率与 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 种颜色)具有相似外观值的 numpy ndarray。然而,使用 CSI 相机接收到的阵列需要更高的 CPU 功率才能以某种方式进行处理。
感谢您阅读我的问题。
对于遇到类似问题的任何人,我找到了使用
$ htop
.这与不同的 CPU 消耗有关,因为 CSI 相机需要更多的 CPU。
带 CSI 摄像头 (OV5640)
带 USB 摄像头(罗技 C270)
我想进一步了解为什么 CSI 需要比 USB UVC 相机更多的 CPU 功率,但这应该是一个单独的问题。