




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、詳細設計文檔疲勞駕駛檢測系統詳細設計說明書2015年3月13日i詳細設計文檔目錄1. 弓I言21.1編寫目的21.2背景31.3定義31.4參考資料31. 程序系統的結構42. 詳細設計63.1程序簡單描述63.2整體結構73.3性能73.4輸入輸出項73.5算法73.5.1人臉檢測算法73.5.2 OTUS最佳閾值圖像分割法83.5.3 ROBERT CROSS邊緣檢測93.6主要類的說明以及XML配置文件93.7存儲分配143.8注釋143.9測試計劃143.10尚未解決的問題141. 引言1.1 編寫目的此說明書在概要 設計的基礎上,對基于人眼的疲勞檢測終端各個模塊,程序分別進 行了實現
2、層面上的要求和說明。在以下的詳細設計報告 中將對在本階段中隊系統所做的所有詳細設計進行說明。主要工作包括:根據軟件需求說明書所描述的數據,功能,運行,性能,需求,并依 照概要設計說明書所確定的處理流程、總體設計、軟件系統的結構設計,逐個模塊的程序描述(包括各模塊的功能、性能、輸 入、輸出、算法、程序邏輯、接口等)。軟件開發小組的產品實現成員應該閱讀和參考此說明書,從而進行 代碼的編寫,測試。1.2 背景說明:A、待開發系統的名 稱:不規范駕駛檢測系統B、開發者:孫艷強 陳浩 倪四飛用戶:駕駛員或 者是汽車廠商以及交通管理部門C、項目開發背景:學生工程實踐選題1.3 定義1、an droid-o
3、pe ncv這是一個在an droid操作系統上的 Ope ncv開源庫,本系統的開發中用到了該庫,加快了開發的效率,降低了開發成本。2、系統:待開發的不規范駕駛檢測系統1.4 參考資料軟件工程概論軟件文檔編寫android應用程序設計java基礎ope ncv教程an dorid-ope ncv手冊一網頁版2. 程序系統的結構本待開發的系統 采用的軟件層次框圖如下圖所示:在前期的方案確定的時候,采用的是基于an droid操作系統的Ope ncV開源庫,因此只需要將編譯好的Ope nCV庫導入到開發環境中 即可進行開發,因此本系統的主要開發工作集中在應用程序的設計部分。在項目的概要設 計中,
4、確定的具體的軟件的主流程方案如下圖所示。開始沒達到V 有攝像頭獲取一幀圖像圖像預處理人臉定位人眼和嘴巴定位狀態分析計數超出閾值給予警示結束9在人眼狀態的判 斷過程中具體的步驟如下圖所示3. 詳細設計為了完成系統所需要的功能,我們設計了一個類來實現:FdActivity說明如下:FdActivity :該類是作為程序的主界面類,在該類中,將 surfaceview占據了整個界面,在該類中主要重寫了on Create()on Pause()、on Destroy。 、onCameraViewStarted()、on CameraViewStopped()、onCameraFrame()、on Cr
5、eateOptio nsMe nu()、onOptionsltemSelected()函數具體的分析 參見程序的具體描述部分;onCameraFrame()函數:在系統實時監測駕駛員的頭像數據的時候,需 要顯示當前的幀率,該類就是負責幀率的顯示的類,該類中,主要是實現了以下的幾個功能:從一幀圖片中計算人眼的區域繪制人眼的區域3.1 程序簡單描述打開攝像頭,實時采集臉部的幀數據,圖像進行灰度變化,首先進行預處理,將背景 噪聲以及圖像中的突刺變化去除,防止影響后面的圖形 計算精度;利用Opencv中的已有函數接口進行人臉和人眼的定位,在將人眼的輪廓提 取出來,這里面的用的方法:Otus和Rober
6、t Cross邊緣檢測。利用最大 垂直距離進行是否閉合的判定,組后再利用 PERCLOS 原理進行疲勞狀 態的判斷。3.2 整體結構見概要設計說明書3.3 性能實時性:能基本實現實時性的要求對人臉的判斷準確度:95%以上眼睛的判斷準確 度:90%以上疲勞識別:80%以上3.4 輸入輸出項輸入的數據是:攝像頭采集的實時數據輸出是:預警聲音3.5 算法3.5.1人臉檢測算法傳統的檢測人臉分方法有很多種:基于膚色的分離、基于統計模型、 或者是PCA方法,但是這些方法識別的時間較長,并且準確率不高,在 本文中,采用的 是OpenCV中非常成功的基于Haar-Like特征的 Adaboost算法。人臉檢
7、測分成兩步:首先是訓練過程產生分類器文件, 再是利用分類器 進行人臉檢測過程。訓練過程:(1)準備正負樣本, 正樣本是需要檢測的目標(正臉),負羊本是不含正樣本特征的任何目標;(2)利用CreatSample程序準備正樣本集;(3)利用Haar-Training程序 訓練得到分類器 特征xml文件。檢測過程:利用android-OpenCV中的分 類器構建函數去 加載該特征xml文件,利用分類器本身的成員函數4,5: detectMultiScale(Mat image, List objects, double scaleFactor, int mi nN eighbors, i nt fl
8、ags, Size mi nSize對指定的 image 進行檢測。其函數各 參數的意義:Image:需要進行目標檢測的區域.Object:將檢測到的目標標記在矩形框中.scaleFactor代表圖像的縮放因子.Minneighbors:指定每個候選矩陣至少包含的鄰近元素個數.Flag:標志位,默認為0.Min size :最小的檢測窗口,如果該值設置過小,將會導致圖像的計 算量較大。3.5.2 Otus最佳閾值圖像分割法當系統成功標記 處人眼部的區域后,需要進行二值化處理,從而實 現眼部提取。但 是由于圖像的灰度值對光線很敏感,固定的閾值勢必無 法滿足要求,本 文采用的是基于Otsu算法的二
9、值化處理。Otsu算法,又被稱為最大類間法,是一種自適應的圖像分割技術, 它是根據最小二 乘原理推導出來的,根據光線強度的不同,閾值會隨之 變化,能得到最優的閾值,其基本原理如下:將 直方圖在某一閾值進 行 分割成兩組,稱為“前景”和“背景”,當被分成的兩組的方差最大時候,該閾值就是最佳分割閾值。方差是灰度均勻分布的一種度量,值越大,說明構成圖像兩部分的差別越大,當部分“前景”錯分為“背景” 或者“背景”錯分為“前景”的時候,都會導致方差變小,因此最大類 間法意味著錯分的概率最小。對于圖像直方圖,不妨假設其灰度級為 0m,像素點個數為N,針對某一個分割閾值t,那么整個圖像被分割成 兩部分,0t
10、稱為“前景”,而t+1m稱為“背景”。“前景”的權重 為 Wf,均值設為Mf,方差為Df, “背景”的權重為 Wb,均值設為 Mb, 方差為Db。圖像的整體的方差公式如式3所式。D W*Df W* Db(3)Otsu的最終目的就是要求出D的最大值來,從而得到最優的分割閾 值。3.5.3 Robert Cross 邊緣檢測邊緣是圖像灰度 值變化劇烈的位置,因此包含了大量的有用信息, 常用的邊緣檢測 包含很多,比如:Robert Cross邊緣檢測,Canny邊緣檢 測,Prewitt邊緣檢測,Sobel檢測。但是這些方法中唯有 Robert Cross計 算方便簡單、快速,容易在實時系統中實現,
11、本系統中采用的就是該檢 測方法,根據任 意一對互相垂直方向上像素點的差分來計算梯度的原理詳細設計文檔【8,9】,采用對角線方向相鄰像素灰度差。如式4所示:G(i,j) = |f(i, j)-f(i +1,j + 1)| +|f(i +1,j)-f(i, j + 1)l(G代表的是計算之后的灰度值,而f代表的是原始圖像的灰度值。雖然Robert檢測速度很快,但是其缺點也是很明顯的,對噪聲敏感,并且邊 緣不是很光滑。3.6 主要類的說明以及xml配置文件在上面的概述中,我們初步說明了在該系統的實現過程中需要實現的 幾個類。在這里 我們詳細的說明。/思路:詳細寫出每個類的每個函數接口的作用以及用法F
12、dActivity :繼承Activity,實現了整個應用程序的界面,在該類中主要是定義了兩個菜單選項,分別是mltemFace50, mltemFace40,這是選擇 圖像的范圍的兩 個選項,分別對應著50%和40%。重寫on Create函數,將fdview作為界面加載的部分。重寫onCreateOptionsMenu()函數,將兩個菜單選項加入到菜單中;重寫onOptionsItemSelected函數,當在屏幕上點擊對應的item時,將會 自動進行item的選擇;In it函數接口是用來進行幀率計算的初始化函數,在該函數中主要實現獲取當前的時間-getTickFrequency,以及初
13、始化繪制的文字的顏色信 息(blue)以及大小(50)Measure。函數是計算幀率的主要函數,獲得當前的時間,減去在init函數中的初始時間,獲得這段圖像處理的時間,幀率的計算如下:double fps = step* freq / (time - prevFrameTime)再將其按照固定 的格式進行輸出:DecimalFormat(0.00);Draw函數:就是指在畫布上進行繪制的函數:canvas.drawText(strfps,20 + offsetx, 10 + 50+ offsety, paint)抽象基類MyCvViewBase的設計:這個類主要是為了下面的的具體的fdview
14、類服務的,在該類中,我們是實現了 surfaceholder.callback的接口以及run able接口,這樣該類就可以作為一個單 獨的線程去運行了,從而實現了多線程的功能。在該類的構造函 數MyCvViewBase中,我們需 要獲得holder,添加callback 接口,進行 FpsMeter的構建。因為是實現了 surfaceholder.callback的接口,因此需要重寫三個函數,分別是 surfacecreated surfacechanged surfacedestroyed三個函數中分別要實現的功能:Surfacecreated(這個是在surface剛建立的時候就調 用回
15、調函數,在這個函數中,我們需要打開攝像頭,在Android-OpenCV中,打開攝像頭的接口的函數為 mCamera二VideoCapture(ighgui.CV_CAP_ANDROID),檢查是否打開,如 果已經打開了,那么如下安排:(new Thread(this).start();否則的話直接release掉 camaraSurfacechaged ()函數,是在surfacecreated回調之后進行第一次調用,在這里我們主要是獲得攝像頭支持的size,然后我們不斷選擇最優 的預覽size,(這部分代碼是在網上參 考的)。將camara的設置成為: mCamera.set(Highgu
16、i.CV_CAP_PROP_FRAME_WIDTH, mFrameWidth);mCamera.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, mFrameHeight);surfaceDestroyed(回調函數,就是當surface消失的時候進行回調的, 因此,這里面我 們需要做一些資源的釋放的操作,比如說 camera釋放。作為抽象的基類,我們為子類提供的接口是:protectedabstractBitmap processFrame(intflag, VideoCapture capture);該接口在子類中進行圖像處理時詳細的設計。(參見Fdview設計)
17、我們在該抽象基類中實現了 runnable接口,因此還需要實現run函數; 首先需要完成對 計量幀率的對象的初始化工作。下面的就是不斷 的while循環,進行圖像的處理工作:首先從攝像頭中回去實時的數據幀,該部分的接口是:mCamera.grab(),mCameras是上面打開的攝像頭然后進行圖像的處理processFrame返回bmp對象,進行幀率的計量,鎖住畫布-mHolder.lockCanvas(),進行 繪畫,解鎖畫布。Bmp圖像的回收Fdview類的設計:該類主要是繼承了抽象基類MyCvViewBase ,因此主要在這一部分中, 需要實現的接口函數,protectedBitmap
18、processFrame(inflag, VideoCapture capture)構造函數中需要實現的是:獲取xml文件資源context.getResources(). openRawResource(R.raw.haarcascade_frontalface_aUt行 xml 文件的讀寫, 利用該xml文件進行分類器對象的初始化,分類器對象在OpenCV中是實現目標檢測的對象,是由特征文件xml進行構造的。在該軟件中 需要定位人臉,人嘴和人眼,因此需要以下幾個xml文件,分別是:haarcascade_fr on talface_alt.xm以 及haarcascade_mcs_mout
19、h.xml haarcascade_righteye_2splits.xml haarcascade_lefteye_2splits.xml文件,識別率高達95%以上,是OpenCV中自帶的已經訓練好的分類器特征文件。重寫surfacechanged(函數,主要是初始化了 mat數據,mat可以看成是二維的保存圖像的矩陣,是OpenCV中自帶的數據格式。實現processFrame接口函數,在該部分主要是關于圖像處理的接口函數,是整個軟件的核心函數:首先是解析出攝 像頭的RGB以及灰度圖像格式:capture.retrieve(mRgba,Highgui.CV_CAP_ANDROID_COLO
20、R_FRAME_RGBA); capture.retrieve(mGray,Highgui.CV_CAP_ANDROID_GREY_FRAME);進行預處理過程:主要是進行直方圖的均衡化過程,OpenCV自帶接口: lmgproc.equalizeHist();利用OpenCV中自帶的目標識別的函數 mCascade.detectMultiScale說明:mCascade是人臉的分類器對象進行圖像中目標的檢測,我們首先 需要定位到人臉部,并且將人臉在圖像中標記出來。(綠色的標記)如果人臉不是空的,那么開始將人臉設置成為感興趣區域,在該區域中進行人眼的檢 測,同羊的還是有eyedectcade.
21、detectMultiScale()說明:eyedetectcade是人眼的分類器對象,如果眼睛找到了,我們將其中 一只眼睛標記出來,用來進行圖像處理,因為基本而言,人眼都是堆對 稱的,一只眼睛的狀態可以代表人眼目前的狀態,將該區域進行 Otsu二值化處理,以及Robert Cross或者是canny邊緣檢測來提取人眼的輪廓, canny在OpenCV中已經有固定的接口,而 Otsu和Robert Cross檢測需要自己去實現。子啊利用最大的垂直距離進行掃描,當最大的垂直距離 小于40%的標記高度的時候判斷是閉合狀態。附上關于Otsu以及Robert Cross邊緣檢測的代碼:public M
22、at Robert(Mat mat) /robert cross 邊緣檢測代碼 int robbertNum = 0;introw = mat.rows();intcol = mat.cols();for (int i = 1; i row - 1;i+)for (int j = 1; j 50) mat.put(i, j, 255); else mat.put(i, j, 0);mat; return public int Otsu(Mat mat) /Otsu 算法實現: int histData = new int 256;for (int i = 0; i 256;i+) histDatai = 0; / 初始化為 0值int total = mat.cols() * mat.rows();for (int i = 0; i mat.rows(); i+) for (int j = 0; j mat.cols(); j+) i6int temp = (int ) mat.get(i, j)0;histDatatemp+;double sum = 0;for (int t = 0; t 256; t+) sum += t * histDatat; double sumF = 0;int WB= 0;int WF
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 篷布行業人才培養規劃考核試卷
- 海洋油氣開采海域使用權管理考核試卷
- 礦山開采對生物多樣性影響考核試卷
- 起點初三語文作文
- 液壓系統在金屬加工中的應用考核試卷
- 球類制造技術與材料創新考核試卷
- 禮儀用品行業發展趨勢預測考核試卷
- 蘭州資源環境職業技術大學《藥物合成原理》2023-2024學年第二學期期末試卷
- 江蘇省大豐市劉莊鎮三圩初級中學2024-2025學年初三下學期5月學情調研考試化學試題試卷含解析
- 遼寧商貿職業學院《程序可信分析與構造》2023-2024學年第二學期期末試卷
- 2022年電力電纜頭制作施工方案【完整版】
- 基于STM32的光照控制系統設計
- 北京山區農機化發展的對策研究
- 有限空間現場作業安全檢查表(現場檢查)
- 1、防止人身傷亡事故檢查表
- 環境信息系統的GIS基礎 03講 空間數據模型
- 德語字母讀音表
- 國際創傷生命支持創傷評估步驟與治療決策樹-Microsoft-Office-Word-文檔
- GB/T 8766-2013單水氫氧化鋰
- GB/T 2792-1998壓敏膠粘帶180°剝離強度試驗方法
- GB/T 15292-1994晶閘管測試方法逆導三極晶閘管
評論
0/150
提交評論