日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

譯者 | 布加迪

審校 | 孫淑娟

車牌檢測與識(shí)別技術(shù)用途廣泛,可以用于道路系統(tǒng)、無票停車場、車輛門禁等。這項(xiàng)技術(shù)結(jié)合了計(jì)算機(jī)視覺和人工智能。

本文將使用Python/ target=_blank class=infotextkey>Python創(chuàng)建一個(gè)車牌檢測和識(shí)別程序。該程序?qū)斎雸D像進(jìn)行處理,檢測和識(shí)別車牌,最后顯示車牌字符,作為輸出內(nèi)容。

一、創(chuàng)建Python環(huán)境

要輕松地完成本教程,您需要熟悉Python基礎(chǔ)知識(shí)。應(yīng)先創(chuàng)建程序環(huán)境。

在開始編程之前,您需要在環(huán)境中安裝幾個(gè)庫。打開任何Python IDE,創(chuàng)建一個(gè)Python文件。在終端上運(yùn)行命令以安裝相應(yīng)的庫。您應(yīng)該在計(jì)算機(jī)上預(yù)先安裝Python PIP。

OpenCV-Python:您將使用這個(gè)庫對(duì)輸入圖像進(jìn)行預(yù)處理,并顯示各個(gè)輸出圖像。pip install OpenCV-Python imutils:您將使用這個(gè)庫將原始輸入圖像裁剪成所需的寬度。pip install imutils pytesseract:您將使用這個(gè)庫提取車牌字符,并將它們轉(zhuǎn)換成字符串。pip install pytesseractpytesseract庫依賴Tesseract OCR引擎進(jìn)行字符識(shí)別。

二、如何在您的計(jì)算機(jī)上安裝Tesseract OCR?

Tesseract OCR是一種可以識(shí)別語言字符的引擎。在使用pytesseract庫之前,您應(yīng)該在計(jì)算機(jī)上安裝它。步驟如下:

1. 打開任何基于Chrome的瀏覽器。

2. 下載Tesseract OCR安裝程序。

3. 運(yùn)行安裝程序,像安裝其他程序一樣安裝它。

準(zhǔn)備好環(huán)境并安裝tesseract OCR后,您就可以編寫程序了。

1.導(dǎo)入庫

首先導(dǎo)入在環(huán)境中安裝的庫。導(dǎo)入庫讓您可以在項(xiàng)目中調(diào)用和使用它們的函數(shù)。

import cv2 import imutils import pytesseract

您需要以cv2形式導(dǎo)入OpenCV-Python庫。使用與安裝時(shí)相同的名稱導(dǎo)入其他庫。

2.獲取輸入

然后將pytesseract指向安裝Tesseract引擎的位置。使用cv2.imread函數(shù)將汽車圖像作為輸入。將圖像名稱換成您在使用的那個(gè)圖像的名稱。將圖像存儲(chǔ)在項(xiàng)目所在的同一個(gè)文件夾中,以方便操作。

  pytesseract.pytesseract.tesseract_cmd = 'C:\Program Files\Tesseract-OCR\tesseract.exe' original_image = cv2.imread('image3.jpeg')

您可以將下面的輸入圖像換成想要使用的圖像。

3.預(yù)處理輸入

將圖像寬度調(diào)整為500像素,然后將圖像轉(zhuǎn)換成灰度圖像,因?yàn)閏anny邊緣檢測函數(shù)只適用于灰度圖像。最后,調(diào)用bilateralFilter函數(shù)以降低圖像噪聲。

  original_image = imutils.resize(original_image, width=500 ) gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY) gray_image = cv2.bilateralFilter(gray_image, 11, 17, 17) 4.在輸入端檢測車牌

檢測車牌是確定汽車上有車牌字符的那部分的過程。

(1)執(zhí)行邊緣檢測

先調(diào)用cv2.Canny函數(shù),該函數(shù)可自動(dòng)檢測預(yù)處理圖像上的邊緣。

  edged_image = cv2.Canny(gray_image, 30,200)

我們將通過這些邊緣找到輪廓。

(2)尋找輪廓

