一. 簡介
RK3588從入門到精通
開發(fā)板:ArmSoM-W3
Kernel:5.10.160
OS:Debian11
上篇文檔介紹了rockchip平臺怎么配置MIPI-CSI的通路,本?主要介紹在Rockchip平臺下Camera相關(guān)測試命令
二. 攝像頭連接
ArmSoM-W3開發(fā)板與imx415連接圖如下:
w3-camera-hardware注意
排線的金屬引腳朝向板子
三. 使用攝像頭
連接攝像頭模塊并上電后,可查看開機日志。
如果沒有報錯,那表明模塊在正常運行,在Linux系統(tǒng)中,你可以使用多種方法來訪問和利用該攝像頭設(shè)備。
3.1 使用命令行工具
media-ctl 和 v4l2-ctl 是在Linux環(huán)境下用于配置和管理視頻和多媒體設(shè)備的命令行工具。它們通常與V4L2(Video for Linux 2)子系統(tǒng)一起使用,用于管理攝像頭、視頻采集卡、顯示設(shè)備和其他多媒體硬件的設(shè)置和參數(shù)。
media-ctl工具的操作是通過/dev/medio0等media 設(shè)備,它管理的是Media的拓撲結(jié)構(gòu)中各個節(jié)點的 format、大小、 鏈接。 v4l2-ctl工具則是針對/dev/video0,/dev/video1等 video設(shè)備,它在video設(shè)備上進行set_fmt、 reqbuf、qbuf、dqbuf、stream_on、stream_off 等一系列操作。
n為4的倍數(shù)(0,1,2,3…) /dev/videon+0:視頻輸出 SP主通道 /dev/videon+1:視頻輸出 MP自身通道 /dev/videon+2:3A統(tǒng)計 /dev/videon+3:3A參數(shù)設(shè)置
3.1.1 顯示拓撲結(jié)構(gòu)
使用以下命令可以顯示拓撲結(jié)構(gòu):
media-ctl -p -d /dev/media0
主要關(guān)注的是有沒有找到Sensor的Entity。如果沒有找到Sensor的Entity,說明Sensor注冊有問題。
開發(fā)板上接上攝像頭后可以看到如下的輸出:
3.2.2 查看攝像頭信息
使用命令列出所有攝像頭設(shè)備:
其中/dev/video11就是這個攝像頭的設(shè)備。
查看設(shè)備的預(yù)覽支持格式:
查看設(shè)備的所有信息:
3.2.3 顯示圖像
使用v4l2-ctl抓一幀圖片:
參數(shù)說明:
-d: 攝像頭對應(yīng)設(shè)備文件 --set-fmt-video:指定了寬高及pxielformat(用FourCC表示)。NV12即用FourCC表示的pixelformat --stream-mmap:指定buffer的類型為mmap,即由kernel分配的物理連續(xù)的或經(jīng)過iommu映射的buffer --stream-to:指定幀數(shù)據(jù)保存的文件路徑 --stream-skip:指定丟棄(不保存到文件)前3幀 --stream-count:指定抓取的幀數(shù),不包括--stream-skip丟棄的數(shù)量
抓取的圖片使用adb工具拷貝到Windows下用7YUV工具打開,也可以用ffplay命令打開
ffplay是FFmpeg提供的一個極為簡單的音視頻媒體播放器(由ffmpeg庫和SDL庫開發(fā)),可以用于音視頻播放、可視化分析 ,提供音視頻顯示和播放相關(guān)的圖像信息、音頻的波形等信息,也可以用作FFmpeg API的測試工具使用。
使用 ffplay 非常簡單,只需在終端中運行以下命令來播放媒體文件:
ffplay /data/4k_nv12.yuv -f rawvideo -pixel_format nv12 -video_size 3840x2160
3.2.3 顯示視頻
使用v4l2可以錄制視頻:
使用ffplay播放:
ffplay -f rawvideo -video_size 3840x2160 -pixel_format nv12 out.yuv
3.3 使用多媒體框架應(yīng)用程序
GStreamer:GStreamer是一種多媒體框架,你可以使用它來構(gòu)建自定義的多媒體應(yīng)用程序,捕獲攝像頭視頻,進行處理和展示。
你可以使用以下GStreamer管道捕獲視頻:
gst-launch-1.0 v4l2src device=/dev/video11 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=30/1 ! videoconvert ! autovideosink
1. v4l2src:從 /dev/video11 捕獲視頻數(shù)據(jù)。
2. video/x-raw:指定輸出數(shù)據(jù)格式為原始視頻,format 參數(shù)設(shè)置為 NV12,width 設(shè)置為 3840,height 設(shè)置為 2160,framerate 設(shè)置為 30fps。
3. videoconvert:執(zhí)行格式轉(zhuǎn)換,確保輸出數(shù)據(jù)適用于后續(xù)的元素。
4. autovideosink:自動選擇適當(dāng)?shù)囊曨l輸出插件,將視頻顯示在屏幕上。
顯示如下:
camera-screenshot注意:顯示器的分辨率是1920x1080,攝像頭的分辨率是3840x2160,導(dǎo)致如左上角畫面顯示不全,雙擊邊框可以得到分辨率是1920x1080的畫面。
下面有一個簡單的Python示例,用于創(chuàng)建一個GStreamer管道并啟動捕獲視頻可供參考:
3.4.自定義應(yīng)用程序開發(fā)
特定的定制功能,一般是使用編程語言(如C++或Python)開發(fā)自己的攝像頭應(yīng)用程序
總的來說,應(yīng)用程序通過API接口采集視頻數(shù)據(jù)大致分為五個步驟:
首先,打開視頻設(shè)備文件,進行視頻采集的參數(shù)初始化,設(shè)置視頻圖像的采集窗口、采集的點陣大小和格式;
其次,申請若干視頻采集的幀緩沖區(qū),并將這些幀緩沖區(qū)從內(nèi)核空間映射到用戶空間,便于應(yīng)用程序讀取/處理視頻數(shù)據(jù);
第三,將申請到的幀緩沖區(qū)在視頻采集輸入隊列排隊,并啟動視頻采集;
第四,驅(qū)動開始視頻數(shù)據(jù)的采集,應(yīng)用程序從視頻采集輸出隊列取出幀緩沖區(qū),處理完后,將幀緩沖區(qū)重新放入視頻采集輸入隊列,循環(huán)往復(fù)采集連續(xù)的視頻數(shù)據(jù);
第五,停止視頻采集。
四. 結(jié)語
根據(jù)需求,選擇最適合的方法來訪問和使用攝像頭設(shè)備,每個具體型號的攝像頭可能有其獨特的設(shè)置和要求,各個系統(tǒng)下的使用攝像頭的方法也有很多,如果你有疑問或者需要幫助,可以在ArmSom論壇提出問題,與其他開發(fā)者分享經(jīng)驗和獲取支持。
-
攝像頭
+關(guān)注
關(guān)注
60文章
4845瀏覽量
95754 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5059瀏覽量
97547 -
RK3588
+關(guān)注
關(guān)注
6文章
330瀏覽量
4358
發(fā)布評論請先 登錄
相關(guān)推薦
評論