人臉檢測創(chuàng)新實驗結題書解讀_第1頁
人臉檢測創(chuàng)新實驗結題書解讀_第2頁
人臉檢測創(chuàng)新實驗結題書解讀_第3頁
人臉檢測創(chuàng)新實驗結題書解讀_第4頁
人臉檢測創(chuàng)新實驗結題書解讀_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、編號: 數(shù)學與計算科學學院創(chuàng)新性實驗結題報告書實驗題目: 單張照片人臉檢測 實驗成績(教師填寫): 學 院: 數(shù)學與計算科學學院 專 業(yè): 信息與計算科學 學生姓名: 韓尚穎 1200710218 小組成員: 覃啟霞 1200710211 指導教師: 王東 2014 年 07月 25日摘 要: 人臉檢測在計算機視覺領域是一個很基礎性技術,我們組使用了基于openCV的Viola-Jones分類算法的haar 分類器的剛性物體檢測技術;首先,需要使用openCV的createsamples()和haartraining()函數(shù)來訓練分類器,然后使用detect_and_draw()函數(shù)來進行人臉

2、的檢測和標記;本實驗是在windows環(huán)境下使用win32 API和VC實現(xiàn)了人臉檢測的基本功能。關鍵詞: 人臉檢測 openCV windows平臺 Viola-Jones分類算法 haar 分類器1、 實驗目的及主要創(chuàng)新性點:1、熟悉和掌握openCV(open source computer vision library開源的計算機視覺庫),并通過它提供的一些集成函數(shù)來實現(xiàn)對照片或視頻的處理;2、實現(xiàn)照片的人臉檢測,并且我們又加入了調用攝像頭或者現(xiàn)成的視頻文件進行人臉檢測;3、同時進一步掌握了VC和win32編程的技巧和方法。二、實驗要求:1、 實現(xiàn)單張照片的人臉檢測和標記;2、 熟悉怎

3、么使用Windows API函數(shù)設計窗口界面,實現(xiàn)人臉檢測功能;3、 了解Windows API 編程的方法與技能的; 4、 掌握VC和openCV的基礎知識;3、 實驗原理: 一.人臉檢測算法原理:Viola-Jones人臉檢測方法 該算法的主要特征: 1.提出積分圖像(integral image),從而可以快速計算Haar-like特征。 2.利用Adaboost學習算法進行特征選擇和分類器訓練,把弱分類器組 合成強分類器。 3.采用分類器級聯(lián)提高效率。 二.openCV檢測原理 因為openCV中已經有預先訓練好的一些物體識別文件(haar 分類器),所以我們組決定不在自己訓練,因為這

4、需要大量的經過處理的圖片,任務過去繁重。 第二步,我們使用detect_and_draw()函數(shù)來識別、標記人臉,其中代碼函數(shù)中有一個顏色向量的數(shù)組colors,可以不同顏色標記人臉;分類器在灰度圖上進行檢測,所以RGB圖首先通過cvCvtClolor()轉化成灰度圖,還可以用cvResize()調整大小,然后通過cvEqualizeHist()進行直方均衡;cvHaarDetectObjects()以不同的窗口掃描輸入的圖形尋找人臉,人臉檢測會有多次重復,這里默認3次,我們才認為人臉確實存在,防止誤檢驗。主要步驟為: 1.加載分類器。 用cvLoad函數(shù)讀入xml格式的文件。 2.讀入待檢測

