歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 嵌入式Linux中攝像頭使用簡要整理

嵌入式Linux中攝像頭使用簡要整理

日期:2017/3/1 9:09:42   编辑:Linux編程

本文涉及軟硬件平台:

開發板:飛凌OK6410

系統:Ubuntu 12.04+飛凌官方3.0.1


嵌入式Linux還處在入門階段,主要方向是嵌入式下的圖像處理,最近一直在學習OpenCV和Qt相關知識,打算以此入手。

本文記錄在嵌入式平台攝像頭的選擇和測試過程中的一點經歷,沒有太多的技術內容,對於同樣入門還在盲目摸索的同學可能有一點幫助。

之前沒有任何圖像方面開發的經驗,對於Windows平台來說,攝像頭也就是插上去裝個驅動,剩下的用起來就差不多了,具體的差異很難深入去了解,在學習嵌入式linux的時候,在沒有什麼基礎的情況下,一開始攝像頭的選擇和測試就要繞一個大圈子。

攝像頭選擇與內核配置

打算用手中的6410板子先做點圖像方面的小程序,自然在網上搜搜關於6410上面用的攝像頭,搜索發現絕大多數是兩種情況,一種是使用中星微ZC301P芯片的usb攝像頭,還有就是官方適配的模塊OV9650。記得實驗室有很多攝像頭,於是在實驗室翻箱倒櫃找了找,普通電腦用USB攝像頭找到3個,一個就是中星微ZC301芯片的了,圖片如下,和淘寶上賣的外觀確實是一樣的,另外兩個雜牌,其中一個經過測試用的也是中星微的芯片,另外一個就是本文要說的UVC格式的攝像頭。

ZC301攝像頭和UVC輸出的攝像頭在板子上的Linux 3.0.1內核中已經自帶支持,插上就能夠識別,網上說2.6.26都能支持,不過需要在編譯內核的時候進行針對性配置,在內核的配置中可以按照如下路徑進行查找配置:

Device Drivers --->
    <*> Multimedia support --->
        <*> Video For Linux
        [*] Enable Video For Linux API 1 (DEPRECATED)
        [*] Video capture adapters --->
            [*] V4L USB devices --->
                <*> USB Video Class (UVC)
                [*] UVC input events device support
                [*] GSPCA based webcams --->

到這裡就能看到UVC和GSPCA兩者的驅動支持了,UVC的簡介如下:

UVC是Microsoft與另外幾家設備廠商聯合推出的為USB視頻捕獲設備定義的協議標准,目前已成為USB org標准之一。

如今的主流操作系統(如Windows XP SP2 and later, Linux 2.4.6 and later, MacOS 10.5 and later)都已提供UVC設備驅動,因此符合UVC規格的硬件設備在不需要安裝任何的驅動程序下即可在主機中正常使用。使用UVC技術的包括攝像頭、數碼相機、類比影像轉換器、電視棒及靜態影像相機等設備。

GSPCA同樣是一種標准,早期的很多攝像頭用的就是這一標准,ZC301就屬於這一類型,在 GSPCA based webcams下最後能夠找到ZC3XX的驅動支持。這個內核中默認UVC和GSPCA都是選上的,對於其他版本如果無法支持就需要重新編譯內核了。配置界面如下圖所示。

攝像頭類型的確定

很多品牌攝像頭,如羅技的很容易確定芯片型號,和是否支持UVC,但是也有很多攝像頭無法確定,經過前期的查找,決定使用UVC的攝像頭,關於攝像頭類型的確定方法可以通過硬件ID來確定,硬件ID主要分為VID和PID,在Winows中可以在設備管理器中查看,方法如下圖:

在這個圖中能夠看到VID和PID為04F2:B257,這是我筆記本內置攝像頭的ID,可以通過這個文檔(

攝像頭驅動VID+PID大全)來確定芯片類型,3個攝像頭中的一個芯片ID為1871:01F0,可以通過這個網頁(http://www.ideasonboard.org/uvc/)來查看是否是否支持UVC,如下圖所示,可以看到這個攝像頭在支持范圍內。

ZC301的使用網絡上已經有很多的資料了,下面主要記錄UVC攝像頭的一些信息。

將UVC攝像頭插入開發板,輸出以下信息,說明內核能夠正確識別。

確定ID後,還可以通過以下方式查看,輸出如下信息時也表示支持。

[root@FORLINX6410]# lsusb -d 1871:01f0 -v | grep "14 Video"
      bFunctionClass         14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video
      bInterfaceClass        14 Video

插到板子上之後可以看到/dev目錄下多了一個文件video2 ,在插入攝像頭的時候通過輸出的信息也能夠進行判斷,如下圖所示:

簡單測試

坑爹的飛凌板子給的資料很多,但是文檔極差,很多程序源碼沒啥說明,自己使用可能需要摸索一陣子了。飛凌官方給了usb攝像頭的測試程序,我文檔中的文件為testcam.c ,test_usb_camera 源碼中還有其他幾個程序,經過測試這個我測試是可以的。

另外一個就是UVC的一個測試軟件luvcview,在資料光盤中的路徑為:Linux-3.0.1\apptest\攝像頭測試\USB攝像頭\USBCamera- linux+Android\linux3.0.1系統下-2012-07-05,通過這個可以查看和測試UVC攝像頭。

查看攝像頭信息:./luvcview -d /dev/video2 –L 結果如下:

由此可以看出攝像頭的一些基本信息,更多的不太了解,起碼清楚了輸出格式YUV,以及分辨率,接下來通過這些信息來測試。

[root@FORLINX6410]# ./luvcview -d /dev/video2 -f yuv -s 320x240

即可運行。

Copyright © Linux教程網 All Rights Reserved