浙 江 陽 旭 教 學(xué) 儀 器 有 限 責(zé) 任 公 司

基于NXP iMX6 多路攝像頭連接測試

隨著嵌入式處理器性能的提升,嵌入式設(shè)備在安全,機器視覺等方面的應(yīng)用也越來越廣發(fā),本文就基于NXP iMX6 ARM處理器演示多種攝像頭的連接應(yīng)用,iMX6處理器支持多種攝像頭接口連接,比如Parallel Camera InterfaceMIPI/CSI-2 串行攝像頭接口,USB接口,網(wǎng)絡(luò)接口等。


本文所演示的ARM平臺來自于Toradex 基于NXP iMX6Q ARM處理器的Apalis iMX6Q ARM嵌入式平臺。


2. 準(zhǔn)備

a). ApalisiMX6Q ARM核心版配合Ixora載板,連接調(diào)試串口UART1(載板X22)到開發(fā)主機方便調(diào)試,連接HDMI顯示器用于攝像頭輸出顯示。更多關(guān)于Apalis iMX6配合Ixora載板的說明請參考Datasheet開發(fā)上手指南。


b). 本文測試所使用的攝像頭如下:

./ Toradex OV5640MIPI/CSI-2 攝像頭模塊,連接到載板X28

./ ??的M攝像頭,通過Toradex ACA模塊連接到載板X14

./ FHD USB 攝像頭,連接到載板X8 USB接口

./ ??滴炇?/span> CS-C3C-1FR網(wǎng)絡(luò)攝像頭,通過網(wǎng)線連接到載板X11網(wǎng)口


c). Apalis iMX6Q 安裝Toradex 最新Linux BSPV2.8b5,系統(tǒng)中已經(jīng)包含了本文測試所需要的Gstreamer相關(guān)組件,詳細安裝方法請參考這里

./ 關(guān)于OV5640 攝像頭Linux下配置使用說明請參考這里,本文不再贅述。

./ 關(guān)于通過ACA模塊連接模擬攝像頭的配置使用說明請參考這里,本文不再贅述。



3). FHD USB攝像頭測試

a). 先單獨進行FHD USB攝像頭模塊測試,所使用的CameraSensorAptina MI5100 (注:已經(jīng)被OnSemi收購,對應(yīng)指標(biāo)產(chǎn)品請到OnSemi網(wǎng)站搜索),連接到Apalis iMX6會自動配置UVC驅(qū)動,無需另行配置。


b). 首先使用 V4L2命令查看攝像頭支持的格式,如下所示,此攝像頭可以支持MJPG格式和RAW格式輸出,不過對于800x600以上的高分辨率輸出,RAW模式只能以非常低的幀率輸出,因此對于本文測試的1080P輸出就要使用MJPG格式輸出了。

-----------------------

root@apalis-imx6:~# v4l2-ctl--device=/dev/video3 --list-formats-ext

ioctl: VIDIOC_ENUM_FMT

       Index      : 0

      Type        : Video Capture

      Pixel Format: 'MJPG' (compressed)

      Name        : Motion-JPEG

               Size: Discrete 1600x1200

                       Interval: Discrete0.067s (15.000 fps)

               Size: Discrete 2592x1944

                       Interval: Discrete0.067s (15.000 fps)

               Size: Discrete 2048x1536

                       Interval: Discrete0.067s (15.000 fps)

               Size: Discrete 1920x1080

                       Interval: Discrete0.033s (30.000 fps)

               Size: Discrete 1280x1024

                       Interval: Discrete0.067s (15.000 fps)

               Size: Discrete 1280x720

                       Interval: Discrete0.033s (30.000 fps)

              Size: Discrete 1024x768

                       Interval: Discrete0.033s (30.000 fps)

               Size: Discrete 800x600

                       Interval: Discrete0.033s (30.000 fps)

               Size: Discrete 640x480

                       Interval: Discrete0.033s (30.000 fps)

               Size: Discrete 1600x1200

                       Interval: Discrete0.067s (15.000 fps)


      Index       : 1

      Type        : Video Capture

      Pixel Format: 'YUYV'

      Name        : YUYV 4:2:2

               Size: Discrete 1600x1200

                       Interval: Discrete0.200s (5.000 fps)

               Size: Discrete 2592x1944

                       Interval: Discrete0.333s (3.000 fps)

               Size: Discrete 2048x1536

                       Interval: Discrete0.250s (4.000 fps)

               Size: Discrete 1920x1080

                       Interval: Discrete0.200s (5.000 fps)

               Size: Discrete 1280x1024

                       Interval: Discrete0.111s (9.000 fps)

               Size: Discrete 1280x720

                       Interval: Discrete0.200s (5.000 fps)

               Size: Discrete 1024x768

                       Interval: Discrete0.100s (10.000 fps)

              Size: Discrete 800x600

                       Interval: Discrete0.050s (20.000 fps)

               Size: Discrete 640x480

                       Interval: Discrete0.033s (30.000 fps)

               Size: Discrete 1600x1200

                       Interval: Discrete0.200s (5.000 fps)

-----------------------


c). 測試基本的攝像頭capture并全屏顯示

-----------------------

