

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 本科生畢業(yè)論文(設計)</p><p> 題目:基于python開發(fā)的圖像 </p><p> 采集器之Airppt </p><p><b> 學 部 </b></p><p><b> 學科門類 </b></p><p>
2、<b> 專 業(yè)</b></p><p> 基于python開發(fā)的圖像采集器之Airppt</p><p><b> 摘 要</b></p><p> 本文設計了一個基于python開發(fā)的圖像采集器,該設計通過普通的USB數(shù)字攝像頭來捕捉和獲取實時圖像,利用linux系統(tǒng)下的python腳本中的Opencv
3、圖像處理模塊和Huigui攝像頭識別模塊實現(xiàn)了采集圖像信息并對圖像信息進行分析的功能,該設計具有可靠性高、靈活穩(wěn)定、低成本的特點,基于python開發(fā)的圖像采集器將采集到的數(shù)據(jù)輸入到python腳本進行分析處理,并從外部引入C編程,根據(jù)不同的處理結果,系統(tǒng)將會調用不同的C程序,從而實現(xiàn)對ppt的翻頁。本文系統(tǒng)介紹了用python開發(fā)的圖像采集器基本滿足設計要求。</p><p> 關鍵詞:圖像采集器;Pytho
4、n語言;Python C擴展;混合語言編程</p><p> Development the image acquisition based on python</p><p><b> ABSTRACT</b></p><p> Design one based on python development of image captur
5、e device, the design by ordinary USB digital camera head to capture and access to real-time image using python script in linux system Opencv image processing module and Huigui camera head identification module to achieve
6、 the capture image informationand image information analysis function, the design has high reliability, flexible and stable, low-cost, will be collected based on the the python development of image acquisition data input
7、 to a </p><p> Key words:Image acquisition;Python;Python C extension;Mixed-language programming</p><p><b> 目 錄</b></p><p> 1 前言錯誤!未定義書簽。</p><p> 2 Pyt
8、hon語言介紹3</p><p> 2.1 Python語言簡介3</p><p> 2 Python語言特性 4</p><p> 3 設計思路和編程5</p><p> 3.1 設計思路 5</p><p> 3.2 設計流程圖 5</p><p><b>
9、 3.3 編程 6</b></p><p> 3.3.1 Opencv模塊引用 6</p><p> 3.3.2 Highgui模塊引用 6</p><p> 3.3.3 Image模塊引用 6 </p><p> 3.3.4 Os模塊引用 6</p><p> 3.4 python與C
10、混合編程接口問題 6 </p><p> 4 功能和可行性分析9</p><p><b> 5 結論 11</b></p><p><b> 參考文獻12</b></p><p><b> 致謝 13</b></p><p><
11、b> 附錄14</b></p><p><b> 1 引 言</b></p><p> 信息和網絡技術的飛速發(fā)展, 使得圖像信息量激增,人們對檢索圖像信息的需求也日益增加。作為一種純面向對象的動態(tài)腳本語言, python 已經在網絡應用軟件、系統(tǒng)配置軟件及科學研究領域獲得了廣泛的使用,因此本文介紹了一種基于Python的利用Linux平臺下P
12、ython與C++/C++語言的兩種Os.systeam接口, 實現(xiàn)了python與VC的混合語言編程,并將這種軟件結構應用于一套圖像采集器系統(tǒng)。實際應用表明, 這種結構可以充分發(fā)揮Python編程的靈活簡單和VC執(zhí)行效率高的優(yōu)點, 克服Python執(zhí)行效率低和VC開發(fā)效率低的缺點,實現(xiàn)了軟件開發(fā)效率和執(zhí)行效率的雙贏。</p><p> 當今社會,科技發(fā)達成長了人們的懶惰性,利用各種機器設備做家務,利用遠程監(jiān)控
13、來遙控遠在千里之外的東西,總之一切事務趨于自動化。圖像采集器(Image acquisition),是指通過攝像頭采集圖像信息,批量獲取圖像信息,能夠根據(jù)圖像信息獲取到物體運動的位移和執(zhí)行的動作,這樣采集到的圖像信息分析更加的準確,可靠性更強。本文設計了一種不用點擊鼠標,不用按下鍵盤,只需要輕輕的揮揮手就可以操縱PPT的翻頁的軟件--Airppt, 解決了以往操作PPT的繁瑣性,滿足了人們對方便快捷生活的向往,并且提升了宣講效率。有了a
14、irppt,老師上課講課就不用總在電腦旁用鼠標控制ppt,這樣就加大了老師與學生的互動性。</p><p> Airppt利用的原理就是圖像采集器,它在國內外應用廣泛,并且發(fā)展迅速,在國外它應用于軍事,醫(yī)療,監(jiān)控等領域。在國內還沒有太多的應用,據(jù)目前了解到的在國內一般應用于監(jiān)控的比較多,還有運用于娛樂的,通過采集器將用戶的身形采集到屏幕中并且可以采集到你的動作與里面的事物發(fā)生互動。</p><
15、;p> 本文通過對模塊應用環(huán)境及功能的認證,確定了應用opencv模塊處理圖像,huigui模塊來識別并調用攝像頭采集信息,image模塊處理采集到的圖像大小等,os模塊引入外部C擴展,在利用python代碼將這些功能連接起來,最終實現(xiàn)了airppt的相關協(xié)議所設定的功能。</p><p> 本文主要研究內容如下:</p><p> opencv模塊的安裝調用及作用;</
16、p><p> Image模塊的用法安裝;</p><p> Huigui模塊的用法及調用;</p><p> Python外部C擴展的引入;</p><p> 本設計采用python程序編寫,硬件只需一個外置攝像頭作為采集信息的工具。</p><p> 2 Python語言介紹</p><
17、p> 2.1 Python語言簡介</p><p> Python是一種解釋型、交互式、純面向對象的腳本程序設計語言,它結合了多種不同語言最經典的設計原則和思想。自1990年Guido van Rossum 發(fā)明Python以來,它的簡單、清晰和優(yōu)雅吸引了廣泛的關注,Python 社區(qū)以每兩年翻番的速度迅速擴張。例如:Python自google創(chuàng)建之初就是其主要網絡應用開發(fā)工具;美國國家航空航天局使用
18、Python開發(fā)CAD/CAE/PDM資源庫, 在此基礎上建設新一代協(xié)作式工程環(huán)境NGCEE(Next Generation Collaborative Engineering Environment);美國國家研究推進機構CNRI(Corporation for National Research Initiatives )1999年啟動的Computer Programming for Everybody(C4PE)計劃將Pytho
19、n作為未來程序設計語言向教育機構推廣; Microsoft于2005年推出Iron Python 的開源項目, 在Visual Studio 2005 中接納Python語言作為唯一動態(tài)腳本語言開發(fā).net應用</p><p> 2.2 Python語言特性</p><p> 相比其他任何程序設計語言, Python允許軟件設計者更關注于問題本身而不是實現(xiàn)細節(jié), 其主要特性有:<
20、;/p><p> (l) 面向對象 Python 是一種純面向對象語言, 支持面向對象的所有機制, 這使它可以應用于大型軟件項目開發(fā)。</p><p> (2) 虛擬機機制 Python代碼編譯為字節(jié)碼在虛擬機上執(zhí)行,這種類似Java的機制使Python具有平臺無關性, 并獲得比其他腳本語言更快的執(zhí)行效率。</p><p> (3) 內置高級數(shù)據(jù)類型
21、 Python中的元組、列表、數(shù)組、字典等高級數(shù)據(jù)類型具有極強的表達能力, 幾乎任意復雜的對象在Python中均可以以最簡單的方式進行描述。</p><p> (4) 交互式開發(fā)方式和單元測試 類似Foxpro 和 Matlab ,Python 提供了內置交互式窗口, 可以允許開發(fā)者邊嘗試邊書寫代碼, 極大地提高了軟件開發(fā)效率。另外單元測試機制在每個類代碼完成后均可以單獨執(zhí)行、測試。這兩種開發(fā)方式使得”搭積
22、木” 式的軟件開發(fā)過程成為現(xiàn)實。</p><p> (5) 動態(tài)執(zhí)行特性 類似早期Dbase系統(tǒng)的宏代替、Python允許動態(tài)構造程序代碼并執(zhí)行, 使得軟件中的重復代碼得到簡化。</p><p> (6) 高度可擴展性Python 語言本身只實現(xiàn)了一個小內核,其強大功能體現(xiàn)在大量的擴展模塊。計算機科學領域幾乎所有的已知算法均可找到Python語言擴展。不僅c / c + + 編寫的
23、程序可以方便地改寫成Python擴展模塊,而且Python自身也可以被嵌人到口C/C++項目中。</p><p> (7) 平臺無關性Python字節(jié)碼可以不經修改跨平臺運行在所有主流操作系統(tǒng)上, 甚至包括Pocket PC 、Palm等嵌入式系統(tǒng)[1]。 </p><p> 3 設計思路和編程</p><p> 3.1 設計思路</p
24、><p><b> 本文的設計思路是:</b></p><p> ?。?).編輯器的選擇:python固定的編輯器是vim編輯器,這個編輯器很容易實現(xiàn)腳本的創(chuàng)建保存和運行,能大大提高程序員的編程速度,它還有一個非常強大的功能,在電腦發(fā)生意外突然關機的情況下,這個編輯器就會自動保存你之前你沒有保存的程序。這樣就不會丟失有用的信息</p><p>
25、?。?).圖像坐標的產生:設計中采用的是判斷紅點的個數(shù),紅點指定義的一個紅色RGB色調,當我們動作時就會采集到紅點動作的個數(shù),通過判斷紅點的個數(shù),來判斷鼠標是否要動作,通過動作的位移來判斷鼠標動作的方向。</p><p> ?。?).圖像的處理:圖像的處理是用Image模塊處理的,可改變圖像的大小,像素等,這樣就可以把采集到的圖像信息處理成所需要的。</p><p> ?。?).攝像頭接口
26、的處理:這里用的是Opencv模塊來實現(xiàn)圖像的坐標的采集,opencv的設計意圖是為用戶提供簡單易用的圖形用戶接口。</p><p> ?。?).動作的反饋:當你用手在攝像頭前揮動時,該動作就會被程序所識別,然后發(fā)出相應的相應。</p><p> (6).功能的設定:這些功能是由C語言寫的,然后引入os模塊,通過os模塊將寫好的C功能引入到腳本語言中去。然后再用判斷語句,當程序符合哪種條
27、件是就會執(zhí)行哪些C功能。</p><p><b> 2軟件編程思想</b></p><p> 本文的軟件編程思想是:攝像頭要采集手指運動的圖像,來判斷執(zhí)行什么樣的動作,那么攝像頭怎么樣才能識別你的手指呢?本文在這里是用顏色(R,G,B)來解決的,本設計把手指用(R,G,B)定義成紅點,現(xiàn)在紅點就代表手指,應用指令控制攝像頭來采集紅點。這是本設計的第一步打算。<
28、;/p><p> 第二步,需要采集的目標已經確定,接下來就是判斷紅點的運動方向和位移,我這里是通過判斷紅點運動的方向來確定對airppt執(zhí)行什么樣的動作;通過紅點的位移和個數(shù)來確定airppt是否要執(zhí)行該動作,本設計在這里定義的是位移大于70mm,紅點個數(shù)大于20個時airppt才會執(zhí)行相應的動作。因為動畫都是由一張張圖片組成的,假如不判斷位移,當你不動作時它也會自動采集紅點,進而發(fā)生動作反應,這樣就出錯了。這里的
29、中心思想就是if判斷語句,事件處理系統(tǒng)和for循環(huán)語句。</p><p> 3.2 設計流程圖</p><p> 本文定義的參照物是一個用代碼編寫的RGB紅點。并且分析每張圖片的紅點數(shù),當紅點數(shù)達到70個時將該圖片列為有效圖片,否則無效。</p><p> 圖 3-1 設計全局架構結構圖</p><p> 圖3-1是本設計的全局
30、架構結構圖,是本設計得以實現(xiàn)的最重要部分,對獲取到的圖片分析是否有效,接下來則是細節(jié)部分,分析兩張最近的有效圖片中心點位置來判斷左翻頁還是右翻頁還是不翻頁。</p><p> 圖3-2 有效圖片篩選架構圖 </p><p> 圖3-2實現(xiàn)的是對有效圖片進行分析,通過判斷最近兩張有效圖片的中心位置點的位置關系來決定ppt
31、是否執(zhí)行動作,執(zhí)行動作時是左翻頁還是右翻頁等一系列功能。完成這一步所需的程序如下:</p><p> if len(list2)>20: #如果列表中坐標個數(shù)大于20個</p><p> if len(list2) > 20:</p><p> tn3=list2[-1][0]-list2[0][0]
32、 #將橫坐標的長度賦值給tn3 </p><p> tn4=list2[-1][1]-list2[0][1] #將縱坐標的長度賦值給tn4</p><p> while len(list2)>3: #</p><p> list2.pop(0)</p><p> #print '.
33、.........................',tn3</p><p> #print tn4</p><p> if tn4>50 and tn3>-50 and tn3<50:</p><p> os.system('./a.x 71')</p><p> if tn4<-50
34、 and tn3>-50 and tn3<50:</p><p> os.system('./a.x 9')</p><p> if tn3<-100:</p><p> os.system('./a.x 114')</p><p> #print '[right]'&
35、lt;/p><p> #time.sleep(0.8)</p><p> if tn3>100:</p><p> os.system('./a.x 113')</p><p> #print '[left]'</p><p> #time.sleep(0.8)</p&
36、gt;<p> 每次判斷完一張圖片后,就把列表中的紅點數(shù)目與坐標等都刪除。這樣就不會對下一張圖片造成影響。</p><p><b> 3.3 編程</b></p><p> 在開始編程之前要先確定編程工具,本設計用的是vim編輯器。這個編輯器的最大優(yōu)勢就是,在意外情況下可以自動保存代碼。當代碼錯誤時,會提示錯誤信息,能夠及時進行修改。以下是本設
37、計的部分代碼:</p><p> #!/usr/bin/python</p><p> 這是解釋python語言在電腦中的位置</p><p> #-*- coding: UTF-8 -*-</p><p> 這是python腳本中的中文解釋器</p><p> 3.3.1 opencv模塊</p>
38、;<p> import opencv</p><p> 從外部引入opencv模塊</p><p> 本設計用到的opencv代碼如下:</p><p> cam=highgui.cvCreateCameraCapture(0) #定義攝像頭端口位置</p><p> tn1=opencv.adaptors.Ip
39、l2PIL(im) #采集到的圖像定義為tn1</p><p> OpenCV的全稱是Open Source Computer Vision Library,是一個跨平臺的計算機視覺庫。OpenCV是由英特爾公司發(fā)起并參與開發(fā),以BSD許可證授權發(fā)行,可以在商業(yè)和研究領域中免費使用。OpenCV可用于開發(fā)對實時的圖像處理、計算機視覺以及模式識別程序。OpenCV用C++語言編寫,它的主要接口也是C++語
40、言,但是依然保留了大量的C語言接口。該庫也有大量的Python, Java and MATLAB/OCTAVE的接口。這些語言的API接口函數(shù)可以通過在線文檔獲得?,F(xiàn)在也提供對于C#,Ch,Ruby的支持。</p><p> 安裝Opencv所需的依賴工具:cmake, gtk+*, ffmpeg*, gstreamer*編譯安裝:</p><p> $ cd $DIR</
41、p><p> $ mkdir release</p><p> $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON ..</p><p> $ make -j$ make install</p><p
42、> 3.3.2 highgui模塊</p><p> from opencv import highgui</p><p> 從opencv圖形處理模塊中引入highgui模塊。HighHGUI只是用來建立快速軟件原形或是試驗用的。它的設計意圖是為用戶提供簡單易用的圖形用戶接口。</p><p> 本設計用到的highgui模塊如下:</p>
43、;<p> im=highgui.cvQueryFrame(cam);這里highgui用來采集圖像</p><p> OpenCV為了用于生產級別的應用而設計的。HighHGUI只是用來建立快速軟件原形或是試驗用的。它的設計意圖是為用戶提供簡單易用的圖形用戶接口。通常,你需要讀入源圖像到你的程序或者輸出結果圖像到磁盤。此外,需要用簡單的方法顯示圖像到監(jiān)視器并且向用戶提供輸入.如果你試圖創(chuàng)建最終
44、用戶的應用,請不要使用HighGUI 。 相對來說,應當為你的目標系統(tǒng)參考特定的函數(shù)庫。比如:HighGUI中的攝像頭輸入方法(cvCreateCameraCapture)是為了易用而設計的。然而,并不意味著它能夠對熱插拔作出反應等等[2]。</p><p> 3.3.3 image模塊</p><p> import Image</p><p> 引入圖像模
45、塊,對采集到的圖像進行處理</p><p> 本設計用到的image模塊代碼:</p><p> tn1=tn1.resize((160,160)) #重新設置采集到的圖像的大小</p><p> size1=tn1.size #將重新設置的圖像的大小值定義位size1</p><p
46、> pbb=tn1.load() #載入圖像 </p><p> PythonWare公司提供了免費的圖像處理工具包PIL(Python Image Library),該軟件包提供了基本的圖像處理功能,如:改變圖像大小,旋轉圖像,圖像格式轉換,色場空間轉換,圖像增強,直方圖處理,插值和濾波等 等。雖然在這個軟件包上要實現(xiàn)類似MATLAB中的復雜的圖像處理
47、算法并不太適合,但是Python的快速開發(fā)能力以及面向對象等等諸多特點使得它非常適 合用來進行原型開發(fā)。在PIL中,任何一副圖像都是用一個Image對象表示,而這個類由和它同名的模塊導出,因此,要加載一副圖像,最簡單的形式是這樣的:import Image</p><p> img = Image.open(“dip.jpg”)</p><p> 注意:第一行的Image是模塊名;第二
48、行的img是一個Image對象; Image類是在Image模塊中定義的。關于Image模塊和Image類,切記不要混淆了。現(xiàn)在,我們就可以對img進行各種操作了,所有對img的 操作最終都會反映到到dip.img圖像上。這個模塊提供了一個常用的圖像增強工具箱??梢杂脕磉M行色彩增強、圖像疊加、改變圖像大小、亮度增強、對比度增強、圖像尖銳化等等增強操作。所有操作都有相同形式的接口——通過相 應類的enhance方法實現(xiàn):色彩增強通過Col
49、or類的enhance方法實現(xiàn);亮度增強通過Brightness類的enhance方法實現(xiàn);對比度增強通過Contrast類的enhance方法實現(xiàn);尖銳化通過Sharpness類的enhance方法實現(xiàn)。所有的操作都需要向類的構造函數(shù)傳遞 一個Image對象作為參數(shù),這個參數(shù)定義了增強作用的對象。同時所有的操作都返回一個新的Image對象。如果傳給enhance方法的參數(shù)是1.0, 則不對原圖像做任何改變,直接返回原圖像的一個拷貝。&
50、lt;/p><p><b> 3.34 os模塊</b></p><p><b> import os</b></p><p> 引入os模塊,os模塊提供了一個統(tǒng)一的操作系統(tǒng)接口函數(shù)</p><p> 本設計引用os模塊所實現(xiàn)的代碼如下:</p><p> os.sy
51、stem('./fake-mouse-move.x 0 ' + str(m) + ' ' + str(n))#引入用C語言編寫的程序</p><p> Python C 擴展 </p><p> 一個C 源程序中的算法開發(fā)測試完畢后,可以改寫為python C 擴展暴露給Python程序使用。例如將C源程序中的foo函數(shù)轉換為python語言的擴展, 需
52、要以下步驟:</p><p> (l) 包含python.h 的頭文件, 連接pythonXX.lib(XX 是python版本號),其中Python.h 定義了所有Python的內部數(shù)據(jù)結構和C的API函數(shù)原型。</p><p> (2) 定義一個此擴展模塊的異常對象。</p><p> (3) 實現(xiàn)一個客戶端函數(shù), 這個函數(shù)負責將傳入的python對象參數(shù)
53、轉換為C對象并用這些參數(shù)調用foo函數(shù), 最后將結果轉換為python對象返回,如果出現(xiàn)錯誤,則設置異常對象并返回Null。這個客戶端函數(shù)充當python和C程序之間的參數(shù)調度者。</p><p> (4 ) 填寫一個擴展模塊定義的所有函數(shù)名與客戶端函數(shù)對應關系表, 實現(xiàn)python程序和C 程序的映射。</p><p> (5) 完成擴展模塊的初始化函數(shù)[11]。</p>
54、<p> 3.4 C語言與Python語言混合編程的接口問題</p><p> 整個軟件編程主要是用Python語言, C 語言只占了一小部分,因此設計中,將用C語言編的求解器做成一個擴展模塊,嵌入到Python語言中。下面給出了在本軟件中的接口設計方法。</p><p> 第一步,將用C語言編寫的代碼在C 編譯器中編譯調試成功;</p><p>
55、; 第二步, 在C代碼中加入# include “Python. c”這條語句, 告訴C編譯器將要調用Python 庫函數(shù)。</p><p> 第三步, 在C代碼中的主函數(shù)加上"PyObject * Module_func( )"Python打包器,此打包器的作用是把接受到的Python類型的值轉換成C語言數(shù)據(jù)類型的值,并用這些值做為實參,放到相關的函數(shù)中去計算, 計算完成后, 如果要將結
56、果輸出到Python編寫處理器中, 必須由打包器接受計算結果并把它們轉換成Python語言數(shù)據(jù)。</p><p> 經過以上步驟即可完成C語言和python語言的混合編程。Python中將這些步驟封裝成了一個方法,即Os.system(),但是python中識別C代碼需要這樣的格式:os.system(‘./...’)[8]。</p><p> 4 功能分析及預期效果 </p&
57、gt;<p><b> 一、 功能分析</b></p><p> 利用手指控制ppt實現(xiàn)的功能有:左翻頁,右翻頁,開啟全屏,退出全屏</p><p> 系統(tǒng)主要由Python開發(fā),由于它自帶的模塊較多,所以要根據(jù)需求來調用其中對我們開發(fā)airppt有用的模塊,需要熟悉python中各個模塊的作用和用法。airppt的原理是根據(jù)坐標和像素來采集圖像信
58、息,然后返回到程序中,通過圖像處理工具對采集到的圖像進行處理,最后形成動作,來實現(xiàn)airppt的功能。</p><p> 本設計首先要用到圖像處理工具是Opencv, 從opencv圖形處理模塊中引入highgui模塊。HighHGUI只是用來建立快速軟件原形或是試驗用的。它的設計意圖是為用戶提供簡單易用的圖形用戶接口;引入圖像模塊Image對采集到的圖像進行處理,引入os模塊提供一個統(tǒng)一的操作系統(tǒng)接口函數(shù);引
59、入時間模塊來獲取本地時間。</p><p> 其次要熟悉python的編程方法和獲取坐標的原理,以及解決接口問題,這樣就需要多看python方面的資料,并且要選擇編輯器來進行代碼編寫。代碼編寫要求:掌握python的基本概念和基本的理論知識;熟練編程工具的使用方法;對程序進行初步的編寫和調試。</p><p> 現(xiàn)在我只是初步實現(xiàn)了airppt的部分功能,接下來還要對它進行調試、整合,
60、擴充它的功能,直至其能實現(xiàn)手動控制ppt。</p><p><b> 二、 預期效果</b></p><p> 通過測試,攝像頭可以獲取到手指的信息,光標并且會跟隨手指的運動而動作,目前還沒有實現(xiàn)虛擬點擊的效果,而且這個版本的光標動作不太穩(wěn)定,會在光標附近晃動,所以本設計開發(fā)了第二個版本,第二個版本不能顯示光標動作的痕跡,但是能控制ppt動作,識別效果不太明顯,經
61、分析這與攝像頭像素有關。不過還好,本設計的預期功能基本都實現(xiàn)了。以后還會增加在新功能,優(yōu)化已有的功能。下面是程序運行截圖,圖4-1是執(zhí)行代碼后的截圖,圖4-2是操作ppt翻頁的程序運行截圖。</p><p> 圖4-1 程序運行截圖 </p><p> 圖 4-2 程序執(zhí)行操作截圖</p><p><b> 5 結論&l
62、t;/b></p><p> 在此次畢設中,我學到了很多東西,并且讓我瘋狂的喜歡上了編程,這段時間感覺的過的特別充實,這幾個月比大學四年學的東西都多,當然也有一些值得改進以借鑒的地方,現(xiàn)總結如下:</p><p> 需求設計:在前期查閱了相關的資料,對python的原理有一定的了解之后,就開始著手對設計進行需求分析。并且試著畫需求的流程圖,可是經幾番修改再修改,還是沒能如愿,這說
63、明自己在這方面還有很多需要提高的地方。于是就畫出了雙面板,但是我沒有充分的考慮到這些功能的實際情況,使得做出的需求很不好實現(xiàn),但是最后還是做出了切合實際的需求分析流程,在老師的教導下學會了制作需求分析流程的方法。</p><p> 環(huán)境配置:在做出了需求分析后,將相應的軟件下載之后,有的軟件卻怎么也裝不上,也不能引入到程序中。用print來分行檢查代碼,我發(fā)現(xiàn)有的安裝包需要依賴關系,或者是有的需要源碼安裝,非常
64、費事,最后還是有一兩個包裝不上,終于在老師的幫助下所有包都裝上了,原來需要外源才可以安裝。我想到了可能是這個原因,但是不知道怎么去配置外源,這也讓我認識到要運用合理有效的方法去迎難而上,而不是想當然,問題很有可能就是出在這上面。</p><p> 代碼編寫:查閱了大量的資料,有了這方面的思路后就開始編寫代碼了,獲取攝像頭設置,接收采集信息的設置,但是意外的情況的判斷都讓我覺得有些難以實現(xiàn),特別是判斷參照物是否動
65、作了,是向那個方向動作的等,獲取與處理的聯(lián)調實現(xiàn)起來確實不難么容易,還需要對編程思路進一步的認識。</p><p><b> 參考文獻</b></p><p> [1] (丘恩Chun)(W.J.). Python核心編程(第2版)[M]. 人民郵電出版社 .2008.</p><p> [2] Doug Hellmann . Pyth
66、on標準庫[M]. 機械工業(yè)出版社. 2012.</p><p> [3] Paul Gries . Python編程實踐[M]. 機械工業(yè)出版社. 2011.</p><p> [4] Mark Lutz . Programming Python[M] 出版社. 2011. </p><p> [5] 赫特蘭 著 .Python基礎教程
67、(第2版)[M]. 人民郵電出版社. 2010.</p><p> [6] 魯特茲 . Python學習手冊(第3版)[M]. 機械工業(yè)出版社. 2011.</p><p> [9] 李艷紅,李海華.傳感器原理及其應用[M].北京:北京理工大學出版社,2010. </p><p> [10] 譚浩強.C程序設計北京[M].北京:清華大學出版社,1999.
68、</p><p> [11] 霍頓C語言入門經典(第4版)[M].北京:清華大學出版社,2008.</p><p> [12] 張若愚Python科學計算[M]:清華大學出版社,2012.</p><p> [13] James PaynePython編程入門經典 [M]:清華大學出版社,2011.</p><p> [14] 巴里深
69、入淺出Python[M].北京:東南大學出版社,2011.</p><p> [15] Y.Daniel LiangPython語言程序設計[M]:機械工業(yè)出版社,2013.</p><p> [16] Guido van Rossum Python Tutorial[J]:Python Software Foundation,2006.</p><p><
70、;b> 致 謝</b></p><p> 這次在實驗室的經歷是我在大學最后一次了,想想從大一開始,有過多少次的實驗課上看著同學都快走完了,自己還沒什么頭緒的焦頭爛額,現(xiàn)在想起來竟是那么的可笑,卻又帶著幾分回憶和傷感。</p><p> 我很珍惜這次做畢設的機會,不僅僅是我要交出大學階段的學習成果,更是對自己能力與知識的檢測。在此,衷心地感謝我的指導教師。在我做畢
71、業(yè)設計階段,他自始至終給予了我精心的指導和嚴格的要求,為本論文的順利完成傾注了大量的心血。老師為人謙遜,熱心幫助學生,在我們做畢設遇到問題的時候總能夠不厭其煩的耐心予以指導,在此我要衷心的對老師說聲謝謝。在她的熱心指導下,我學到的不僅僅是知識,還有做人上的嚴謹、獨立,用科學的頭腦武裝自己。</p><p> 回首大學四年的時光,我要感謝那些幫助過我的人,也要感謝那些傷害過我的人,是他們讓我對自我有了更為清醒的認
72、識,不再沉醉于自我滿足之中,這又何嘗不是這一種收獲呢。其實,最應該感謝的還是自己,因為路是自己走出來的,有美景,也有荊棘,但重要的是,我會以更加穩(wěn)健的步伐,朝著未來勇敢的走下去。</p><p> 反思這一階段,體會最深的一點就是,編程就是要有清晰的思路,這樣編起來才有目的性,思維的不靈活導致有很多本該輕松理解的東西走了彎路,這并不是我理想中的狀態(tài)。硬件也好,軟件也罷,都需要系統(tǒng)的理論知識的支撐。徒有皮毛而不深
73、入是不行的,只有有科學理性的方法去對待,遇到問題能鎮(zhèn)定的去沿著正確的軌道去思考進而解決問題是在今后的學習和工作中要時常提醒自己的,這也是畢設給我?guī)淼淖畲笫斋@。感謝我敬愛的老師給我這次機會。</p><p><b> 附 錄</b></p><p> 從畢設中得到了一些課外新知識,虛擬機不能用真機自帶的攝像頭。這也是我畢設中遇到的最棘手的問題,我最后的解決方法
74、是給虛擬機安裝USB然后外置一個攝像頭,這樣才把問題解決了。我認為這是一個很有價值的知識點,所有我把它記錄在這里。</p><p> 以下是本設計的完整代碼: </p><p> import time</p><p> list2=[] #定義一個空列表</p><p> cam=highgui.cvCreateCameraCa
75、pture(2) #定義攝像頭端口位置</p><p> while True:</p><p> im=highgui.cvQueryFrame(cam) </p><p> tn1=opencv.adaptors.Ipl2PIL(im) #采集到的圖像定義位tn1</p><p> tn1=tn1.r
76、esize((160,160)) #重新設置采集到的圖像的大小</p><p> size1=tn1.size #將重新設置的圖像的大小值定義位size1</p><p> pbb=tn1.load() #加載重新設置大小后的圖像tn1</p><p><
77、;b> c=0</b></p><p> d=0 #定義位置初值c:橫坐標,d:縱坐標</p><p> e=0 ; #定義紅點的初始值為0</p><p> for i in range(size1[0]):<
78、;/p><p> for j in range(size1[1]): #遍歷圖像中的每個像素點</p><p> if pbb[i,j][0]>100 and pbb[i,j][0]>2*pbb[i,j][1] and pbb[i,j][0]>2*pbb[i,j][2]:#定義動作的參照物,這里我將它定義為'紅點'</p>&
79、lt;p><b> c+=i</b></p><p> d+=j #如果該像素點符合我們所定義的紅點的特征,則將此位置加到橫縱坐標上?</p><p> e+=1 #同時像素點數(shù)加1(可求出我們采集到的這張圖片中所有的紅點數(shù))</p><p>
80、 #print '-----------------------------------------',e#如果紅點數(shù)大于70個</p><p> if e>70: #如果紅點數(shù)大于70個</p><p> list2.append((c/e,d/e)) #將橫縱坐標的平均值加入先前定義的空列
81、表中?</p><p> m=(160-list2[-1][0])*1280/140-100 #鼠標移動</p><p> n=list2[-1][1]*1024/140-100 # </p><p> # print m,n</p><p> os.system('./fake-mouse-move.x 0
82、' + str(m) + ' ' + str(n))#引入用C語言編寫的程序</p><p> #if len(list2)>20: #如果列表中坐標個數(shù)大于20個</p><p> if len(list2) > 20:</p><p> tn3=list2[-1][0]-list2
83、[0][0] #將橫坐標的長度賦值給tn3 </p><p> tn4=list2[-1][1]-list2[0][1] #將縱坐標的長度賦值給tn4</p><p> while len(list2)>3: #</p><p> list2.pop(0)</p><p> #p
84、rint '..........................',tn3</p><p> #print tn4</p><p> if tn4>50 and tn3>-50 and tn3<50:</p><p> os.system('./a.x 71')</p><p> if
85、 tn4<-50 and tn3>-50 and tn3<50:</p><p> os.system('./a.x 9')</p><p> if tn3<-100:</p><p> os.system('./a.x 114')</p><p> #print '[r
86、ight]'</p><p> #time.sleep(0.8)</p><p> if tn3>100:</p><p> os.system('./a.x 113')</p><p> #print '[left]'</p><p> #time.sleep(
87、0.8)</p><p> elif len(list2)>1:</p><p> tn3=list2[-1][0]-list2[0][0]</p><p> tn4=list2[-1][1]-list2[0][1]</p><p><b> list2=[]</b></p><p>
88、; #print '...........................',tn3</p><p> #print tn4</p><p> if tn4>50 and tn3<50 and tn3>-50:</p><p> os.system('./a.x 71')</p><p&g
89、t; if tn4<-50 and tn3<50 and tn3>-50:</p><p> os.system('./a.x 9')</p><p> if tn3<-100:</p><p> os.system('./a.x 114')</p><p> #print &
90、#39;[right]'</p><p> #time.sleep(0.8)</p><p> if tn3>100:</p><p> os.system('./a.x 113')</p><p> #print '[left]'</p><p> #time.
91、sleep(0.8)</p><p><b> del tn1</b></p><p><b> del pbb</b></p><p><b> del im</b></p><p><b> del c</b></p><p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設計--基于python開發(fā)的圖像采集器之airppt
- can數(shù)據(jù)采集器設計【畢業(yè)論文】
- 2017畢業(yè)論文-基于fpga的多路信號采集器設計
- 身份證智能采集器設計-畢業(yè)論文
- 基于單片機的usb數(shù)據(jù)采集器設計【畢業(yè)論文】
- 土壤溫濕度采集器 【畢業(yè)論文】
- 基于ARM的農田圖像采集器設計.pdf
- 軟件工程畢業(yè)論文-基于python的博客設計與開發(fā)
- 無線溫度采集器畢業(yè)設計
- 建筑能耗數(shù)據(jù)采集器的設計與開發(fā).pdf
- 基于fpga的多路數(shù)據(jù)采集器設計
- 基于FPGA的WEBGIS數(shù)據(jù)采集器設計.pdf
- 電氣工程與自動化畢業(yè)論文船廠電能數(shù)據(jù)采集器的設計
- 畢業(yè)論文--基于dspbios的圖像采集處理平臺軟件設計
- 基于usb2.0和labwindowscvi的數(shù)據(jù)采集器開發(fā)
- 畢業(yè)論文--基于dspbios的圖像采集處理平臺軟件設計
- 電梯遠程監(jiān)控系統(tǒng)數(shù)據(jù)采集器硬件設計開發(fā)
- 便攜式圖像采集器研制.pdf
- 基于arm的溫度采集器課程設計
- 基于掌上電腦的GPS數(shù)據(jù)采集器的開發(fā).pdf
評論
0/150
提交評論