




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、詳細(xì)設(shè)計(jì)文檔疲勞駕駛檢測(cè)系統(tǒng)詳細(xì)設(shè)計(jì)說明書2015年3月13日i詳細(xì)設(shè)計(jì)文檔目錄1. 弓I言21.1編寫目的21.2背景31.3定義31.4參考資料31. 程序系統(tǒng)的結(jié)構(gòu)42. 詳細(xì)設(shè)計(jì)63.1程序簡(jiǎn)單描述63.2整體結(jié)構(gòu)73.3性能73.4輸入輸出項(xiàng)73.5算法73.5.1人臉檢測(cè)算法73.5.2 OTUS最佳閾值圖像分割法83.5.3 ROBERT CROSS邊緣檢測(cè)93.6主要類的說明以及XML配置文件93.7存儲(chǔ)分配143.8注釋143.9測(cè)試計(jì)劃143.10尚未解決的問題141. 引言1.1 編寫目的此說明書在概要 設(shè)計(jì)的基礎(chǔ)上,對(duì)基于人眼的疲勞檢測(cè)終端各個(gè)模塊,程序分別進(jìn) 行了實(shí)現(xiàn)
2、層面上的要求和說明。在以下的詳細(xì)設(shè)計(jì)報(bào)告 中將對(duì)在本階段中隊(duì)系統(tǒng)所做的所有詳細(xì)設(shè)計(jì)進(jìn)行說明。主要工作包括:根據(jù)軟件需求說明書所描述的數(shù)據(jù),功能,運(yùn)行,性能,需求,并依 照概要設(shè)計(jì)說明書所確定的處理流程、總體設(shè)計(jì)、軟件系統(tǒng)的結(jié)構(gòu)設(shè)計(jì),逐個(gè)模塊的程序描述(包括各模塊的功能、性能、輸 入、輸出、算法、程序邏輯、接口等)。軟件開發(fā)小組的產(chǎn)品實(shí)現(xiàn)成員應(yīng)該閱讀和參考此說明書,從而進(jìn)行 代碼的編寫,測(cè)試。1.2 背景說明:A、待開發(fā)系統(tǒng)的名 稱:不規(guī)范駕駛檢測(cè)系統(tǒng)B、開發(fā)者:孫艷強(qiáng) 陳浩 倪四飛用戶:駕駛員或 者是汽車廠商以及交通管理部門C、項(xiàng)目開發(fā)背景:學(xué)生工程實(shí)踐選題1.3 定義1、an droid-o
3、pe ncv這是一個(gè)在an droid操作系統(tǒng)上的 Ope ncv開源庫(kù),本系統(tǒng)的開發(fā)中用到了該庫(kù),加快了開發(fā)的效率,降低了開發(fā)成本。2、系統(tǒng):待開發(fā)的不規(guī)范駕駛檢測(cè)系統(tǒng)1.4 參考資料軟件工程概論軟件文檔編寫android應(yīng)用程序設(shè)計(jì)java基礎(chǔ)ope ncv教程an dorid-ope ncv手冊(cè)一網(wǎng)頁(yè)版2. 程序系統(tǒng)的結(jié)構(gòu)本待開發(fā)的系統(tǒng) 采用的軟件層次框圖如下圖所示:在前期的方案確定的時(shí)候,采用的是基于an droid操作系統(tǒng)的Ope ncV開源庫(kù),因此只需要將編譯好的Ope nCV庫(kù)導(dǎo)入到開發(fā)環(huán)境中 即可進(jìn)行開發(fā),因此本系統(tǒng)的主要開發(fā)工作集中在應(yīng)用程序的設(shè)計(jì)部分。在項(xiàng)目的概要設(shè) 計(jì)中,
4、確定的具體的軟件的主流程方案如下圖所示。開始沒達(dá)到V 有攝像頭獲取一幀圖像圖像預(yù)處理人臉定位人眼和嘴巴定位狀態(tài)分析計(jì)數(shù)超出閾值給予警示結(jié)束9在人眼狀態(tài)的判 斷過程中具體的步驟如下圖所示3. 詳細(xì)設(shè)計(jì)為了完成系統(tǒng)所需要的功能,我們?cè)O(shè)計(jì)了一個(gè)類來實(shí)現(xiàn):FdActivity說明如下:FdActivity :該類是作為程序的主界面類,在該類中,將 surfaceview占據(jù)了整個(gè)界面,在該類中主要重寫了on Create()on Pause()、on Destroy。 、onCameraViewStarted()、on CameraViewStopped()、onCameraFrame()、on Cr
5、eateOptio nsMe nu()、onOptionsltemSelected()函數(shù)具體的分析 參見程序的具體描述部分;onCameraFrame()函數(shù):在系統(tǒng)實(shí)時(shí)監(jiān)測(cè)駕駛員的頭像數(shù)據(jù)的時(shí)候,需 要顯示當(dāng)前的幀率,該類就是負(fù)責(zé)幀率的顯示的類,該類中,主要是實(shí)現(xiàn)了以下的幾個(gè)功能:從一幀圖片中計(jì)算人眼的區(qū)域繪制人眼的區(qū)域3.1 程序簡(jiǎn)單描述打開攝像頭,實(shí)時(shí)采集臉部的幀數(shù)據(jù),圖像進(jìn)行灰度變化,首先進(jìn)行預(yù)處理,將背景 噪聲以及圖像中的突刺變化去除,防止影響后面的圖形 計(jì)算精度;利用Opencv中的已有函數(shù)接口進(jìn)行人臉和人眼的定位,在將人眼的輪廓提 取出來,這里面的用的方法:Otus和Rober
6、t Cross邊緣檢測(cè)。利用最大 垂直距離進(jìn)行是否閉合的判定,組后再利用 PERCLOS 原理進(jìn)行疲勞狀 態(tài)的判斷。3.2 整體結(jié)構(gòu)見概要設(shè)計(jì)說明書3.3 性能實(shí)時(shí)性:能基本實(shí)現(xiàn)實(shí)時(shí)性的要求對(duì)人臉的判斷準(zhǔn)確度:95%以上眼睛的判斷準(zhǔn)確 度:90%以上疲勞識(shí)別:80%以上3.4 輸入輸出項(xiàng)輸入的數(shù)據(jù)是:攝像頭采集的實(shí)時(shí)數(shù)據(jù)輸出是:預(yù)警聲音3.5 算法3.5.1人臉檢測(cè)算法傳統(tǒng)的檢測(cè)人臉分方法有很多種:基于膚色的分離、基于統(tǒng)計(jì)模型、 或者是PCA方法,但是這些方法識(shí)別的時(shí)間較長(zhǎng),并且準(zhǔn)確率不高,在 本文中,采用的 是OpenCV中非常成功的基于Haar-Like特征的 Adaboost算法。人臉檢
7、測(cè)分成兩步:首先是訓(xùn)練過程產(chǎn)生分類器文件, 再是利用分類器 進(jìn)行人臉檢測(cè)過程。訓(xùn)練過程:(1)準(zhǔn)備正負(fù)樣本, 正樣本是需要檢測(cè)的目標(biāo)(正臉),負(fù)羊本是不含正樣本特征的任何目標(biāo);(2)利用CreatSample程序準(zhǔn)備正樣本集;(3)利用Haar-Training程序 訓(xùn)練得到分類器 特征xml文件。檢測(cè)過程:利用android-OpenCV中的分 類器構(gòu)建函數(shù)去 加載該特征xml文件,利用分類器本身的成員函數(shù)4,5: detectMultiScale(Mat image, List objects, double scaleFactor, int mi nN eighbors, i nt fl
8、ags, Size mi nSize對(duì)指定的 image 進(jìn)行檢測(cè)。其函數(shù)各 參數(shù)的意義:Image:需要進(jìn)行目標(biāo)檢測(cè)的區(qū)域.Object:將檢測(cè)到的目標(biāo)標(biāo)記在矩形框中.scaleFactor代表圖像的縮放因子.Minneighbors:指定每個(gè)候選矩陣至少包含的鄰近元素個(gè)數(shù).Flag:標(biāo)志位,默認(rèn)為0.Min size :最小的檢測(cè)窗口,如果該值設(shè)置過小,將會(huì)導(dǎo)致圖像的計(jì) 算量較大。3.5.2 Otus最佳閾值圖像分割法當(dāng)系統(tǒng)成功標(biāo)記 處人眼部的區(qū)域后,需要進(jìn)行二值化處理,從而實(shí) 現(xiàn)眼部提取。但 是由于圖像的灰度值對(duì)光線很敏感,固定的閾值勢(shì)必?zé)o 法滿足要求,本 文采用的是基于Otsu算法的二
9、值化處理。Otsu算法,又被稱為最大類間法,是一種自適應(yīng)的圖像分割技術(shù), 它是根據(jù)最小二 乘原理推導(dǎo)出來的,根據(jù)光線強(qiáng)度的不同,閾值會(huì)隨之 變化,能得到最優(yōu)的閾值,其基本原理如下:將 直方圖在某一閾值進(jìn) 行 分割成兩組,稱為“前景”和“背景”,當(dāng)被分成的兩組的方差最大時(shí)候,該閾值就是最佳分割閾值。方差是灰度均勻分布的一種度量,值越大,說明構(gòu)成圖像兩部分的差別越大,當(dāng)部分“前景”錯(cuò)分為“背景” 或者“背景”錯(cuò)分為“前景”的時(shí)候,都會(huì)導(dǎo)致方差變小,因此最大類 間法意味著錯(cuò)分的概率最小。對(duì)于圖像直方圖,不妨假設(shè)其灰度級(jí)為 0m,像素點(diǎn)個(gè)數(shù)為N,針對(duì)某一個(gè)分割閾值t,那么整個(gè)圖像被分割成 兩部分,0t
10、稱為“前景”,而t+1m稱為“背景”?!扒熬啊钡臋?quán)重 為 Wf,均值設(shè)為Mf,方差為Df, “背景”的權(quán)重為 Wb,均值設(shè)為 Mb, 方差為Db。圖像的整體的方差公式如式3所式。D W*Df W* Db(3)Otsu的最終目的就是要求出D的最大值來,從而得到最優(yōu)的分割閾 值。3.5.3 Robert Cross 邊緣檢測(cè)邊緣是圖像灰度 值變化劇烈的位置,因此包含了大量的有用信息, 常用的邊緣檢測(cè) 包含很多,比如:Robert Cross邊緣檢測(cè),Canny邊緣檢 測(cè),Prewitt邊緣檢測(cè),Sobel檢測(cè)。但是這些方法中唯有 Robert Cross計(jì) 算方便簡(jiǎn)單、快速,容易在實(shí)時(shí)系統(tǒng)中實(shí)現(xiàn),
11、本系統(tǒng)中采用的就是該檢 測(cè)方法,根據(jù)任 意一對(duì)互相垂直方向上像素點(diǎn)的差分來計(jì)算梯度的原理詳細(xì)設(shè)計(jì)文檔【8,9】,采用對(duì)角線方向相鄰像素灰度差。如式4所示:G(i,j) = |f(i, j)-f(i +1,j + 1)| +|f(i +1,j)-f(i, j + 1)l(G代表的是計(jì)算之后的灰度值,而f代表的是原始圖像的灰度值。雖然Robert檢測(cè)速度很快,但是其缺點(diǎn)也是很明顯的,對(duì)噪聲敏感,并且邊 緣不是很光滑。3.6 主要類的說明以及xml配置文件在上面的概述中,我們初步說明了在該系統(tǒng)的實(shí)現(xiàn)過程中需要實(shí)現(xiàn)的 幾個(gè)類。在這里 我們?cè)敿?xì)的說明。/思路:詳細(xì)寫出每個(gè)類的每個(gè)函數(shù)接口的作用以及用法F
12、dActivity :繼承Activity,實(shí)現(xiàn)了整個(gè)應(yīng)用程序的界面,在該類中主要是定義了兩個(gè)菜單選項(xiàng),分別是mltemFace50, mltemFace40,這是選擇 圖像的范圍的兩 個(gè)選項(xiàng),分別對(duì)應(yīng)著50%和40%。重寫on Create函數(shù),將fdview作為界面加載的部分。重寫onCreateOptionsMenu()函數(shù),將兩個(gè)菜單選項(xiàng)加入到菜單中;重寫onOptionsItemSelected函數(shù),當(dāng)在屏幕上點(diǎn)擊對(duì)應(yīng)的item時(shí),將會(huì) 自動(dòng)進(jìn)行item的選擇;In it函數(shù)接口是用來進(jìn)行幀率計(jì)算的初始化函數(shù),在該函數(shù)中主要實(shí)現(xiàn)獲取當(dāng)前的時(shí)間-getTickFrequency,以及初
13、始化繪制的文字的顏色信 息(blue)以及大小(50)Measure。函數(shù)是計(jì)算幀率的主要函數(shù),獲得當(dāng)前的時(shí)間,減去在init函數(shù)中的初始時(shí)間,獲得這段圖像處理的時(shí)間,幀率的計(jì)算如下:double fps = step* freq / (time - prevFrameTime)再將其按照固定 的格式進(jìn)行輸出:DecimalFormat(0.00);Draw函數(shù):就是指在畫布上進(jìn)行繪制的函數(shù):canvas.drawText(strfps,20 + offsetx, 10 + 50+ offsety, paint)抽象基類MyCvViewBase的設(shè)計(jì):這個(gè)類主要是為了下面的的具體的fdview
14、類服務(wù)的,在該類中,我們是實(shí)現(xiàn)了 surfaceholder.callback的接口以及run able接口,這樣該類就可以作為一個(gè)單 獨(dú)的線程去運(yùn)行了,從而實(shí)現(xiàn)了多線程的功能。在該類的構(gòu)造函 數(shù)MyCvViewBase中,我們需 要獲得holder,添加callback 接口,進(jìn)行 FpsMeter的構(gòu)建。因?yàn)槭菍?shí)現(xiàn)了 surfaceholder.callback的接口,因此需要重寫三個(gè)函數(shù),分別是 surfacecreated surfacechanged surfacedestroyed三個(gè)函數(shù)中分別要實(shí)現(xiàn)的功能:Surfacecreated(這個(gè)是在surface剛建立的時(shí)候就調(diào) 用回
15、調(diào)函數(shù),在這個(gè)函數(shù)中,我們需要打開攝像頭,在Android-OpenCV中,打開攝像頭的接口的函數(shù)為 mCamera二VideoCapture(ighgui.CV_CAP_ANDROID),檢查是否打開,如 果已經(jīng)打開了,那么如下安排:(new Thread(this).start();否則的話直接release掉 camaraSurfacechaged ()函數(shù),是在surfacecreated回調(diào)之后進(jìn)行第一次調(diào)用,在這里我們主要是獲得攝像頭支持的size,然后我們不斷選擇最優(yōu) 的預(yù)覽size,(這部分代碼是在網(wǎng)上參 考的)。將camara的設(shè)置成為: mCamera.set(Highgu
16、i.CV_CAP_PROP_FRAME_WIDTH, mFrameWidth);mCamera.set(Highgui.CV_CAP_PROP_FRAME_HEIGHT, mFrameHeight);surfaceDestroyed(回調(diào)函數(shù),就是當(dāng)surface消失的時(shí)候進(jìn)行回調(diào)的, 因此,這里面我 們需要做一些資源的釋放的操作,比如說 camera釋放。作為抽象的基類,我們?yōu)樽宇愄峁┑慕涌谑牵簆rotectedabstractBitmap processFrame(intflag, VideoCapture capture);該接口在子類中進(jìn)行圖像處理時(shí)詳細(xì)的設(shè)計(jì)。(參見Fdview設(shè)計(jì))
17、我們?cè)谠摮橄蠡愔袑?shí)現(xiàn)了 runnable接口,因此還需要實(shí)現(xiàn)run函數(shù); 首先需要完成對(duì) 計(jì)量幀率的對(duì)象的初始化工作。下面的就是不斷 的while循環(huán),進(jìn)行圖像的處理工作:首先從攝像頭中回去實(shí)時(shí)的數(shù)據(jù)幀,該部分的接口是:mCamera.grab(),mCameras是上面打開的攝像頭然后進(jìn)行圖像的處理processFrame返回bmp對(duì)象,進(jìn)行幀率的計(jì)量,鎖住畫布-mHolder.lockCanvas(),進(jìn)行 繪畫,解鎖畫布。Bmp圖像的回收Fdview類的設(shè)計(jì):該類主要是繼承了抽象基類MyCvViewBase ,因此主要在這一部分中, 需要實(shí)現(xiàn)的接口函數(shù),protectedBitmap
18、processFrame(inflag, VideoCapture capture)構(gòu)造函數(shù)中需要實(shí)現(xiàn)的是:獲取xml文件資源context.getResources(). openRawResource(R.raw.haarcascade_frontalface_aUt行 xml 文件的讀寫, 利用該xml文件進(jìn)行分類器對(duì)象的初始化,分類器對(duì)象在OpenCV中是實(shí)現(xiàn)目標(biāo)檢測(cè)的對(duì)象,是由特征文件xml進(jìn)行構(gòu)造的。在該軟件中 需要定位人臉,人嘴和人眼,因此需要以下幾個(gè)xml文件,分別是:haarcascade_fr on talface_alt.xm以 及haarcascade_mcs_mout
19、h.xml haarcascade_righteye_2splits.xml haarcascade_lefteye_2splits.xml文件,識(shí)別率高達(dá)95%以上,是OpenCV中自帶的已經(jīng)訓(xùn)練好的分類器特征文件。重寫surfacechanged(函數(shù),主要是初始化了 mat數(shù)據(jù),mat可以看成是二維的保存圖像的矩陣,是OpenCV中自帶的數(shù)據(jù)格式。實(shí)現(xiàn)processFrame接口函數(shù),在該部分主要是關(guān)于圖像處理的接口函數(shù),是整個(gè)軟件的核心函數(shù):首先是解析出攝 像頭的RGB以及灰度圖像格式:capture.retrieve(mRgba,Highgui.CV_CAP_ANDROID_COLO
20、R_FRAME_RGBA); capture.retrieve(mGray,Highgui.CV_CAP_ANDROID_GREY_FRAME);進(jìn)行預(yù)處理過程:主要是進(jìn)行直方圖的均衡化過程,OpenCV自帶接口: lmgproc.equalizeHist();利用OpenCV中自帶的目標(biāo)識(shí)別的函數(shù) mCascade.detectMultiScale說明:mCascade是人臉的分類器對(duì)象進(jìn)行圖像中目標(biāo)的檢測(cè),我們首先 需要定位到人臉部,并且將人臉在圖像中標(biāo)記出來。(綠色的標(biāo)記)如果人臉不是空的,那么開始將人臉設(shè)置成為感興趣區(qū)域,在該區(qū)域中進(jìn)行人眼的檢 測(cè),同羊的還是有eyedectcade.
21、detectMultiScale()說明:eyedetectcade是人眼的分類器對(duì)象,如果眼睛找到了,我們將其中 一只眼睛標(biāo)記出來,用來進(jìn)行圖像處理,因?yàn)榛径?,人眼都是堆?duì) 稱的,一只眼睛的狀態(tài)可以代表人眼目前的狀態(tài),將該區(qū)域進(jìn)行 Otsu二值化處理,以及Robert Cross或者是canny邊緣檢測(cè)來提取人眼的輪廓, canny在OpenCV中已經(jīng)有固定的接口,而 Otsu和Robert Cross檢測(cè)需要自己去實(shí)現(xiàn)。子啊利用最大的垂直距離進(jìn)行掃描,當(dāng)最大的垂直距離 小于40%的標(biāo)記高度的時(shí)候判斷是閉合狀態(tài)。附上關(guān)于Otsu以及Robert Cross邊緣檢測(cè)的代碼:public M
22、at Robert(Mat mat) /robert cross 邊緣檢測(cè)代碼 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 算法實(shí)現(xiàn): 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 彈簧研發(fā)助理崗位面試問題及答案
- 餐飲儲(chǔ)備干部崗位面試問題及答案
- 江蘇省宿遷市宿遷中學(xué)2025屆化學(xué)高一下期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)模擬試題含解析
- 大連育明中學(xué)2025年化學(xué)高一下期末統(tǒng)考試題含解析
- 河南省南陽(yáng)市第三高級(jí)中學(xué)校2025年高二下化學(xué)期末監(jiān)測(cè)試題含解析
- 河北省衡水市深州賈城西中學(xué)2025屆高一化學(xué)第二學(xué)期期末復(fù)習(xí)檢測(cè)試題含解析
- 國(guó)企采購(gòu)成本管理辦法
- 國(guó)農(nóng)以工代賑管理辦法
- 河南永州河道管理辦法
- 河堤流動(dòng)攤販管理辦法
- 人民調(diào)解文書規(guī)范制作
- 教育督導(dǎo)考試試題及答案
- 紅十字救護(hù)員培訓(xùn)
- 肩頸腰椎護(hù)理
- 2025-2030中國(guó)手工皂行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 眼科醫(yī)院感染制度與規(guī)程
- 透析病人營(yíng)養(yǎng)不良的護(hù)理
- T-CPUMT 025-2024 工業(yè)互聯(lián)網(wǎng)平臺(tái) 服務(wù)通.用要求
- 2025年度地質(zhì)勘探監(jiān)理服務(wù)合同范本
- 2025年上半年北京市西城區(qū)教委事業(yè)單位公開招聘考試筆試易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- RoHS知識(shí)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論