調(diào)用cv2.findContours函數(shù),并傳遞邊緣圖像的副本。這個(gè)函數(shù)將檢測輪廓。使用cv2.drawContours函數(shù),繪制原始圖像上已檢測的輪廓。最后,輸出所有可見輪廓已繪制的原始圖像。

  contours, new = cv2.findContours(edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_AppROX_SIMPLE) img1 = original_image.copy() cv2.drawContours(img1, contours, -1, (0, 255, 0), 3) cv2.imshow("img1", img1)

該程序繪制它在汽車圖像上找到的所有輪廓。

圖片

找到輪廓后,您需要對(duì)它們進(jìn)行篩選,以確定最佳候選輪廓。

(3)篩選輪廓

根據(jù)最小面積30對(duì)輪廓進(jìn)行篩選。忽略小于這個(gè)面積的輪廓,因?yàn)樗鼈儾惶赡苁擒嚺戚喞?。?fù)制原始圖像,在圖像上繪制前30個(gè)輪廓。最后,顯示圖像。

  contours = sorted(contours, key = cv2.contourArea, reverse = True)[:30] # stores the license plate contour screenCnt = None img2 = original_image.copy() # draws top 30 contours cv2.drawContours(img2, contours, -1, (0, 255, 0), 3) cv2.imshow("img2", img2)

現(xiàn)在輪廓數(shù)量比開始時(shí)要少。唯一繪制的輪廓是那些近似含有車牌的輪廓。

圖片

最后,您需要遍歷已篩選的輪廓,確定哪一個(gè)是車牌。

(4)遍歷前30個(gè)輪廓

創(chuàng)建遍歷輪廓的for循環(huán)。尋找有四個(gè)角的輪廓,確定其周長和坐標(biāo)。存儲(chǔ)含有車牌的輪廓的圖像。最后,在原始圖像上繪制車牌輪廓并加以顯示。

  count = 0 idx = 7 for c in contours: # approximate the license plate contour contour_perimeter = cv2.arcLength(c, True) approx = cv2.approxPolyDP(c, 0.018 * contour_perimeter, True) # Look for contours with 4 corners if len(approx) == 4: screenCnt = approx # find the coordinates of the license plate contour x, y, w, h = cv2.boundingRect(c) new_img = original_image [ y: y + h, x: x + w] # stores the new image cv2.imwrite('./'+str(idx)+'.png',new_img) idx += 1 break # draws the license plate contour on original image cv2.drawContours(original_image , [screenCnt], -1, (0, 255, 0), 3) cv2.imshow("detected license plate", original_image )

循環(huán)之后,程序已識(shí)別出含有車牌的那個(gè)輪廓。

圖片

5.識(shí)別檢測到的車牌

識(shí)別車牌意味著讀取已裁剪車牌圖像上的字符。加載之前存儲(chǔ)的車牌圖像并顯示它。然后,調(diào)用pytesseract.image_to_string函數(shù),傳遞已裁剪的車牌圖像。這個(gè)函數(shù)將圖像中的字符轉(zhuǎn)換成字符串。

  # filename of the cropped license plate image cropped_License_Plate = './7.png' cv2.imshow("cropped license plate", cv2.imread(cropped_License_Plate)) # converts the license plate characters to string text = pytesseract.image_to_string(cropped_License_Plate, lang='eng')

已裁剪的車牌如下所示。上面的字符將是您稍后在屏幕上輸出的內(nèi)容。

圖片

檢測并識(shí)別車牌之后,您就可以顯示輸出了。

6.顯示輸出

這是最后一步。您將提取的文本輸出到屏幕上。該文本含有車牌字符。

  print("License plate is:", text) cv2.waitKey(0) cv2.destroyAllwindows()

程序的預(yù)期輸出應(yīng)該如下圖所示:

圖片

車牌文本可以在終端上看到。

三、磨礪您的Python技能

用Python檢測和識(shí)別車牌是一個(gè)有意思的項(xiàng)目。它有挑戰(zhàn)性,所以應(yīng)該會(huì)幫助您學(xué)到關(guān)于Python的更多知識(shí)。

說到編程,實(shí)際運(yùn)用是掌握一門語言的關(guān)鍵。為了鍛煉技能,您需要開發(fā)有意思的項(xiàng)目。

原文鏈接:https://www.makeuseof.com/python-car-license-plates-detect-and-recognize/

分享到:
標(biāo)簽:Python
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評(píng)定2018-06-03

通用課目體育訓(xùn)練成績評(píng)定