5、圖像。讀入圖片、視頻或者調用攝像頭采集。 3.檢測并標示人臉,顯示人臉檢測數(shù)目和用時。四、實驗內容與步驟(部分代碼): 1、首先,在VS2010平臺下建立win32 項目,設計基本對話框樣式和功能按鈕; (1)三個按鈕: btn0 = CreateWindow(TEXT("button"),TEXT("單張照片識別"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,40,40,100,30,hWnd,(HMENU)0,hInstance,NULL);btn1 = CreateWindow(TEXT("button"

6、;),TEXT("攝像識別"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,40,80,100,30,hWnd,(HMENU)1,hInstance,NULL);btn2 = CreateWindow(TEXT("button"),TEXT("視頻識別"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,40,120,100,30,hWnd,(HMENU)2,hInstance,NULL); (2)顯示人臉識別數(shù)和用時: TextOut(hdc,250,180,TEXT("人臉識別

7、用時(納秒):"),11);TextOut(hdc, 400,180, szText1, wsprintf(szText1, TEXT("%d"), ti);TextOut(hdc,250,200,TEXT("人臉識別個數(shù):"),7);TextOut(hdc, 380,200, szText1, wsprintf(szText1, TEXT("%d"), fa); 2、編寫對應按鈕的功能函數(shù),加入openCV函數(shù);const char* cascade_name ="haarcascade_frontalface_

8、alt2.xml"/Haar分類器/* "haarcascade_profileface.xml"*/(1)人臉檢測標記函數(shù)void detect_and_draw( IplImage* img )/人臉檢測標記函數(shù)static CvScalar colors = /一般用來存放像素值(不一定是灰度值哦)的0,0,255,/畫圓的那個線條顏色0,128,255,0,255,255,0,255,0,255,128,0,255,255,0,255,0,0,255,0,255;double scale = 1.3;IplImage* gray = cvCreateIma

9、ge( cvSize(img->width,img->height), 8, 1 );IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),/對一個double型的數(shù)進行四舍五入,并返回一個整型數(shù)!cvRound (img->height/scale), 8, 1 );/縮放int i;cvCvtColor( img, gray, CV_BGR2GRAY );/顏色空間轉換函數(shù),可以實現(xiàn)RGB顏色向HSV,HSI等顏色空間的轉換,也可以轉換為灰度圖像。cvResize( gray,

10、 small_img, CV_INTER_LINEAR );/調整3通道圖像(如RGB圖像)和單通道圖像的大小。cvEqualizeHist( small_img, small_img );/用來使灰度圖象直方圖均衡化cvClearMemStorage( storage );if( cascade )double t = (double)cvGetTickCount();/獲取操作系統(tǒng)啟動所經過(elapsed)的毫秒數(shù)CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, /用來檢測圖像中的目標 1.1, 2, 0/*

11、CV_HAAR_DO_CANNY_PRUNING*/,/利用Canny邊緣檢測器cvSize(20, 20) );t = (double)cvGetTickCount() - t;ti=(t/(double)cvGetTickFrequency()/1000000.0);fa=faces->total;for( i = 0; i < (faces ? faces->total : 0); i+ )CvRect* r = (CvRect*)cvGetSeqElem( faces, i );/返回索引指定的元素指針CvPoint center;int radius;center.

12、x = cvRound(r->x + r->width*0.5)*scale);center.y = cvRound(r->y + r->height*0.5)*scale);radius = cvRound(r->width + r->height)*0.25*scale);cvCircle( img, center, radius, colorsi%8, 3, 8, 0 ); /畫圓標記cvWaitKey(0);cvShowImage( "人臉檢測結果", img );cvReleaseImage( &gray );cvRel

13、easeImage( &small_img );/將TCHAR轉為char /*tchar是TCHAR類型指針,*_char是char類型指針 void TcharToChar (const TCHAR * tchar, char * _char) int iLength ; /獲取字節(jié)長度 iLength = WideCharToMultiByte(CP_ACP, 0, tchar, -1, NULL, 0, NULL, NULL); /將tchar值賦給_char WideCharToMultiByte(CP_ACP, 0, tchar, -1, _char, iLength, N

14、ULL, NULL); (2)照片識別void picturetext (TCHAR a)/照片識別 CHAR b260;TcharToChar(a,b);/CvCapture* capture = 0;/視頻攝像頭IplImage *frame, *frame_copy = 0;/圖形結構cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); /導入分類器storage = cvCreateMemStorage(0); /創(chuàng)建內存空間 cvNamedWindow( "result", 1 )

15、; const char* filename = (char*)b; IplImage* image = cvLoadImage( filename, 1 ); if( image ) detect_and_draw( image ); cvWaitKey(0); cvReleaseImage( &image ); else /* assume it is a text file containing the list of the image filenames to be processed - one per line */ FILE* f = fopen( filename,

16、"rt" ); if( f ) char buf1000+1; while( fgets( buf, 1000, f ) ) int len = (int)strlen(buf); while( len > 0 && isspace(buflen-1) )/檢查參數(shù)c是否為空格字符,也就是判斷是否為空格(' ')、水平定位字符 /('t')、歸位鍵('r')、換行('n')、垂直定位字符('v')或翻頁('f')的情況 len-; buflen = '

