




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
13.1使用OpenCV進(jìn)行車牌提取及識(shí)別要完成車牌定位提取以及車牌字符識(shí)別任務(wù),需要在運(yùn)行環(huán)境中添加imutils庫(kù)文件和pytesseract庫(kù)文件。imutils是AdrianRosebrock開發(fā)的一個(gè)python工具包,它整合了OpenCV、Numpy和matplotlib的相關(guān)操作,主要是用于圖形圖像的處理,如圖像的平移、旋轉(zhuǎn)、縮放、骨架提取、顯示等等,后期又加入了針對(duì)視頻的處理,如攝像頭、本地文件等。
在cmd下安裝imutils庫(kù)使用pipinstallimutils命令,在anaconda下安裝win-64imutilsv0.5.3版本使用命令:condainstall-cconda-forgeimutils或condainstall-cconda-forge/label/cf202003imutilsimutils庫(kù)
在imutil庫(kù)中用于車牌檢測(cè)中的函數(shù)是imutils.grab_contours,它經(jīng)常搭配尋找輪廓的cv2.findContours函數(shù)一起使用,其語(yǔ)法格式為:cnts=cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)其中輸入?yún)?shù)如下:thresh.copy():輸入圖像(二值圖像,黑色作為背景,白色作為目標(biāo));cv2.RETR_EXTERNAL:輪廓檢索方式;cv2.CHAIN_APPROX_SIMPLE:輪廓近似方法。
再使用cnts=imutils.grab_contours(cnts)語(yǔ)句返回cnts中的countors(輪廓)。pytesseract是一款用于光學(xué)字符識(shí)別(OCR)的python工具,即從圖像中識(shí)別出其中嵌入的文字。pytesseract是對(duì)Tesseract-OCR的一層封裝,同時(shí)也可以單獨(dú)作為對(duì)Tesseract引擎的調(diào)用腳本,支持使用PIL庫(kù)(PythonImagingLibrary)讀取各種圖像文件類型,包括jpg、png、gif、bmp、tiff等其它格式。
在cmd下安裝pytesseract庫(kù)使用如下命令:pipinstallpytesseract。安裝完pytesseract庫(kù)后還需要安裝Tesseract-OCR.exe,然后進(jìn)行變量配置后就可以使用了。2.pytesseract庫(kù)
在pytesseract庫(kù)中,提供了如下函數(shù)將圖像轉(zhuǎn)換成字符串,具體語(yǔ)法格式如下:image_to_string(image,lang=None,boxes=False,config=None)其中輸入?yún)?shù)如下:image表示圖像lang表示語(yǔ)言,默認(rèn)使用英文。如添加lang=‘chi_sim’表示可以識(shí)別簡(jiǎn)體中文boxes設(shè)為True,那么“batch.nochopmakebox”被添加到tesseract調(diào)用中如果設(shè)置了config,則配置會(huì)添加到命令中,例如config=“-psm6”。Config中psm參數(shù)的設(shè)置如下:0:定向腳本監(jiān)測(cè)(OSD);1:使用OSD自動(dòng)分頁(yè);2:自動(dòng)分頁(yè),但是不使用OSD或OCR(OpticalCharacterRecognition,光學(xué)字符識(shí)別);3:全自動(dòng)分頁(yè),但是沒有使用OSD(默認(rèn));4:假設(shè)可變大小的一個(gè)文本列;5:假設(shè)垂直對(duì)齊文本的單個(gè)統(tǒng)一塊;6:假設(shè)一個(gè)統(tǒng)一的文本塊;7:將圖像視為單個(gè)文本行;8:將圖像視為單個(gè)詞;9:將圖像視為圓中的單個(gè)詞;10:將圖像視為單個(gè)字符。
當(dāng)有多個(gè)語(yǔ)言包組合并且視為統(tǒng)一的文本塊時(shí),通過+來合并使用多個(gè)語(yǔ)言包,使用如下參數(shù):pytesseract.image_to_string(image,lang="chi_sim+eng",config="-psm6")13.1.1車牌提取過程
車牌識(shí)別系統(tǒng)一般包括4個(gè)部分:車輛圖像獲取、車牌定位、車牌字符分割和車牌字符識(shí)別。本節(jié)只介紹車牌的提取分割過程。
車輛圖像獲取是車牌識(shí)別的第一步,也是很重要的一步,車輛圖像的好壞對(duì)后面的工作有很大的影響。如果車輛圖像的質(zhì)量太差,連人眼都無法分辨,那么肯定不會(huì)被機(jī)器所識(shí)別出來。車輛圖像都是在實(shí)際現(xiàn)場(chǎng)拍攝出來的,實(shí)際環(huán)境情況比較復(fù)雜,圖像受天氣和光線等環(huán)境影響較大,在惡劣的工作條件下系統(tǒng)性能將顯著下降?,F(xiàn)有的車輛圖像獲取方式主要有兩種:一種是由彩色攝像機(jī)和圖像采集卡組成,其工作過程是:當(dāng)車輛檢測(cè)器(如地感線圈、紅外線等)檢測(cè)到車輛進(jìn)入拍攝范圍時(shí),向主機(jī)發(fā)送啟動(dòng)信號(hào),主機(jī)通過采集卡采集一幅車輛圖像,為了提高系統(tǒng)對(duì)天氣、環(huán)境、光線等的適應(yīng)性,攝像機(jī)一般采用自動(dòng)對(duì)焦和自動(dòng)光圈的一體機(jī),同時(shí)光照不足時(shí)還可以自動(dòng)補(bǔ)光照明,保證拍攝圖像的質(zhì)量;另一種是由數(shù)碼照相機(jī)構(gòu)成,其工作過程是:當(dāng)車輛檢測(cè)器檢測(cè)到車輛進(jìn)入拍攝范圍時(shí),直接給數(shù)碼照相機(jī)發(fā)送一個(gè)信號(hào),數(shù)碼相機(jī)自動(dòng)拍攝一幅車輛圖像,再傳到主機(jī)上,數(shù)碼相機(jī)的一些技術(shù)參數(shù)可以通過與數(shù)碼相機(jī)相連的主機(jī)進(jìn)行設(shè)置,光照不足時(shí)也需要自動(dòng)開啟補(bǔ)光照明,保證拍攝圖像的質(zhì)量。1、車輛圖像獲取車牌定位的主要工作是從攝入的車輛圖像中找到汽車牌照所在位置,并把車牌從該區(qū)域中準(zhǔn)確地分割出來,供字符分割使用。因此,牌照區(qū)域的確定是影響系統(tǒng)性能的重要因素之一,牌照的定位與否直接影響到字符分割和字符識(shí)別的準(zhǔn)確率。目前車牌定位的方法很多,但總的來說可以分為以下4類:基于顏色的分割方法,這種方法主要利用顏色空間的信息,實(shí)現(xiàn)車牌分割,包括彩色邊緣算法、顏色距離和相似度算法等;基于紋理的分割方法,這種方法主要利用車牌區(qū)域水平方向的紋理特征進(jìn)行分割,包括小波紋理、水平梯度差分紋理等;基于邊緣檢測(cè)的分割方法;基于數(shù)學(xué)形態(tài)法的分割方法。
本文采用的是基于邊緣檢測(cè)的分割方法,主要是利用水平投影方法和垂直投影方法進(jìn)行車牌定位。2、車輛定位
要識(shí)別車牌字符,前提是先進(jìn)行車牌字符的正確分割與提取。字符分割的任務(wù)是把多列或多行字符圖像中的每個(gè)字符從整個(gè)圖像中分割出來成為單個(gè)字符。車牌字符的正確分割對(duì)字符的識(shí)別是很關(guān)鍵的。傳統(tǒng)的字符分割算法可以歸納為以下三類:直接分割法、基于識(shí)別基礎(chǔ)上的分割法、自適應(yīng)分割線聚類法。直接分割法簡(jiǎn)單,但它的局限是分割點(diǎn)的確定需要較高的準(zhǔn)確性;基于識(shí)別基礎(chǔ)上的分割法是把識(shí)別和分割結(jié)合起來,但是需要識(shí)別的高準(zhǔn)確性,它根據(jù)分類和識(shí)別的耦合程度又有不同的劃分;自適應(yīng)分割線聚類法是要建立一個(gè)分類器,用它來判斷圖像的每一列是否是分割線,它是根據(jù)訓(xùn)練樣本來進(jìn)行自適應(yīng)學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)分類器,但對(duì)于粘連字符訓(xùn)練困難。也有直接把字符組成的單詞當(dāng)作一個(gè)整體來識(shí)別的,諸如運(yùn)用馬爾科夫數(shù)學(xué)模型等方法進(jìn)行處理,這些算法主要應(yīng)用于印刷體文本識(shí)別。3、車輛字符分割
對(duì)于獲得的帶有字符(數(shù)字/字母)的圖像,使用OCR(光學(xué)字符識(shí)別)識(shí)別出車牌字符上的具體文字了。4、字符識(shí)別13.1.2車牌檢測(cè)與提取
以汽車圖像為例,首先檢測(cè)該汽車上的車牌。然后再使用相同的圖像進(jìn)行字符分割和字符識(shí)別。在此使用的車牌圖像如圖:
首先將圖像調(diào)整為所需大小,可以避免使用較大分辨率的圖像而出現(xiàn)處理時(shí)間過長(zhǎng)的問題,但是我們要確保在調(diào)整大小后,車號(hào)牌仍保留在圖像中。在處理圖像時(shí)如果不再需要處理顏色細(xì)節(jié),那么灰度化就必不可少,這加快了其他后續(xù)處理的速度。程序代碼如下:1、調(diào)證圖像大小,并灰度化img=cv2.resize(img,(640,480))gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
車牌圖像中會(huì)包含有用和無用的信息,在這種情況下,對(duì)于我們來說,只有牌照是有用的信息,其余部分幾乎是無用的。這種無用的信息稱為噪聲。通常,使用雙邊濾波會(huì)從圖像中刪除不需要的細(xì)節(jié)。2、雙邊濾波其中雙邊濾波的函數(shù)語(yǔ)法為:dst_image=cv2.bilateralFilter(source_image,diameterofpixel,sigmaColor,sigmaSpace)
可以將sigmaColor顏色和sigmaSpace空間從15增加到更高的值,以模糊掉更多的背景信息。gray=cv2.bilateralFilter(gray,13,15,15)
使用OpenCV中的Canny算子進(jìn)行邊緣檢測(cè),程序語(yǔ)句為edged=cv2.Canny(gray,30,200)。3、邊緣檢測(cè)contours=cv2.findContours(edged.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)contours=imutils.grab_contours(contours)contours=sorted(contours,key=cv2.contourArea,reverse=True)[:10]screenCnt=None4、圖像中尋找輪廓
一旦檢測(cè)到圖像輪廓,我們就將它們從大到小進(jìn)行排序,并只考慮前10個(gè)輪廓而忽略其后的輪廓。由于車牌是四邊形的矩形,為了獲得車牌圖像,我們將遍歷所有輪廓,并檢查其具有四個(gè)側(cè)面和閉合圖形的矩形輪廓。forcincnts:#近似輪廓peri=cv2.arcLength(c,True)#計(jì)算輪廓的周長(zhǎng)approx=cv2.approxPolyDP(c,0.018*peri,True)#用于獲得輪廓的近似值#參數(shù)說明:第一個(gè)參數(shù)為輸入的輪廓值;第二個(gè)參數(shù)為閾值T,通常使用輪廓的周長(zhǎng)作為閾值;第三個(gè)參數(shù)True表示輪廓是閉合的。#如果近似輪廓有四個(gè)點(diǎn),那么我們已經(jīng)找到了車牌字符位置iflen(approx)==4:screenCnt=approxbreak
找到正確的車牌字符輪廓后,將其保存為screenCnt,然后在其周圍繪制一個(gè)矩形框,以確保我們已正確檢測(cè)到車牌,如圖:
對(duì)車牌區(qū)域進(jìn)行掩模,去除車牌外的圖像部分,只保留車牌所在的區(qū)域。程序代碼如下:5、提取車牌mask=np.zeros(gray.shape,np.uint8)new_image=cv2.drawContours(mask,[screenCnt],0,255,-1,)new_image=cv2.bitwise_and(img,img,mask=mask)提取的車牌圖像如圖:13.1.3字符分割
車牌識(shí)別的下一步是通過裁剪車牌并將其保存為新圖像,將車牌從圖像中分割出來。然后使用此圖像來檢測(cè)其中的字符。下面顯示了從主圖像裁剪出ROI(感興趣區(qū)域)圖像的代碼:
(x,y)=np.where(mask==255)(topx,topy)=(np.min(x),np.min(y))(bottomx,bottomy)=(np.max(x),np.max(y))cropped=gray[topx:bottomx+1,topy:bottomy+1]importcv2importimutilsimportnumpyasnpimg=cv2.imread('D:/pics/chepai1.jpg',cv2.IMREAD_COLOR)img=cv2.resize(img,(600,400))cv2.imshow('Originimage',img)img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)img_gray=cv2.bilateralFilter(img_gray,13,15,15)#雙邊濾波
img_edged=cv2.Canny(img_gray,30,200)cv2.imshow('edgedimage',img_edged)#尋找輪廓。三個(gè)輸入?yún)?shù):輸入圖像,輪廓檢索方式,輪廓近似方法img_contours=cv2.findContours(img_edged.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)#返回countors中的輪廓img_contours=imutils.grab_contours(img_contours)img_contours=sorted(img_contours,key=cv2.contourArea,reverse=True)[:10]#排序#print('contours',contours)screenCnt=None【例13.1】車牌字符圖像的定位與剪切的完整程序代碼如下:
forcinimg_contours:peri=cv2.arcLength(c,True)#計(jì)算輪廓的周長(zhǎng)approx=cv2.approxPolyDP(c,0.018*peri,True)#多邊形擬合曲線iflen(approx)==4:screenCnt=approxbreak
ifscreenCntisNone:detected=0print("Nocontourdetected")else:detected=1ifdetected==1:cv2.drawContours(img,[screenCnt],-1,(0,0,255),3)mask=np.zeros(img_gray.shape,np.uint8)new_image=cv2.drawContours(mask,[screenCnt],0,255,-1,)cv2.imshow('mask_image',new_image)#找到車牌位置,并掩模new_image=cv2.bitwise_and(img,img,mask=mask)#與原圖像“與”操作#cv2.imshow('bitwisenew_image',new_image)(x,y)=np.where(mask==255)(topx,topy)=(np.min(x),np.min(y))(bottomx,bottomy)=(np.max(x),np.max(y))#切割車牌圖像cropped=img_gray[topx:bottomx+1,topy:bottomy+1]cropped=cv2.resize(cropped,(400,200))cv2.imshow('Cropped',cropped)
cv2.waitKey(0)cv2.destroyAllWindows()程序運(yùn)行結(jié)果如圖:(a)原圖像
(b)邊緣檢測(cè)圖像(c)車牌掩模圖像(d)剪切的車牌圖像13.1.4基于Haar特征分類器的車牌檢測(cè)HaarCascadeXML特征分類器,是一種基于機(jī)器學(xué)習(xí)的方法,它利用了積分圖像(或總面積)的概念有效地提取特征(例如,邊緣、線條等)的數(shù)值?!凹?jí)聯(lián)分類器”,即意味著不是一次就為圖像中的許多特征應(yīng)用數(shù)百個(gè)分類器,而是一對(duì)一地應(yīng)用分類器。(1)導(dǎo)入要使用的汽車圖像。(2)使用OpenCV的CascadeClassifier函數(shù)為車牌引入HaarCascade功能集XML文件。
(3)使用detectMultiScaleCascadeClassifier分類器方法進(jìn)行檢測(cè)。detectMultiScale函數(shù)允許輸入不同大小的圖像,并返回檢測(cè)圖像的矩形邊界列表。對(duì)于每個(gè)矩形,將返回4個(gè)值,它們分別對(duì)應(yīng)矩形(x)左下角的x坐標(biāo)、矩形(y)的左下角的y坐標(biāo)、矩形寬度(w)和矩形高度(h)?;贖aar分類器的車牌檢測(cè)步驟如下:
detectMultiScale函數(shù)語(yǔ)法格式為:
objects=detectMultiScale(image,scaleFactor,minNeighbors,flags,minSize,maxSize)
其中輸入輸出參數(shù)如下:image--待檢測(cè)圖像,一般為灰度圖像加快檢測(cè)速度;objects--被檢測(cè)物體的矩形框向量組;scaleFactor--表示在前后兩次相繼的掃描中,搜索窗口的比例系數(shù)。默認(rèn)為1.1即每次搜索窗口依次擴(kuò)大10%;minNeighbors--表示構(gòu)成檢測(cè)目標(biāo)的相鄰矩形的最小個(gè)數(shù)(默認(rèn)為3個(gè))。如果組成檢測(cè)目標(biāo)的小矩形的個(gè)數(shù)和小于min_neighbors-1都會(huì)被排除。如果min_neighbors為0,則函數(shù)不做任何操作就返回所有的被檢候選矩形框,這種設(shè)定值一般用在用戶自定義對(duì)檢測(cè)結(jié)果的組合程序上;flags--使用默認(rèn)值或使用CV_HAAR_DO_CANNY_PRUNING。如果設(shè)置為CV_HAAR_DO_CANNY_PRUNING,那么函數(shù)將會(huì)使用Canny邊緣檢測(cè)來排除邊緣過多或過少的區(qū)域,因此這些區(qū)域通常不會(huì)是車牌所在區(qū)域;minSize和maxSize用來限制得到的目標(biāo)區(qū)域的范圍。importcv2carplate_haar=cv2.CascadeClassifier('D:/anaconda3/Lib/site-packages/''cv2/data/haarcascade_russian_plate_number.xml')defcarplate_detect(image):carplate_overlay=image.copy()carplate_rects=carplate_haar.detectMultiScale(carplate_overlay,scaleFactor=1.1,minNeighbors=3)forx,y,w,hincarplate_rects:cv2.rectangle(carplate_overlay,(x,y),(x+w,y+h),(255,0,0),5)returncarplate_overlaydefcarplate_extract(image):carplate_rects=carplate_haar.detectMultiScale(image,scaleFactor=1.1,minNeighbors=5)forx,y,w,hincarplate_rects:carplate_img=image[y+15:y+h-10,x+15:x+w-20]returncarplate_imgif__name__=='__main__':
img=cv2.imread('D:/pics/chepai4.jpg')
img1=carplate_detect(img)#檢測(cè)車牌
cv2.imshow('Carimage',img1)
img2=carplate_extract(img1)#截取車牌
cv2.imshow('Plateimage',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()【例13.2】基于Haar的特征分類器進(jìn)行車牌檢測(cè),程序代碼如下:
程序運(yùn)行結(jié)果如圖:Haar檢測(cè)車牌輪廓截取車牌字符區(qū)域13.1.5字符識(shí)別
車牌識(shí)別的最后一步是從分割的圖像中識(shí)別出車牌字符文字信息。目前常用的車牌字符識(shí)別方法有三種:(1)使用字符庫(kù)進(jìn)行識(shí)別,如使用pytesseract、paddleocr等。(2)使用SVM支持向量機(jī)進(jìn)行車牌字符識(shí)別。(3)使用深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)CNN進(jìn)行車牌字符識(shí)別。importcv2importimutilsimportnumpyasnpimportpytesseractpytesseract.pytesseract.tesseract_cmd=r'C:\ProgramFiles(x86)\Tesseract-OCR\tesseract.exe'
img=cv2.imread('D:/pics/chepai7.jpg',cv2.IMREAD_COLOR)img=cv2.resize(img,(600,400))
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)gray=cv2.bilateralFilter(gray,13,15,15)
edged=cv2.Canny(gray,30,200)contours=cv2.findContours(edged.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)contours=imutils.grab_contours(contours)contours=sorted(co
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年幼兒園大班社會(huì)領(lǐng)域《九九重陽(yáng)節(jié)》標(biāo)準(zhǔn)教案標(biāo)準(zhǔn)課件
- 家電租賃合同范本簡(jiǎn)單
- 商鋪代銷合同范本
- 水上樂園合同范本
- 教學(xué)方法與手段的多樣化計(jì)劃
- 學(xué)校幼兒園學(xué)習(xí)計(jì)劃
- 成果導(dǎo)向與目標(biāo)管理計(jì)劃
- 詳細(xì)寫好租房合同范本
- 科技賦能下的舞臺(tái)設(shè)備變革與趨勢(shì)
- 2025年幼兒大班科學(xué)標(biāo)準(zhǔn)教案《認(rèn)識(shí)包裝袋上的標(biāo)識(shí)》
- 高一英語(yǔ)必修一試卷(含答案)(適合測(cè)試)
- 中國(guó)非遺文化儺戲詳細(xì)介紹課件
- 語(yǔ)文八年級(jí)下冊(cè)課后習(xí)題解析
- 黑龍江省哈爾濱市香坊區(qū)風(fēng)華教育集團(tuán)2022-2023學(xué)年五年級(jí)下學(xué)期期末英語(yǔ)試題
- 五年級(jí)上冊(cè)心理健康教育教案-13課 樂于助人善于助人 通用版
- 道路車輛 48V供電電壓 電氣要求及試驗(yàn)
- 政府機(jī)關(guān)保安服務(wù)項(xiàng)目組織機(jī)構(gòu)及人員配備
- 小學(xué)傳承經(jīng)典筑夢(mèng)未來演講稿500字11篇
- 2024年長(zhǎng)沙電力職業(yè)技術(shù)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 2024年南京科技職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 懷念戰(zhàn)友混聲四部合唱譜
評(píng)論
0/150
提交評(píng)論