《惡劣天氣下車牌定位識別系統(tǒng)的設(shè)計與實現(xiàn)》15000字(論文)_第1頁
《惡劣天氣下車牌定位識別系統(tǒng)的設(shè)計與實現(xiàn)》15000字(論文)_第2頁
《惡劣天氣下車牌定位識別系統(tǒng)的設(shè)計與實現(xiàn)》15000字(論文)_第3頁
《惡劣天氣下車牌定位識別系統(tǒng)的設(shè)計與實現(xiàn)》15000字(論文)_第4頁
《惡劣天氣下車牌定位識別系統(tǒng)的設(shè)計與實現(xiàn)》15000字(論文)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

公式(4.4.2)4.4.2暗通道處理在惡劣天氣車牌圖像中會出現(xiàn)由于霧天導(dǎo)致車牌不能被準(zhǔn)確識別的情況出現(xiàn)為了應(yīng)對這種情況我們使用了暗通道處理方式來針對霧天的車牌圖像進行去噪。在了解暗通道處理的原理之前,會發(fā)現(xiàn)在一些無霧圖像中,圖像中每一個局部區(qū)域都很有可能有至少一個顏色通道會有很低的值或者黑色的東西。由于霧在視覺上是呈現(xiàn)灰白色的,因此一旦圖像受到霧的影響,那么這些本來應(yīng)該表現(xiàn)出正常顏色的東西就會變得灰白。所以車牌圖像需要經(jīng)過暗通道處理來消除霧對原本車牌圖像的影響,以免造成車牌無法準(zhǔn)確識別的情況出現(xiàn)。4.4.3中值濾波處理在對雨、雪天氣車牌圖像進行去噪過程中,中值濾波方法能夠有效地針對雨、雪天氣車牌圖像中由于天氣原因產(chǎn)生的椒鹽噪聲進行去噪。中值濾波是非線性的圖像處理方法,中值濾波法可以在對圖像進行去噪的同時對圖像邊界的信息進行保留。中值濾波就是選一個含有奇數(shù)點的窗口,將這個窗口在圖像上進行有順序的掃描,之后把窗口中所含的像素點按灰度級進行一定順序排列,取位于排列中間的灰度值來作為該掃描窗口的灰度值。4.5車牌識別算法設(shè)計(1)車牌分割算法因為我國車牌的固定方法是通過鉚釘將車牌古固定車輛上,且因為車牌定位中的邊界噪聲和由于惡劣天氣產(chǎn)生和的噪聲等問題會降低識別的成功率。本次車牌識別算法先將車牌圖像針對相應(yīng)的惡劣天氣進行圖像去噪,在對車牌進行灰度化處理,之后經(jīng)過車牌的粗定位和靜定位定位到車牌在圖像中位置,再進行字符分割和字符識別確定車牌號碼。(2)車牌字符分割算法設(shè)計在本次惡劣天氣下的車牌識別系統(tǒng)中,圖像經(jīng)過了粗定位和精定位確定車牌圖像位置之后會進行車牌的方向校正,經(jīng)方向校正的車牌圖像定位后,保證車輛圖像是否傾斜,然后二值化和去框架,通過垂直投影的字符分割之后可以輸出單個車牌字符,然后字符進行識別的步驟。圖4-5顯示了車牌字符分割算法流程圖。圖4-5字符分割流程圖4.6Python平臺下車牌字符識別算法設(shè)計在車牌字符圖像的字符提取和識別中,需要對字符圖像進行預(yù)處理,去除冗余信息和干擾信息。預(yù)處理包括切割。圖4-6裁剪前的車牌字符圖4-7裁剪后的車牌字符在對字符圖像進行預(yù)處理之后,才可以對處理后的字符圖像進行特征提取和識別操作。4.7車牌識別系統(tǒng)的實現(xiàn)4.7.1系統(tǒng)主界面系統(tǒng)進入到系統(tǒng)中,可以選擇圖片來進行識別。圖4-7-1系統(tǒng)主頁面4.7.2車牌識別本功能是本系統(tǒng)研究的重點,通過讀取相冊圖片,通過圖像處理算法來識別出車牌號,并且可以將車牌去去噪處理,可以識別出雨、雪、霧等惡劣天氣的影響下的車牌。車牌粗定位處理功能實現(xiàn):通過訓(xùn)練找出車牌的大概位置,為車牌精定位做好準(zhǔn)備。實現(xiàn)代碼:##該函數(shù)是初步的框出車牌的大概位置屬于粗定位出一個保險的包含車牌的大小defcomputeSafeRegion(shape,bounding_rect):top=bounding_rect[1]#ybottom=bounding_rect[1]+bounding_rect[3]#y+hleft=bounding_rect[0]#xright=bounding_rect[0]+bounding_rect[2]#x+wmin_top=0max_bottom=shape[0]min_left=0max_right=shape[1]#print"computeSateRegioninputshape",shapeiftop<min_top:top=min_top#print"taptop0"ifleft<min_left:left=min_left#print"tapleft0"ifbottom>max_bottom:bottom=max_bottom#print"tapmax_bottommax"ifright>max_right:right=max_right#print"tapmax_rightmax"#print"corr",left,top,right,bottomreturn[left,top,right-left,bottom-top]#框出車牌識別的區(qū)域defcropped_from_image(image,rect):x,y,w,h=computeSafeRegion(image.shape,rect)returnimage[y:y+h,x:x+w]#detectPlateRough是返回圖像中所有車牌的邊框在圖片中的bbox返回的是一個表示車牌區(qū)域坐標(biāo)邊框的list#返回圖片中所有識別出來的車牌邊框bboxdefdetectPlateRough(image_gray,resize_h=720,en_scale=1.08,top_bottom_padding_rate=0.05):print(image_gray.shape)#top_bottom_padding_rate:表示要裁剪掉圖片的上下部占比iftop_bottom_padding_rate>0.2:print("error:top_bottom_padding_rate>0.2:",top_bottom_padding_rate)exit(1)#resize_h:重新設(shè)定的圖像大小,此處保持大小不變height=image_gray.shape[0]padding=int(height*top_bottom_padding_rate)scale=image_gray.shape[1]/float(image_gray.shape[0])image=cv2.resize(image_gray,(int(scale*resize_h),resize_h))#裁剪掉top_bottom_padding_rate比例的垂直部分image_color_cropped=image[padding:resize_h-padding,0:image_gray.shape[1]]#裁剪之后的圖片進行灰度化處理image_gray=cv2.cvtColor(image_color_cropped,cv2.COLOR_RGB2GRAY)#根據(jù)前面的cv2.CascadeClassifier()物體檢測模型(3),輸入image_gray灰度圖像,#邊框可識別的最小size,最大size,輸出得到車牌在圖像中的offset,也就是邊框#左上角坐標(biāo)(x,y)以及邊框高度(h)和寬度(w)watches=watch_cascade.detectMultiScale(image_gray,en_scale,2,minSize=(36,9),maxSize=(36*40,9*40))#對得到的車牌邊框的bbox進行擴大(此刻得到的車牌可能因為車牌傾斜等原因?qū)е嘛@示不完整),#先對寬度左右各擴大0.14倍,高度上下各擴大0.6倍cropped_images=[]for(x,y,w,h)inwatches:cropped_origin=cropped_from_image(image_color_cropped,(int(x),int(y),int(w),int(h)))x-=w*0.14w+=w*0.28y-=h*0.6h+=h*1.1;#按擴大之后的大小進行裁剪cropped=cropped_from_image(image_color_cropped,(int(x),int(y),int(w),int(h)))cropped_images.append([cropped,[x,y+padding,w,h],cropped_origin])returncropped_images圖4-7-2車牌識別識別車牌顏色功能實現(xiàn):可以識別藍牌、單層黃牌、綠色-新能源車牌、白色-大使車牌、黑色-港澳車牌。plateType=[u"藍牌",u"單層黃牌",u"新能源車牌",u"白色",u"黑色-港澳"]defGetmodel_tensorflow(nb_classes):#nb_classes=len(charset)img_rows,img_cols=9,34#numberofconvolutionalfilterstousenb_filters=32#sizeofpoolingareaformaxpoolingnb_pool=2#convolutionkernelsizenb_conv=3#x=np.load('x.npy')#y=np_utils.to_categorical(range(3062)*45*5*2,nb_classes)#weight=((type_class-np.arange(type_class))/type_class+1)**3#weight=dict(zip(range(3063),weight/weight.mean()))#調(diào)整權(quán)重,高頻字優(yōu)先model=Sequential()model.add(Conv2D(16,(5,5),input_shape=(img_rows,img_cols,3)))model.add(Activation('relu'))model.add(MaxPool2D(pool_size=(nb_pool,nb_pool)))model.add(Flatten())model.add(Dense(64))model.add(Activation('relu'))model.add(Dropout(0.5))model.add(Dense(nb_classes))model.add(Activation('softmax'))pile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])returnmodel#將圖片輸入到模型進行測試predict,根據(jù)車牌顏色判斷類型,#深色背景白色字體返回0,類似淺色背景深色字體的返回大于零的類型model=Getmodel_tensorflow(5)model.load_weights("./model/plate_type.h5")model.save("./model/plate_type.h5")defSimplePredict(image):image=cv2.resize(image,(34,9))#將原來車牌圖像resize大?。?4*9image=image.astype(np.float)/255#將原來灰度圖顏色通道[0,255]轉(zhuǎn)化為float類型[0,1]#將原來灰度圖顏色通道[0,255]轉(zhuǎn)化為float類型[0,1]res=np.array(model.predict(np.array([image]))[0])#將原來灰度圖顏色通道[0,255]轉(zhuǎn)化為float類型[0,1]returnres.argmax()boundaries=[([100,80,0],[240,220,110]),#yellow([0,40,50],[110,180,250]),#blue([0,60,0],[60,160,70]),#green]color_attr=["黃牌","藍牌",'綠牌','白牌','黑牌']threhold_green=13threhold_blue=13threhold_yellow1=50threhold_yellow2=70#plt.figure()#plt.axis("off")#plt.imshow(image)#plt.show()#使用枚舉類鑒定車牌顏色defjudge_color(color):r=color[0]g=color[1]b=color[2]ifg-r>=threhold_greenandg-b>=threhold_green:return2ifb-r>=threhold_blueandb-g>=threhold_blue:return1ifr-b>threhold_yellow2andg-b>threhold_yellow2:return0ifr>200andb>200andg>200:return3ifr<50andb<50andg<50:return4return-1defjudge_plate_color(img):image=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)image=image.reshape((image.shape[0]*image.shape[1],3))clt=KMeans(n_clusters=2)clt.fit(image)hist=centroid_histogram(clt)index=np.argmax(hist)#printclt.cluster_centers_[index]#color_index=search_boundaries(clt.cluster_centers_[index])color_index=judge_color(clt.cluster_centers_[index])ifcolor_index==-1:ifindex==0:secound_index=1else:secound_index=0color_index=judge_color(clt.cluster_centers_[secound_index])ifcolor_index==-1:printclt.cluster_centers_bar=plot_colors(hist,clt.cluster_centers_)#showourcolorbartplt.figure()plt.axis("off")plt.imshow(bar)plt.show()ifcolor_index!=-1:returncolor_attr[color_index],clt.cluster_centers_[index]else:returnNone,clt.cluster_centers_[index]車牌字符識別的實現(xiàn):deffastdecode(y_pred):results=""confidence=0.0table_pred=y_pred.reshape(-1,len(chars)+1)res=table_pred.argmax(axis=1)fori,oneinenumerate(res):ifone<len(chars)and(i==0or(one!=res[i-1])):results+=chars[one]confidence+=table_pred[i][one]confidence/=len(results)returnresults,confidence#對于每個車牌區(qū)域的for循環(huán)中,經(jīng)過fineMappingVertical處理后輸入到recognizeOne函數(shù),進行ocr識別defrecognizeOne(src):#x_tempx=cv2.imread(src)x_tempx=src#x_tempx=cv2.bitwise_not(x_tempx)x_temp=cv2.resize(x_tempx,(160,40))x_temp=x_temp.transpose(1,0,2)t0=time.time()y_pred=pred_model.predict(np.array([x_temp]))y_pred=y_pred[:,2:,:]#plt.imshow(y_pred.reshape(16,66))#plt.show()##cv2.imshow("x_temp",x_tempx)#cv2.waitKey(0)returnfastdecode(y_pred)defctc_lambda_func(args):y_pred,labels,input_length,label_length=argsy_pred=y_pred[:,2:,:]returnK.ctc_batch_cost(labels,y_pred,input_length,label_length)defconstruct_model(model_path):width,height,n_len,n_class=164,48,7,len(chars)+1#輸入層為164*48*3的tensor,類別有l(wèi)en(chars)+1個rnn_size=256input_tensor=Input((None,40,3))x=input_tensorbase_conv=32foriinrange(3):#一共做了三次卷積池化x=Conv2D(base_conv*(2**(i)),(3,3),padding="same")(x)#卷積層x=BatchNormalization()(x)#統(tǒng)一量綱防止網(wǎng)絡(luò)失衡x=Activation('relu')(x)#采用RELU激活函數(shù)x=MaxPooling2D(pool_size=(2,2))(x)#池化層x=Conv2D(256,(5,5))(x)#卷積層,圖像的的空域卷積x=BatchNormalization()(x)x=Activation('relu')(x))#激活函數(shù)是relux=Conv2D(1024,(1,1))(x)x=BatchNormalization()(x)x=Activation('relu')(x)x=Conv2D(len(e2e.chars)+1,(1,1))(x)x=Activation('softmax')(x)base_model=Model(inputs=input_tensor,outputs=x)base_model.load_weights(model_path)returnbase_model尋找車牌左右邊界以及垂直邊緣檢測的實現(xiàn):#尋找車牌左右邊界deffind_edge(image):sum_i=image.sum(axis=0)sum_i=sum_i.astype(np.float)sum_i/=image.shape[0]*255#printsum_istart=0;end=image.shape[1]-1fori,oneinenumerate(sum_i):ifone>0.4:start=i;ifstart-3<0:start=0else:start-=3break;fori,oneinenumerate(sum_i[::-1]):ifone>0.4:end=end-i;ifend+4>image.shape[1]-1:end=image.shape[1]-1else:end+=4breakreturnstart,end#垂直邊緣檢測defverticalEdgeDetection(image):image_sobel=cv2.Sobel(image.copy(),cv2.CV_8U,1,0)#image=auto_canny(image_sobel)#img_sobel,CV_8U,1,0,3,1,0,BORDER_DEFAULT#canny_image=auto_canny(image)flag,thres=cv2.threshold(image_sobel,0,255,cv2.THRESH_OTSU|cv2.THRESH_BINARY)print(flag)flag,thres=cv2.threshold(image_sobel,int(flag*0.7),255,cv2.THRESH_BINARY)#thres=simpleThres(image_sobel)kernal=np.ones(shape=(3,15))thres=cv2.morphologyEx(thres,cv2.MORPH_CLOSE,kernal)returnthres#確定粗略的左右邊界defhorizontalSegmentation(image):thres=verticalEdgeDetection(image)#thres=thres*imagehead,tail=find_edge(thres)#printhead,tail#cv2.imshow("edge",thres)tail=tail+5iftail>135:tail=135image=image[0:35,head:tail]image=cv2.resize(image,(int(136),int(36)))returnimage第五章系統(tǒng)測試5.1測試的主要內(nèi)容本次實驗使用的是黑盒測試法黑盒測試與白盒測試正好相反,白盒測試就是把系統(tǒng)看作一個可以看到的內(nèi)部結(jié)構(gòu)的盒子,痛苦哦白盒測試我們先定義系統(tǒng)的運行結(jié)構(gòu)和邏輯,然后通過指令驗證系統(tǒng)是否能達到我們相應(yīng)的預(yù)期結(jié)果,而黑盒測試就是把該系統(tǒng)看成一個黑色的不能看到內(nèi)部結(jié)構(gòu)的盒子,默認我們并不知道該系統(tǒng)的實際運行邏輯和組織架構(gòu),在所有系統(tǒng)功能都能完整的使用的前提下,驗證其功能是否能達到預(yù)期和正常運作的需求分析,輸入的內(nèi)容和所輸出的內(nèi)容是否相匹配。系統(tǒng)采用的測試用例如下表,表5-1所示:表5-1系統(tǒng)測試用例表用例編碼1描述惡劣天氣車牌識別系統(tǒng)預(yù)計輸出屏幕展現(xiàn)主要測試技術(shù)黑盒測試測試結(jié)果描述測試結(jié)果良好,定位誤差值在許可范圍內(nèi)執(zhí)行步驟檢查點檢查依據(jù)(功能需求編號)期望輸出結(jié)果選擇功能1、選擇圖片1功能正常正常識別2、車牌識別2功能正常正常5.2測試結(jié)果通過以上的系統(tǒng)測試的結(jié)果,發(fā)現(xiàn)系統(tǒng)的運行結(jié)果滿足滿足設(shè)計要求,能夠準(zhǔn)確識別惡劣天氣下的車牌圖片并準(zhǔn)確輸出相應(yīng)的車牌號。如果車牌能夠被準(zhǔn)確識別,它將跳轉(zhuǎn)到相應(yīng)的界面,否則將失敗并提示。雖然由于實驗的原因無法進一步去修改和優(yōu)化一些問題,和繼續(xù)豐富系統(tǒng)的內(nèi)容,并堅持追求使系統(tǒng)更加完美。但在未來的工作和學(xué)習(xí)中,我會以此為參照,努力使之后的設(shè)計變得更加周全和完美。第六章總結(jié)與展望在本次的惡劣天氣下的車牌自動識別系統(tǒng)的設(shè)計實驗中,我知道了本次實驗沒有我之前所想象的那么簡單。能造成這種想法是因為自己對這方面的知識還不夠了解。當(dāng)我真正的了解這方面的知識的時候才意識到原先自己的想法太過簡單了。想要達成自己的實驗結(jié)果并且清楚地介紹項目不是一件很簡單的事情。設(shè)計這個程序首先要去分析它的用戶需求和使用環(huán)境,能給社會帶來什么好處,之后再去設(shè)計一個大體的框架,例如本程序所使用的算法和功能結(jié)構(gòu),包括每一個結(jié)構(gòu)是怎樣運作的,每個結(jié)構(gòu)都有什么功能等等。同時學(xué)會了在開發(fā)時要做到預(yù)先規(guī)劃好總體的框架并卻在編寫代碼時候要做到命名規(guī)范,適當(dāng)?shù)奶砑幼⑨?,條理清晰且全面,盡量減少模塊之間的耦合,功能之間要區(qū)分清楚等。當(dāng)實現(xiàn)這些之后需要測試這些結(jié)構(gòu)是否可以運行,就像參加了一個完完整整的項目一樣。在這個過程中我深感自己的能力有待提高和開發(fā)一個應(yīng)用的不容易。去學(xué)習(xí)一個新的知識并且加以理解和運用帶給我了很多不一樣的體驗,也是我成長了許多。同時在設(shè)計的過程中讓我學(xué)會了如何去查找和使用一些資源和訪問相關(guān)的數(shù)據(jù),并且通過這些數(shù)據(jù)的實驗結(jié)果去建立和支持自己的觀點。這些都是在本次實驗過程中我學(xué)到的東西。同時,在查找文獻,數(shù)據(jù)的手機和外文資料翻譯時候得到了他人的幫助,如果沒有他們的幫助我的程序也許也不會像現(xiàn)在一樣一帆風(fēng)順,這讓我了解到,與其自己去苦心琢磨卻很難有進展的時候或許去尋求老師和同學(xué)的幫助會讓事情變得更有效率,與其閉門造車不如去尋求老師和同學(xué)的幫助。在翻譯外國文獻的時候會發(fā)現(xiàn)自己對于一些專業(yè)的知識理解不夠深刻同時

溫馨提示

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

評論

0/150

提交評論