前言
圖像采集與存儲功能構成的嵌入式監控系統是安全防范技術體系中不可缺少的重要組成部分,隨著微電子技術和軟件技術的發展,嵌入式技術也有了長足的進步。因此,基于嵌入式技術的圖像數據采集與存儲監控系統以其直觀、方便、信息內容豐富的特點,廣泛應用于許多場合。
監控系統工作于特定的環境下,具有很特殊的環境和結構要求,這對監控系統的軟硬件平臺提出了很高的要求。處理器性能的提高,接口傳輸數據能力的增強,特別是未來高容量存儲器的出現,圖像監控系統的小型化、多功能化是易于實現的,嵌入式技術引入圖像監控系統后,兩個問題需要解決,一是靈活的圖像監控系統結構調整,二是適合監控規范、集圖像和信號檢測與控制一體的交互式軟件的設計。
1 系統平臺的搭建
1.1 硬件平臺的搭建
ARM(AdvancedRISCMachines),既可以認為是一個公司的名字,也可以認為是對一類微處理器的統稱,還可以認為是一種技術的名字。
S3C2410處理器是Samsung公司基于ARM公司的ARM920T處理器核,采用0.18um制造工藝的32位微控制器。該處理器擁有:獨立的16KB指令Cache和16KB數據Cache,MMU,支持TFT的LCD控制器,NAND閃存控制器,3路UART,4路DMA,4路帶PWM的Timer,I/O口,RTC,8路10位ADC,TouchScreen接口,IIC-BUS接口,IIS-BUS接口,2個USB主機,1個USB設備,SD主機和MMC接口,2路SPI。S3C2410處理器最高可運行在203MHz。
由S3C2410為核心的圖像采集系統的硬件結構如圖1所示。因為S3C2410內部只有很小的存儲空間,所以我必須外擴系統的存儲器,作為32位的微處理器,S3C2410支持8位,16位和32位尋址方式,有16M×32位的尋址能力,可方便地構建較大地存儲空間,系統的存儲器由FLASH和SDRAM構成。數碼攝像頭通過USB接口與S3C2410芯片連接,通過S3C2410芯片來控制數碼攝像頭對圖像進行采集,并存儲在存儲器中。
1.2 軟件平臺的搭建
嵌入式Linux(EmbeddedLinux)是指對Linux經過裁剪小型化后,可固化在存儲器或單片機中,應用于特定嵌入式場合的專用Linux操作系統。具體的搭建流程如圖2所示。
2 USB攝像頭設備驅動的開發
在Linuxkernel源碼目錄中driver/usb/usb_skeletON.c提供了一個最基礎的USB驅動程序,我們稱為USB骨架。通過他僅需要修改極少的部分,就可以完成一個USB設備的驅動。我們的USB驅動開發也是從它開始的。USB驅動程序結構如下:
該結構指明了USB設備驅動所要做的工作,具體內容如下:
(1)在驅動模塊加載的時候,向USB核心子系統注冊,并告訴子系統需要支持的設備。
(2)在卸載USB設備驅動程序向USB核心子系統注銷。
(3)當獲支持的設備插入或者拔出的時候,調用哪些功能。
在初始化函數中,USB設備驅動調用usb_regiSTer函數進行注冊。
以上介紹了簡單USB設備驅動程序的框架。但是我們要進行的攝像頭驅動開發比上述驅動稍微復雜些。除了之前講到的USB驅動還包括圖像采集部分的設備驅動。
首先,我們需要定義一個數據結構,其中一個包括圖片信息、采集模式、解碼方式。具體定義如下。
LinuxUSB驅動程序需要做的第一件事情就是在LinuxUSB子系統里注冊,并提供一些相關信息,例如這個驅動程序支持哪種設備,當被支持的設備從系統插入或拔出時,會有哪些動作。所有這些信息都將傳送到USB子系統中。以下代碼完成USB攝像頭的注冊功能:
以上定義的數據含義如下ZC301是客戶端驅動程序的名稱,用于避免驅動程序的重復安裝和卸載。
zc301_probe則指向USB驅動程序的探測函數指針,提供給USB內核的函數,用于判斷驅動程序是否能對設備的某個接口進行驅動。
zc301_disconnect指向USB驅動程序中的斷開函數的指針,當從系統中被移除或者驅動程序正在從USB核心中卸載時,USB核心將調用該函數。
zc301_table列表包含了一系列該驅動程序可以支持的所有不同類型的USB設備,如沒有設置該列表,則該驅動程序中的探測回調函數不會被調用。
系統啟動時,首先需要加載各種驅動模塊,然后向系統注冊了生產廠商號碼(VendorID)和產品號(Pro-ductID)。當USB設備連接到主機上,系統會檢測它的VendorID和ProductID,如果與驅動模塊的注冊內容匹配,則將該驅動程序與設備掛接起來[5]。當插入攝像頭時,系統會調用zc301_probe函數。參數dev指定了設備信息,probe函數驗證所有可選配置的有效性,并調用usbvideo模塊的sbvideo_Regis-terVideodevICe()函數向videodev系統注冊。
當系統完成驅動注冊后,調用staticintzc301_init(structusb_zc301*zc301)和staticvoidzc301_start(structusb_301*zc301)函數完成對設備的初始化過程:填寫各個寄存器值、啟動攝像頭。系統運行到這一步,基本完成了對攝像頭驅動加載及設備初始化。接下來需要通過讀取用戶設定的圖像規格,其中包括:圖像格式、分辨率、顏色深度、對比度和亮度等參數。這些數值的讀取都是通過以下函數實現的:
在得到這些參數值后,再調用一套函數,實現參數的設置。每個參數設置函數和之前的參數取值函數是一一對應的。具體函數如下:
通過調用上面的函數,我們基本得到了所需的參數值,這樣我們就可以啟動攝像頭了。
當然我們還需要staticvoidzc301_shutdown(structusb_zc301*zc301)來關閉攝像頭。
至此,攝像頭驅動的驅動基本完成。通過這些函數的設置我們可以把具體的硬件電路抽象化為數據結構中的參數值。接下來我們可以通過V4L驅動來調用這些函數,實現對參數的賦值、打開設備、采集圖像和關閉設備等一系列的過程。
重新編譯、運行內核時,在串口反饋信息中會顯示USB攝像頭驅動程序成功加載。如圖3所示。
圖3串口反饋信息3Video4Linux下的圖像采集編程:
Video4Linux,簡稱V4L,是Linux中關于視頻設備的內核驅動,它為針對視頻設備的應用程序編程提供一系列半標準的接口。V4L利用這個接口,增加一些額外的功能,同時向外提供了一個屬于自己的API。我們可以通過調用V4L的API來實現各種功能。在Linux下,視頻采集設備的正常使用依賴于對Video4Linux標準的支持。目前的V4L涵蓋了視、音頻流捕捉及處理等內容,USB攝像頭也屬于它支持的范疇。
V4L中定義的主要數據結構:
這些數據結構都是由Video4Linux支持的,它們的用途如下:
(1)video_capability包含攝像頭的基本信息,例如設備名稱、支持的最大最小分辨率、信號源信息等,分別對應著結構體中成員變量name、maxwidth、maxheight、minwidth、minheight、channels(信號源個數)、type等;
(2)voide_picture包含設備采集圖像的各種屬性,如brightness(亮度)、hue(色調)、contrast(對比度)、whiteness(色度)、depth(深度)等;
(3)video_mmap用于內存映射;
(4)voido_mbuf利用mmap進行映射的幀信息,實際上是輸入到攝像頭存儲器緩沖中的幀信息,包括size(幀的大小)、frAMEs(最多支持的幀數)、offsets(每幀相對基址的偏移)。
系統在采集圖像之前,需要初始化這些數據結構中的參數值,系統才能夠按照要求采集圖像數據。
在USB攝像頭被驅動后,只需要再編寫一個對視頻流采集的應用程序就可以了。根據嵌入式系統開發特征,先在宿主機上編寫應用程序,再使用交叉編譯器進行編譯鏈接,生成在目標平臺的可執行文件。宿主機與目標板通信采用打印終端的方式進行交叉調試,成功后移植到目標平臺。
V4L圖像采集編程流程:
(1)打開視頻設備;
(2)讀取設備信息;
(3)更改設備當前設置;
(4)視頻采集得到圖像信息;
(5)對采集到的圖像進行處理;
(6)關閉視頻設備。
本文編寫采集程序是在安裝Linux操作系統的宿主機PC機上進行的,之后再移植到開發板上。下面是具體論述。
之前我們講到了在V4L中定義的主要數據結構及其功能。對應著這些內容,我們需要對這些數據結構進行定義,以抽象化一個視頻設備。以下是具體的定義內容:
攝像頭、采集圖像和關閉攝像頭的操作。采集程序中定義了如下的函數,以實現前面講到的功能。
intinit_videoIn(structvdIn*vd,char*devICe,intwidth,intheight,intgrabmethod);初始化攝像頭設備。*vd包含了之前定義的數據結構中的基本信息。另外還要對攝像頭采集圖像的大小、采集模式等參數進行賦值。
intv4lGrab(structvdIn*vd,char*filename);采集圖像主程序。*filename為圖像的文件名,我們可以通過對文件名的設置來確定圖像保存的位置。
iNTClose_v4l(structvdIn*vd);關閉攝像頭intget_jpegsize(unsignedchar*buf,intinsize);采集圖像的大小。
因為我們是通過調用采集主函數intv4lGrab(structvdIn*vd,char*filename)來實現圖像的采集和保存的,所以需要詳細的講解一下該函數的構成。以下是該函數的具體內容:
首先,我們需要定義幾個參數,如下:
FILE*FP;定義一個文件類型指針,指向我們采集到的圖像文件intlen;
定義一個整型變量,記錄從內存中讀取的數據量intsize;
定義一個整型變量,指明一幀圖像的數據量interreur=0;定義一個整型變量,指明運行時的錯誤返回值intjpegsize;定義一個整型變量,指明我們需要的圖像大小。
接著我們調用read(vd->fd,vd->pFramebuffer,size)函數,把存放于圖像緩沖區的數據讀入到指定的臨時文件中。之后根據我們對圖像的大小、亮度、對比度等要求轉化之前采集到的圖像數據,最后我們打開一個文件,把圖像數據寫入到該文件中并保存。
4 結論
本文設計了一種嵌入式視頻采集系統,該系統小巧,并且在保證當前信息完整的情況下,盡可能少的占用存儲容量,實現了該系統的圖像采集、存儲和重現功能。在硬件規劃上,采用實用簡單的USB接口通信。且系統中預留了豐富的外設接口,便于今后的擴展升級。
上一篇:ARM9和Linux操作系統構成的電力負荷終端系統的設計
下一篇:μC/OS-II操作系統在不同處理器上的應用
推薦閱讀
史海拾趣
在電子行業,Formosa MS(美麗微半導體股份有限公司)的發展過程中,有幾個關鍵的故事可以體現其成長歷程。以下是根據公開信息整理的五個相關故事:
1. 創立與初期發展
Formosa MS成立于民國八十五年七月(即1996年),由楊照霞女士創辦。公司初期便確立了“新速勤儉、創造利潤、熱誠信義、前瞻未來”的經營理念,致力于在二極管領域進行創新。在整流二極管逐漸轉移至中國大陸生產的背景下,Formosa MS選擇專注于生產附加值較高的產品,如蕭基二極管,這一戰略決策為公司后續發展奠定了堅實基礎。
2. 產品創新與多元化
隨著技術的不斷進步,Formosa MS不斷推出新產品以滿足市場需求。公司現有產品分類廣泛,從0.1安培至三十安培的各類二極管均有產制,且產能規劃每月超過200KK,涉及焊接、成型、測試等多個生產環節。此外,公司還實現了產品的多元化,包括一般、快速及超快速二極管等多種類型,進一步增強了市場競爭力。
3. 國際化布局
Formosa MS在發展過程中,積極拓展國際市場。公司的銷售客戶遍布全球,不僅服務于國內半導體制造商的OEM及中間電子零件貿易商,還通過自有品牌行銷,贏得了世界各地客戶的廣泛好評。其應用類別涵蓋通信、車用、AI及穿戴裝置等多個領域,展現了公司在電子行業中的廣泛影響力。
4. 品質至上與服務優先
Formosa MS始終將品質視為企業的生命線,堅持“品質至上、服務優先、顧客滿意”的質量政策。公司嚴格遵循戴明博士的品質理念,致力于提供滿足顧客需求的產品與服務。這種對品質的執著追求,使得Formosa MS在電子行業中樹立了良好的口碑,贏得了客戶的信賴與支持。
5. 應對行業變革與持續創新
面對電子行業的快速變革,Formosa MS始終保持敏銳的洞察力,積極應對市場變化。公司不斷投入研發,推動技術創新,以適應行業發展的新趨勢。同時,公司還注重人才培養和團隊建設,為企業的持續發展提供了有力保障。正是憑借這種持續創新的精神和強大的團隊實力,Formosa MS在電子行業中不斷取得新的突破和發展。
需要注意的是,由于具體細節可能涉及公司內部的商業秘密,以上故事主要基于公開信息進行概括和整理。如需更詳細的信息,建議直接訪問Formosa MS的官方網站或查閱相關行業報告。
為了進一步拓展北美市場,APEM在1991年收購了位于美國波士頓的American Switch Corp.,并成立了子公司APEM COMPONENTS Inc.。這一收購使APEM得以在北美市場建立穩固的地位,為其全球擴張提供了有力支持。
APEM公司的創始人基恩·羅杰羅,在20世紀50年代初,看到了美國產品主導法國市場的商機。為了解決產品維修和備件訂購的難題,他決定自己生產開關。羅杰羅的開關產品在尺寸和操作方式上與美國產品相似,但價格更親民,交貨時間更短。這一創新舉措使APEM迅速在市場上站穩腳跟,為后續的發展奠定了堅實基礎。
在追求經濟效益的同時,Capar Components Corp也注重環保和可持續發展。公司積極采用環保材料和生產工藝,減少生產過程中的污染排放。同時,公司還推出了一系列綠色電子產品,滿足消費者對環保產品的需求。這些舉措不僅提升了公司的社會形象,還為公司贏得了更多客戶的青睞。
在電子行業的發展過程中,AVG也面臨著各種挑戰和危機。例如,隨著全球貿易保護主義的抬頭和原材料價格的波動,公司的生產成本不斷上升;同時,新技術的不斷涌現和市場競爭的加劇也給公司帶來了不小的壓力。然而,AVG始終保持著冷靜和清醒的頭腦,積極應對各種挑戰和危機。公司通過優化生產流程、提高生產效率、加強成本控制等措施,降低了生產成本;同時,加大研發投入,推出具有競爭力的新產品,以應對市場競爭的挑戰。這些舉措使得AVG在困境中保持了穩健的發展態勢。
隨著全球對可持續發展的關注度不斷提高,AVG也積極響應這一趨勢,將可持續發展理念融入公司的戰略和運營中。公司注重環保和節能減排,采用環保材料和生產工藝,減少對環境的影響;同時,AVG還積極參與社會公益事業,為社會做出貢獻。這些舉措不僅提升了AVG的社會形象,也為公司的長遠發展奠定了堅實的基礎。
這些故事只是AVG Semiconductors(HITEK)在電子行業發展中眾多精彩瞬間的一部分。通過技術創新、市場擴張、合作伙伴關系的建立以及應對挑戰和危機的能力,AVG不斷壯大自身實力,為電子行業的發展做出了重要貢獻。未來,AVG將繼續秉持創新精神和社會責任感,在電子行業中書寫更加輝煌的篇章。
當凱旋的時候 畢業了,嘲笑般的風聲向我耳朵邊刮來,頓時愣了,大學畢業了,多年經營不起的創業夢接近尾聲,走向人生打工路開始了,畢業那晚,很多朋友都去聚會了,只有我和伙伴在商討放棄多年心血,第二天早上,收拾了包袱,告別了朋友,各奔東西 ...… 查看全部問答∨ |
這是我剛學C語言時寫的一些程序,比較簡單,希望對剛接觸單片機的同胞們有所幫助吧 我使用的主控是89c51,晶振頻率是11.0592m的 [ 本帖最后由 open82977352 于 2010-2-3 14:44 編輯 ]… 查看全部問答∨ |
校驗原理 在計算機得數值計算中,數值經常是以Bcd碼表示的十進制進行運算的。即一位BCD碼用4位二進制位表示。但是BCD的加法需要兩個加法器來完成,如果分析一下BCD數的加法過程,原因就很清楚。請看下面: 令A=1000,B=0111,這兩個數都是正 ...… 查看全部問答∨ |
現有一塊12864液晶,顯示基本上成功,可以顯示預先設定的字符串,字符,但無法顯示不確定的float類型值。 如a=12.5554或者其他什么值,求高手一段程序,或指點一二。… 查看全部問答∨ |
我們公司有個USB接口的條形碼掃描儀 領導想讓加到現有的設備上,設備用的是Linux2.4的內核 請問,Linux支持這種USB接口的HID設備嗎? 重編內核時,我需要加進哪些驅動選項? 請指教,多謝 或者我該哪些思路來驅動這個設備? … 查看全部問答∨ |
|
北京中電興發科技有限公司誠聘C++ 、.NET、嵌入式工程師 C++軟件工程師 崗位職責: 1、負責智能交通、平安城市、行業信息化高端應用全線產品配套軟件平臺的研發; 2、參與系統設計及功能架構; 3、編寫代碼及完成自測; 4、撰寫技術文檔。 任職資格: 1、計算機 ...… 查看全部問答∨ |
從電話到電視,從LAN到INTERNET,從微波到數字化通信,人們的生產生活時刻與影像和聲音的傳遞息息相關,傳統的信息交流 方式正在因科學技術的飛速發展而發生著巨大的變化。廣播電視與通訊兩大產業在這樣的背景下延伸和發展,而它們之間卻因大量的 ...… 查看全部問答∨ |