產(chǎn)品搜索
產(chǎn)品分類
在線客服
|
基于NXP iMX6 多路攝像頭連接測試隨著嵌入式處理器性能的提升,嵌入式設(shè)備在安全,機器視覺等方面的應(yīng)用也越來越廣發(fā),本文就基于NXP iMX6 ARM處理器演示多種攝像頭的連接應(yīng)用,iMX6處理器支持多種攝像頭接口連接,比如Parallel Camera Interface,MIPI/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攝像頭模塊測試,所使用的CameraSensor為Aptina 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)品知識
|