// RAW 格式

$ gst-launch-1.0imxv4l2src device=/dev/video3 ! 'video/x-raw, framerate=5/1, width=(int)1920,height=(int)1080, format=(string)YUY2' ! imxv4l2sink

CPU占用率:~40% x 1core of4cores

// MJPG 格式

$ gst-launch-1.0v4l2src device=/dev/video3 ! 'image/jpeg,width=1920,height=1080,framerate=30/1'! vpudec output-format=4 ! imxipuvideotransform ! imxg2dvideosink sync=false

CPU占用率:~50% x1core of 4cores

-----------------------


為了盡可能降低CPU的占用率,我們盡可能的使用iMX gstreamer專用的元件,可以調(diào)用VPU/GPU等硬件資源來加速,查詢所有iMX相關(guān)原件可以通過下面命令

$ gst-inspect-1.0 |grep imx


d). 針對視頻監(jiān)控的場景往往需要在捕獲的攝像頭視頻流上面打上時間戳,在播放的同時也保存成為文件,下面就測試這個應(yīng)用場景。

./ 這里我們使用基于imx硬件加速的imxg2dclockoverlay元件來實現(xiàn)打時間戳

./ 打時間戳后單獨進行攝像頭視頻流播放操作

-----------------------

$ gst-launch-1.0v4l2src device=/dev/video3 ! 'image/jpeg,width=1920,height=1080,framerate=30/1'! vpudec output-format=4 ! imxipuvideotransform ! imxg2dclockoverlaytime-format="%Y/%m/%d %H:%M:%S" ! imxg2dvideosink sync=false

CPU占用率:~49% x 1core of4cores

-----------------------


./ 打時間戳后單獨進行攝像頭視頻流保存成文件操作

-----------------------

$ gst-launch-1.0-vvv v4l2src device=/dev/video3 ! 'image/jpeg,width=1920,height=1080,framerate=30/1'! vpudec output-format=4 ! imxipuvideotransform ! imxg2dclockoverlaytime-format="%Y/%m/%d %H:%M:%S" ! imxipuvideotransform !'video/x-raw,width=1920,height=1080,framerate=30/1' ! imxvpuenc_h264bitrate=8000 ! filesink location=test.mp4

CPU占用率:~30% x 1core of4cores

-----------------------


./ 打時間戳后同時進行攝像頭視頻流保存成文件和播放操作

-----------------------

$ gst-launch-1.0-vvv v4l2src device=/dev/video3 !'image/jpeg,width=1920,height=1080,framerate=30/1' !   vpudec output-format=4 ! imxipuvideotransform   ! imxg2dclockoverlaytime-format="%Y/%m/%d %H:%M:%S" ! tee name=splitter ! queue !imxipuvideotransform ! 'video/x-raw,width=1920,height=1080,framerate=30/1' !imxvpuenc_h264 bitrate=8000 ! filesink location=test.mp4 splitter. ! queue !imxg2dvideosink sync=false

CPU占用率:~53% x 1core of4cores

-----------------------


./ 錄制下來的 test.mp4文件可以通過下面pipeline進行回放

-----------------------

gst-launch-1.0filesrc location=/home/root/test.mp4 typefind=true ! h264parse ! vpudec !imxv4l2sink

-----------------------

4). ??稻W(wǎng)絡(luò)攝像頭測試

a). 首先通過海康螢石管理軟件配置攝像頭網(wǎng)絡(luò)配置為固定IP - 10.20.1.99/255.255.255.0


b). 然后將Apalis iMX6 eth0 網(wǎng)絡(luò)配置為固定IP -10.20.1.98/255.255.255.0,然后和攝像頭確保能夠ping通。


c). 通過下面pipeline通過rtsp捕獲攝像頭適配流并播放,admin對應(yīng)的password在每個攝像頭標(biāo)簽上面有提供。

-----------------------

$ gst-launch-1.0rtspsrc location=rtsp://admin:password@10.20.1.99:554/h264/ch1/main/av_streamlatency=10 ! queue ! rtph264depay ! vpudec ! imxg2dvideosink

CPU占用率:~18% x 1core of4cores

-----------------------

當(dāng)然,也同樣可以將捕獲的視頻流保存成本地文件,這里就不贅述了。



5). 四路攝像頭同時播放示例

a). 基于上面兩個章節(jié)的測試后,我們現(xiàn)在來進行四路攝像頭同時播放顯示測試,當(dāng)然此時顯示窗口就不能全屏了,而是要對應(yīng)調(diào)整大小和位置。


b). 首先測試在屏幕左上角顯示Full HDUSB攝像頭輸出

-----------------------

$ gst-launch-1.0v4l2src device=/dev/video3 ! 'image/jpeg,width=1920,height=1080,framerate=30/1'!   vpudec output-format=4 ! imxipuvideotransform! imxg2dclockoverlay time-format="%Y-%m-%d %H:%M:%S" halignment=2valignment=1 ! imxg2dvideosink sync=false window-width=960 window-height=480

-----------------------


c). 然后測試在屏幕左下角顯示網(wǎng)絡(luò)攝像頭輸出

-----------------------


文章分類: 產(chǎn)品知識
分享到: