nanopi+usb攝像頭視頻獲取

nanopi + usb攝像頭視頻獲取

opencv

最簡單的方法就是利用opencv的videcapture,直接獲取每一幀的圖像,但是由於使用的usb攝像頭採集的視頻格式是MJPEG,需要解碼才能用,而opencv的MJPEG解碼實在是有點慢,所以只能捨棄。

v4l2 + libjpeg-turbo

其實opencv內部採用的方案是v4l2 + libjpeg來做的usb視頻採集(MJPEG格式)。主要耗時爲libjpeg的解碼時間,所以需要用更快的方式來替換,第一個想到的當然是硬件解碼。

硬件解碼

折騰了好久硬件解碼,但是沒有成功,網上的資料太少了,也沒有全志AE的支持。如果哪位大俠有成功的經驗,希望不吝賜教。

v4l2

v4l2採集usb視頻,資料比較多,瞭解了v4l2的ioctl之後就很容易。可以參考和菜鳥一起學linux之V4L2攝像頭應用流程

libjpeg-turbo

libjpeg-turbo一聽名字就知道是lbjpeg的加速版本,主要是利用SIMD對編解碼過程進行加速。

利用cmake & make進行編譯。
在這裏插入圖片描述
在這裏插入圖片描述
其中,有一點要說明的是,直接cmake或報錯—「找不到CPU類型」,最後發現是CMakeLists.txt裏面的CMAKE_SYSTEM_PROCESSOR沒有輸入導致的,只能手動在CMakeLists.txt裏面加上set(CMAKE_SYSTEM_PROCESSOR "arm-cortexa7"),最終cmake成功。

實際效果

opencv讀取usb攝像頭一幀(1280 x 720)時間: 143ms v4l2+libjpegturbo讀取一幀(1280 x 720)時間:70ms 加速比2:1