关于摄像头的UVC协议接口!
因為一直做圖像的相關工作,最近因為驅動的問題才知道多年前就有了標準的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技術的包括攝像頭、數碼相機、類比影像轉換器、電視棒及靜態影像相機等設備。
?
?因為是usb標準的一部分,所以核心文檔都是到usb標準的老巢里去找最合適了
?http://www.usb.org/developers/docs/devclass_docs/USB_Video_Class_1_5.zip
http://www.usb.org/developers/docs/devclass_docs/
可以看到這個協議最新的是V1.5版本,看來百度百科的信息更新是挺慢的了。
標準下載下來隨便翻翻,V1.1版本是2005年6月1日定稿的,年頭也挺長的了
V1.5版本是2012年8月9日定稿的
?
在windows下,可以直接在explorer下打開攝像頭
如果需要保存圖片什么的,就需要安裝一些其他軟件,比如AMCap
?
為了把攝像頭在linux下用起來,可以參考大拿的文章
http://www.cnblogs.com/leaven/archive/2010/08/19/1802926.html
?~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~··
Linux 下攝像頭驅動支持情況
http://eatdrinkmanwoman.spaces.live.com/blog/cns!97719476F5BAEDA4!1336.entry
http://weijb0606.blog.163.com/blog/static/131286274201063152423963/
本文所說的攝像頭(Webcam),特指USB攝像頭。?
在Windows下,攝像頭驅動由廠商開發并提供。但在Linux下,因商業利益有限,只有極少廠商愿意提供攝像頭驅動支持。這并不妨礙Linux下攝像頭的使用——廣大第三方志愿者維護著大大小小的驅動。之前做過一個嵌入式皮毛項目,雖然攝像頭驅動不關我的事,在好奇心驅使下簡要探索了一番。結果是有些胸悶,它們像蜘蛛絲一樣雜亂。寫本文的動機是想理清一下主線,給后來者提供一點有限的參考,但無法保證下面的文字完全正確。?
常見的攝像頭驅動有以下幾個系列: OVCam drivers(ov5xx)?
該系列驅動是針對OmniVision OV5xx系列芯片,此類芯片被廣泛運用于各種USB攝像頭中,在嵌入式開發板上尤其常見。凡是使用了OV511/OV511+/OV518 /OV6620/OV6630/OV7610/OV7620/OV7 620AE等圖像傳感器的攝像頭都可以在該驅動下工作。?
項目主頁:http://alpha.dyndns.org/ov511/?
Philips USB Webcam Driver(pwc) 該驅動主要用于Philips及pwc芯片兼容攝像頭。由于原開發者與Philips公司簽有保密協定,該驅動以二進制形式提供,后來被踢出內核,引起一場口水戰:是用戶需求重要還是保持內核純潔重要?所幸后續開發者從原項目上創建了一個新的分支,使得該項目繼續存活。?
項目主頁:http://www.saillard.org/linux/pwc/?
QuickCam USB camera driver (qc-usb) 該驅動主要用于Logitech公司的QuickCam Express系列和其它兼容型號攝像頭。最初由Georg Acher開發,當時命名為qce-ga。Jean-Frederic Clere參考該驅動創建出了第一個Video4Linux兼容驅動。從那開始,不斷有開發者加入,使得該驅動逐漸能夠支持新的攝像頭和芯片。在此期間,該驅動更名為qc-usb,更為廣泛地支持其它QuickCam USB攝像頭,而不再是局限于Express系列。?
項目主頁:http://qce-ga.sourceforge.net/?
QuickCam Messenger & Communicate driver(quickcam) 這是另一個針對QuickCam攝像頭的驅動,它僅支持某一些型號,并且與qc-usb驅動不兼容。項目主頁:http://home.mag.cx/messenger/?
SPCA webcam driver(gspca/spca5xx) 該系列驅動適用于Sunplus芯片攝像頭,也適用于其它芯片,如目前國內山寨攝像頭一哥“中星微”(Z-Star)芯片。Michel Xhaard是該項目的維護者,他在60歲左右的時候(大約是2003年)從一種普通常見的驅動入手,進而不斷修改開發成一個支持250種以上攝像頭的通用驅動。他還寫了流媒體服務器spcaserv與客戶端spcaview。不少高校所謂的嵌入式無線網絡視頻傳輸項目,就是從這兩個東西來的。?
項目主頁:http://mxhaard.free.fr/spca5xx.html?
Linux UVC driver(uvc) 該驅動適用于符合USB視頻類(USB Video Class)規范的攝像頭設備,它包括V4L2內核設備驅動和用戶空間工具補丁。大多數大容量存儲器設備(如優盤)都遵循USB規范,因而僅用一個單一驅動就可以操作它們。與此類似,UVC兼容外設只需要一個通用驅動即可。?
USB攝像頭大體上可以二分為UVC cameras和non-UVC cameras。推薦購買UVC cameras。UVC是一個開放的標準,擁有維護良好的驅動,它屬于內核代碼的一部分。插入攝像頭后就可以工作,而無須編譯或安裝額外的驅動。non- UVC cameras通常情況下不比UVC cameras工作出色,前者的驅動并不遵循通用的協議,需要針對每種攝像頭做出單獨的處理,這往往需要一個逆向工程的探索過程。?
判斷一個攝像頭是否屬于UVC規范可以使用下面方法:?
1.使用lsusb命令或其它硬件信息查看工具找出攝像頭的設備號(Vendor ID)和產品號(Product ID)。如Logitech Quickcam for Notebooks Pro攝像頭是046d:08cb;?
2.查找是否有視頻類接口信息?
lsusb -d 046d:08cb -v | grep "14 Video"?
如果該攝像頭兼容UVC,則會輸出類似信息?
bFunctionClass 14 Video?
bInterfaceClass 14 Video?
bInterfaceClass 14 Video?
bInterfaceClass 14 Video?
若無以上信息,則是non-UVC設備。?
項目主頁:http://linux-uvc.berlios.de/?
在Linux下攝像頭驅動有三種存在形式,內置于內核(within the kernel),做為一個外掛的模塊(module),或者是預編譯的二進制程序(pre-compiled binary)。?
Linux內核樹會不斷合并優秀的驅動。從2.4內核起,ov5xx驅動就已經是內核代碼的一部分。從2.6.26開始,Linux內核原生包含uvc 驅動。2.6.27內核又吸收進了gspca/spca5xx系列驅動。常見的Linux發行版所配置的內核,一般都已將這些驅動選項打開,而無需用戶另外編譯。內核的.config文件中有許多配置變量等式,用來說明內核配置的結果。y表示本編譯選項對應的內核代碼被靜態編譯進 Linux內核;m表示本編譯選項對應的內核代碼被編譯成模塊;n表示不選擇此編譯選項。?
以Fedora12/boot下的config文件為例?
cat /boot/config-2.6.31.12-174.2.3.fc12.i686 | grep CONFIG_USB_GSPCA?
CONFIG_USB_GSPCA=m?
CONFIG_USB_GSPCA_CONEX=m?
CONFIG_USB_GSPCA_ETOMS=m?
CONFIG_USB_GSPCA_FINEPIX=m?
CONFIG_USB_GSPCA_MARS=m?
CONFIG_USB_GSPCA_MR97310A=m?
CONFIG_USB_GSPCA_OV519=m?
CONFIG_USB_GSPCA_OV534=m?
CONFIG_USB_GSPCA_PAC207=m?
CONFIG_USB_GSPCA_PAC7311=m?
CONFIG_USB_GSPCA_SN9C20X=m?
CONFIG_USB_GSPCA_SN9C20X_EVDEV=y?
CONFIG_USB_GSPCA_SONIXB=m?
CONFIG_USB_GSPCA_SONIXJ=m?
CONFIG_USB_GSPCA_SPCA500=m?
CONFIG_USB_GSPCA_SPCA501=m?
CONFIG_USB_GSPCA_SPCA505=m?
CONFIG_USB_GSPCA_SPCA506=m?
CONFIG_USB_GSPCA_SPCA508=m?
CONFIG_USB_GSPCA_SPCA561=m?
CONFIG_USB_GSPCA_SQ905=m?
CONFIG_USB_GSPCA_SQ905C=m?
CONFIG_USB_GSPCA_STK014=m?
CONFIG_USB_GSPCA_SUNPLUS=m?
CONFIG_USB_GSPCA_T613=m?
CONFIG_USB_GSPCA_TV8532=m?
CONFIG_USB_GSPCA_VC032X=m?
CONFIG_USB_GSPCA_ZC3XX=m?
可以看到gspca系列驅動被編譯為模塊。當插入攝像頭后,使用dmesg命令可以打印出以下信息:?
usb 1-1.2: new full speed USB device using ehci_hcd and address 6?
usb 1-1.2: New USB device found, idVendor=046d, idProduct=08af?
usb 1-1.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0?
usb 1-1.2: configuration #1 chosen from 1 choice?
gspca: probing 046d:08af?
zc3xx: probe 2wr ov vga 0x0000?
zc3xx: probe sensor -> 0011?
zc3xx: Find Sensor HV7131R(c)?
gspca: probe ok?
這說明該攝像頭被識別,且自動掛載了gspca系列下的zc3xx驅動。?
如果由于某種原因,已配置的內核中沒有包括攝像頭驅動,可以重新配置內核選項,用新編譯的內核替換原有的舊內核。或者是依據設備號及產品號,直接到對應驅動的項目主頁,下載源碼進行編譯。?
最后總結一下?
如果你想買一個攝像頭,推薦買Logitech的,買符合UVC驅動的,可以到這里挑一款。?
如果你已經有了一個攝像頭,先插進去看看,Linux對它有沒有反應。記錄dmesg輸出信息,記錄lsusb輸出設備號,以設備號為關鍵字上Google搜索。?
參考資源 http://www.tldp.org/HOWTO/Webcam-HOWTO/?
http://www.chineselinuxuniversity.net/courses/kern el/articles/19988.shtml?
http://www.quickcamteam.net/
本文主要是自己拿來記日記用的,好記性不如爛筆頭啊!
總結
以上是生活随笔為你收集整理的关于摄像头的UVC协议接口!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【图像处理】——Python实现灰度特征
- 下一篇: UVC协议学习1--初步了解标准协议规范