17、;0' image = cvLoadImage( buf, 1 ); if( image ) detect_and_draw( image ); cvWaitKey(0); cvReleaseImage( &image ); fclose(f); cvDestroyWindow("result");(3)視頻文件和攝像頭識別我們組在照片識別的基礎上進一步實現(xiàn)了攝像頭捕獲視頻和讀取視頻文件(*.avi)的人臉檢測:void camera_vedio()/視頻文件和攝像頭識別CvCapture* capture = 0;/視頻攝像頭/IplImage *fram

18、e, *frame_copy = 0;/圖形結構cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );storage = cvCreateMemStorage(0);cvNamedWindow( "result", 1 );capture = cvCaptureFromCAM(0);/初始化從攝像頭中獲取視頻capture = cvCaptureFromAVI( input_name ); /從視頻文件中捕獲視頻幀。*/ /二選一既可做識別 for(;)if( !cvGrabFrame( ca

19、pture )/從攝像頭或者視頻文件中抓取幀 break;frame = cvRetrieveFrame( capture );/取回由函數(shù)cvGrabFrame抓取的圖像。if( !frame )break;if( !frame_copy )frame_copy = cvCreateImage( cvSize(frame->width,frame->height),IPL_DEPTH_8U, frame->nChannels );if( frame->origin = IPL_ORIGIN_TL )cvCopy( frame, frame_copy, 0 );/前到后

20、 elsecvFlip( frame, frame_copy, 0 );/直接將圖像采集卡采集的圖像cvShowImage出來的是反著的圖像,/在顯示圖像之前使用cvFlip()函數(shù)將圖像翻轉一下/垂直翻轉圖像(flip_mode = 0)用于 頂-左和底-左圖像結構的轉換, 主要用于WIN32系統(tǒng)下的視頻操作處理.detect_and_draw( frame_copy );/人臉檢測if( cvWaitKey( 10000 ) = 27 ) /ESC鍵退出 break;cvReleaseImage( &frame_copy );cvReleaseCapture( &captu

21、re );cvDestroyWindow("result"); 3、選擇檢測圖片、視頻文件、調用攝像頭獲取視頻文件進行人臉檢測。5、 實驗過程原始記錄(數(shù)據,圖表,計算等): 主頁面:1.照片識別結果:在這兩張測試圖片中,人臉檢測準確率達到了100%。2.視頻文件識別結果:在視頻測試中準確率也達到了100%。3. 調用攝像頭識別結果:(1) .在光線明亮處識別結果:準確識別,沒有誤差。(2).在光線較暗處識別結果:準確無誤。六、實驗結果分析或總結: 我們小組經過不懈的努力,最終實現(xiàn)了人臉檢測的功能,我們知道Viola-Jones分類算法并不限于人臉檢測,它適應于其他外表有區(qū)別的(接近剛性的)物體的檢測。但是,人的側臉和車的斜視角檢測效果不夠理想,主要是因為這些視角在模板中有很多變化,而“塊特征”無法很好地處理這些變化。通過本次實驗,我們熟悉和掌握openCV(開源的計算機視覺庫),并進一步增強了c語言和win32 編程能力;近幾年,計算機視覺領域發(fā)展迅速,對一

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論