国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

浙江建設(shè)職業(yè)學(xué)校網(wǎng)站刷網(wǎng)站軟件

浙江建設(shè)職業(yè)學(xué)校網(wǎng)站,刷網(wǎng)站軟件,網(wǎng)站制作費用需要多少錢,網(wǎng)站公司做網(wǎng)站修改會收費嗎寫目錄一. 🦁 設(shè)計任務(wù)說明1.1 主要設(shè)計內(nèi)容1.1.1 設(shè)計并實現(xiàn)車牌自動識別算法,基本功能要求1.1.2 參考資料1.1.3 參考界面布局1.2 開發(fā)該系統(tǒng)軟件環(huán)境及使用的技術(shù)說明1.3 開發(fā)計劃二. 🦁 系統(tǒng)設(shè)計2.1 功能分析2.1.1 車輛圖像獲取2.1.2 車牌…

寫目錄

  • 一. 🦁 設(shè)計任務(wù)說明
    • 1.1 主要設(shè)計內(nèi)容
      • 1.1.1 設(shè)計并實現(xiàn)車牌自動識別算法,基本功能要求
      • 1.1.2 參考資料
      • 1.1.3 參考界面布局
    • 1.2 開發(fā)該系統(tǒng)軟件環(huán)境及使用的技術(shù)說明
    • 1.3 開發(fā)計劃
  • 二. 🦁 系統(tǒng)設(shè)計
    • 2.1 功能分析
      • 2.1.1 車輛圖像獲取
      • 2.1.2 車牌定位
      • 2.1.3 車牌字符分割
      • 2.1.4 車牌字符識別
    • 2.2 部分功能代碼實現(xiàn)
    • 2.3 概要設(shè)計
    • 2.4 詳細(xì)設(shè)計
      • 2.4.1 讀取圖像
      • 2.4.2 降噪
      • 2.4.3 二值化
      • 2.4.4 將圖像邊緣連接為一個整體
      • 2.4.5 查找車牌(矩形區(qū)域)
      • 2.4.6 圖形修正
      • 2.4.7 顏色識別
      • 2.4.8 車牌部分二值化
      • 2.4.9 字符分割(投影法)
      • 2.4.10 匹配模板
  • 三. 🦁 程序運行結(jié)果
  • 四. 🦁 算法性能
  • 五. 🦁 總結(jié)

在這里插入圖片描述

一. 🦁 設(shè)計任務(wù)說明

1.1 主要設(shè)計內(nèi)容

1.1.1 設(shè)計并實現(xiàn)車牌自動識別算法,基本功能要求

Ⅰ. 對給定的包含有汽車車牌的照片進行處理,利用圖像分割算法將目標(biāo)從背景中分離出來。
Ⅱ. 對目標(biāo)圖像進行合適的處理,然后利用Tesseract庫實現(xiàn)車牌號碼的識別,將結(jié)果輸出。
Ⅲ. 要求提供比較友好的用戶接口,可以對新的圖片導(dǎo)入到系統(tǒng)中進行處理,并將結(jié)果返回給用戶。
Ⅳ. 要求處理過程的自動化,即輸入圖像,自動輸出車牌信息,無需人去干預(yù)。

1.1.2 參考資料

Ⅰ. OpenCV官方參考文檔
Ⅱ. Github網(wǎng)站
Ⅲ. 文字識別可以用Tesseract庫實現(xiàn),也可以用其他方式實現(xiàn)

1.1.3 參考界面布局

在這里插入圖片描述

1.2 開發(fā)該系統(tǒng)軟件環(huán)境及使用的技術(shù)說明

PyQt5:5.11.3
opencv-python:4.2

1.3 開發(fā)計劃

在這里插入圖片描述

二. 🦁 系統(tǒng)設(shè)計

2.1 功能分析

2.1.1 車輛圖像獲取

車輛圖像獲取是車牌識別的第一步,也是很重要的一步,車輛圖像的好壞對后面的工作有很大的影響。如果車輛圖像的質(zhì)量太差,連人眼都沒法分辨,那么肯定不會被機器所識別出來。車輛圖像都是在實際現(xiàn)場拍攝出來的,實際環(huán)境情況比較復(fù)雜,圖像受天氣和光線等環(huán)境影響較大,在惡劣的工作條件下系統(tǒng)性能將顯著下降。

現(xiàn)有的車輛圖像獲取方式主要有兩種:一種是由彩色攝像機和圖像采集卡組成,其工作過程是:當(dāng)車輛檢測器(如地感線圈、紅外線等)檢測到車輛進入拍攝范圍時,向主機發(fā)送啟動信號,主機通過采集卡采集一幅車輛圖像,為了提高系統(tǒng)對天氣、環(huán)境、光線等的適應(yīng)性,攝像機一般采用自動對焦和自動光圈的一體化機,同時光照不足時還可以自動補光照明,保證拍攝圖片的質(zhì)量;另一種是由數(shù)碼照相機構(gòu)成,其工作過程是:當(dāng)車輛檢測器檢測到車輛進入拍攝范圍時,直接給數(shù)碼照相機發(fā)送一個信號,數(shù)碼相機自動拍攝一幅車輛圖像,再傳到主機上,數(shù)碼相機的一些技術(shù)參數(shù)可以通過與數(shù)碼相機相連的主機進行設(shè)置,光照不足時也需要自動開啟補光照明,保證拍攝圖片的質(zhì)量。

2.1.2 車牌定位

車牌定位的主要工作是從攝入的汽車圖像中找到汽車牌照所在位置,并把車牌從該區(qū)域中準(zhǔn)確地分割出來,供字符分割使用。因此,牌照區(qū)域的確定是影響系統(tǒng)性能的重要因素之一,牌照的定位與否直接影響到字符分割和字符識別的準(zhǔn)確率。目前車牌定位的方法很多,但總的來說可以分為以下4類:

  • (1)基于顏色的分割方法,這種方法主要利用顏色空間的信息,實現(xiàn)車牌分割,包括彩色邊緣算法、顏色距離和相似度算法等;
  • (2)基于紋理的分割方法,這種方法主要利用車牌區(qū)域水平方向的紋理特征進行分割,包括小波紋理、水平梯度差分紋理等;
  • (3)基于邊緣檢測的分割方法;
  • (4)基于數(shù)學(xué)形態(tài)法的分割方法。

2.1.3 車牌字符分割

要識別車牌字符,前提是先進行車牌字符的正確分割與提取。字符分割的任務(wù)是把多列或多行字符圖像中的每個字符從整個圖像中切割出來成為單個字符。車牌字符的正確分割對字符的識別是很關(guān)鍵的。傳統(tǒng)的字符分割算法可以歸納為以下三類:直接分割法、基于識別基礎(chǔ)上的分割法、自適應(yīng)分割線類聚法

  • 直接分割法簡單,但它的局限是分割點的確定需要較高的準(zhǔn)確性;
  • 基于識別基礎(chǔ)上的分割法是把識別和分割結(jié)合起來,但是需要識別的高準(zhǔn)確性,它根據(jù)分類和識別的耦合程度又有不同的劃分;
  • 自適應(yīng)分割線聚類法是要建立一個分類器,用它來判斷圖像的每一列是否是分割線,它是根據(jù)訓(xùn)練樣本來進行自適應(yīng)學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)分類器,但對于粘連字符訓(xùn)練困難。也有直接把字符組成的單詞當(dāng)作一個整體來識別的,諸如運用馬爾科夫數(shù)學(xué)模型等方法進行處理,這些算法主要應(yīng)用于印刷體文本識別。

2.1.4 車牌字符識別

與一般印刷體字符識別相比,車牌字符識別尤其自身的特點,它是文字識別技術(shù)與車牌圖像自身因素協(xié)調(diào)兼顧的綜合技術(shù),目前,車牌字符識別算法主要是基于模板匹配、特征匹配或神經(jīng)網(wǎng)絡(luò)的方法。我國的車牌字符包括50多個漢字,25個大寫英文字母,10個數(shù)字,總共也就80多個字符,鑒于車牌識別系統(tǒng)的特殊性,如果照搬普通漢字識別的方法,對文字細(xì)化后再提取其結(jié)構(gòu)或統(tǒng)計特征,非但得不到意想的結(jié)果,反而會降低識別率。

2.2 部分功能代碼實現(xiàn)

def __imreadex(self, filename):return cv2.imdecode(np.fromfile(filename, dtype=np.uint8), cv2.IMREAD_COLOR)def __point_limit(self, point):if point[0] < 0:point[0] = 0if point[1] < 0:point[1] = 0def __find_waves(self, threshold, histogram):up_point = -1  # 上升點is_peak = Falseif histogram[0] > threshold:up_point = 0is_peak = Truewave_peaks = []for i, x in enumerate(histogram):if is_peak and x < threshold:if i - up_point > 2:is_peak = Falsewave_peaks.append((up_point, i))elif not is_peak and x >= threshold:is_peak = Trueup_point = iif is_peak and up_point != -1 and i - up_point > 4:wave_peaks.append((up_point, i))return wave_peaksdef __seperate_card(self, img, waves):part_cards = []for wave in waves:part_cards.append(img[:, wave[0]:wave[1]])return part_cardsdef __accurate_place(self, card_img_hsv, limit1, limit2, color):row_num, col_num = card_img_hsv.shape[:2]xl = col_numxr = 0yh = 0yl = row_num# col_num_limit = self.cfg["col_num_limit"]row_num_limit = self.cfg["row_num_limit"]col_num_limit = col_num * 0.8 if color != "green" else col_num * 0.5  # 綠色有漸變for i in range(row_num):count = 0for j in range(col_num):H = card_img_hsv.item(i, j, 0)S = card_img_hsv.item(i, j, 1)V = card_img_hsv.item(i, j, 2)if limit1 < H <= limit2 and 34 < S and 46 < V:count += 1if count > col_num_limit:if yl > i:yl = iif yh < i:yh = ifor j in range(col_num):count = 0for i in range(row_num):H = card_img_hsv.item(i, j, 0)S = card_img_hsv.item(i, j, 1)V = card_img_hsv.item(i, j, 2)if limit1 < H <= limit2 and 34 < S and 46 < V:count += 1if count > row_num - row_num_limit:if xl > j:xl = jif xr < j:xr = jreturn xl, xr, yh, yldef __preTreatment(self, car_pic):if type(car_pic) == type(""):img = self.__imreadex(car_pic)else:img = car_picpic_hight, pic_width = img.shape[:2]if pic_width > self.MAX_WIDTH:resize_rate = self.MAX_WIDTH / pic_widthimg = cv2.resize(img, (self.MAX_WIDTH, int(pic_hight * resize_rate)),interpolation=cv2.INTER_AREA)  
#確定車牌顏色
colors = []
for card_index, card_img in enumerate(card_imgs):green = yellow = blue = black = white = 0try:card_img_hsv = cv2.cvtColor(card_img, cv2.COLOR_BGR2HSV)except:card_img_hsv = Noneif card_img_hsv is None:continuerow_num, col_num = card_img_hsv.shape[:2]card_img_count = row_num * col_numfor i in range(row_num):for j in range(col_num):H = card_img_hsv.item(i, j, 0)S = card_img_hsv.item(i, j, 1)V = card_img_hsv.item(i, j, 2)if 11 < H <= 34 and S > 34:  yellow += 1elif 35 < H <= 99 and S > 34:  green += 1elif 99 < H <= 124 and S > 34:  blue += 1if 0 < H < 180 and 0 < S < 255 and 0 < V < 46:black += 1elif 0 < H < 180 and 0 < S < 43 and 221 < V < 225:white += 1color = "no"limit1 = limit2 = 0if yellow * 2 >= card_img_count:color = "yellow"limit1 = 11limit2 = 34  elif green * 2 >= card_img_count:color = "green"limit1 = 35limit2 = 99elif blue * 2 >= card_img_count:color = "blue"limit1 = 100limit2 = 124  elif black + white >= card_img_count * 0.7:color = "bw"# print(color)colors.append(color)if limit1 == 0:continuexl, xr, yh, yl = self.__accurate_place(card_img_hsv, limit1, limit2, color)if yl == yh and xl == xr:continueneed_accurate = Falseif yl >= yh:yl = 0yh = row_numneed_accurate = Trueif xl >= xr:xl = 0xr = col_numneed_accurate = Truecard_imgs[card_index] = card_img[yl:yh, xl:xr] \if color != "green" or yl < (yh - yl) // 4 else card_img[yl - (yh - yl) // 4:yh, xl:xr]if need_accurate:  card_img = card_imgs[card_index]card_img_hsv = cv2.cvtColor(card_img, cv2.COLOR_BGR2HSV)xl, xr, yh, yl = self.__accurate_place(card_img_hsv, limit1, limit2, color)if yl == yh and xl == xr:continueif yl >= yh:yl = 0yh = row_numif xl >= xr:xl = 0xr = col_numcard_imgs[card_index] = card_img[yl:yh, xl:xr] \if color != "green" or yl < (yh - yl) // 4 else card_img[yl - (yh - yl) // 4:yh, xl:xr]return card_imgs, colors

2.3 概要設(shè)計

在這里插入圖片描述

2.4 詳細(xì)設(shè)計

2.4.1 讀取圖像

使用cv2.imdecode()函數(shù)將圖片文件轉(zhuǎn)換成流數(shù)據(jù),賦值到內(nèi)存緩存中,便于后續(xù)圖像操作。使用cv2.resize()函數(shù)對讀取的圖像進行縮放,以免圖像過大導(dǎo)致識別耗時過長。

2.4.2 降噪

使用cv2.GaussianBlur()進行高斯去噪。使用cv2.morphologyEx()函數(shù)進行開運算,再使用cv2.addWeighted()函數(shù)將運算結(jié)果與原圖像做一次融合,從而去掉孤立的小點,毛刺等噪聲。
高斯去噪 :

if blur > 0:  img = cv2.GaussianBlur(img, (blur, blur), 0)  
oldimg = img  
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  
# cv2.imshow('GaussianBlur', img)  
kernel = np.ones((20, 20), np.uint8)  
img_opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)  # 開運算  
img_opening = cv2.addWeighted(img, 1, img_opening, -1, 0);  # 與上一次開運算結(jié)果融合  
# cv2.imshow('img_opening', img_opening)  

在這里插入圖片描述
在這里插入圖片描述

2.4.3 二值化

使用cv2.threshold()函數(shù)進行二值化處理,再使用cv2.Canny()函數(shù)找到各區(qū)域邊緣。

ret, img_thresh = cv2.threshold(img_opening, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)  # 二值化  
img_edge = cv2.Canny(img_thresh, 100, 200)  
# cv2.imshow('img_edge', img_edge)  

在這里插入圖片描述

2.4.4 將圖像邊緣連接為一個整體

使用**cv2.morphologyEx()cv2.morphologyEx()**兩個函數(shù)分別進行一次開運算(先腐蝕運算,再膨脹運算)和一個閉運算(先膨脹運算,再腐蝕運算),去掉較小區(qū)域,同時填平小孔,彌合小裂縫。將車牌位置凸顯出來。

kernel = np.ones((self.cfg["morphologyr"], self.cfg["morphologyc"]), np.uint8)  
img_edge1 = cv2.morphologyEx(img_edge, cv2.MORPH_CLOSE, kernel)  # 閉運算  
img_edge2 = cv2.morphologyEx(img_edge1, cv2.MORPH_OPEN, kernel)  # 開運算  
# cv2.imshow('img_edge2', img_edge2)  

在這里插入圖片描述

2.4.5 查找車牌(矩形區(qū)域)

查找圖像邊緣整體形成的矩形區(qū)域,可能有很多,車牌就在其中一個矩形區(qū)域中,逐個排除不是車牌的矩形區(qū)域。車牌形成的矩形區(qū)域長寬比在2到5.5之間,因此使用cv2.minAreaRect()函數(shù)框選矩形區(qū)域計算長寬比,長寬比在2到5.5之間的可能是車牌,其余的矩形排除。最后使用cv2.drawContours()函數(shù)將可能是車牌的區(qū)域在原圖中框選出來。
在這里插入圖片描述

2.4.6 圖形修正

矩形區(qū)域可能是傾斜的矩形,需要矯正,以便使用顏色定位,從而進一步確認(rèn)是否是車牌。類似下兩圖(僅列舉出兩個,可能有很多)。
在這里插入圖片描述 在這里插入圖片描述
在這里插入圖片描述

2.4.7 顏色識別

使用顏色定位,排除不是車牌的矩形,目前只識別車牌的顏色主要為藍(lán)、綠、黃三種顏色車牌。根據(jù)矩形的顏色不同從而選出最可能是車牌的矩形。同時匹配出車牌的類型(顏色類型)。使用參數(shù)為cv2.COLOR_BGR2HSVcv2.cvtColor()函數(shù)將原始的RGB圖像轉(zhuǎn)換成HSV圖像,以便定位顏色。
基于HSV顏色模型可知色調(diào)H的取值范圍為0°~360°,從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍(lán)色為240°。它們的補色是:黃色為60°,青色為180°,品紅為300°;查閱相關(guān)資料確定出下表:

黃色綠色藍(lán)色
H14-3434-9999-124

根據(jù)上表計算出每個矩形中各顏色的占有量,比較每個矩形三個顏色的占有量,即可確定最可能是車牌的矩形以及車牌顏色。
在這里插入圖片描述

2.4.8 車牌部分二值化

利用參數(shù)為cv2.COLOR_BGR2GRAYcv2.cvtColor()函數(shù)將定位到的車牌部分RGB圖像轉(zhuǎn)化為灰度圖像,再利用cv2. threshold() 函數(shù)將灰度圖像二值化。需要注意的是,黃、綠色車牌字符比背景暗、與藍(lán)的車牌剛好相反,所以黃、綠車牌在二值化前需要利用cv2.bitwise_not( )函數(shù)取反向。

# 做一次銳化處理  
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)  # 銳化  
card_img = cv2.filter2D(card_img, -1, kernel=kernel)  
# cv2.imshow("custom_blur", card_img)  # RGB轉(zhuǎn)GARY  
gray_img = cv2.cvtColor(card_img, cv2.COLOR_BGR2GRAY)  
# cv2.imshow('gray_img', gray_img)  # 黃、綠車牌字符比背景暗、與藍(lán)車牌剛好相反,所以黃、綠車牌需要反向  
if color == "green" or color == "yellow":  gray_img = cv2.bitwise_not(gray_img)  
# 二值化  
ret, gray_img = cv2.threshold(gray_img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)  
# cv2.imshow('gray_img', gray_img)

2.4.9 字符分割(投影法)

根據(jù)設(shè)定的閾值和圖片直方圖,找出波峰,利用找出的波峰,分隔圖片。因為車牌中“ ? ”也會產(chǎn)生一組波峰,因此將八組波峰中的第三組去除掉,即可得到每個字符的波峰,再根據(jù)每組波峰的寬度分割牌照圖像得到每個字符的圖像。
在這里插入圖片描述

2.4.10 匹配模板

將分割后的每個圖像逐個與已訓(xùn)練好的模板進行匹配,得到識別結(jié)果。

from _collections import OrderedDict
from flask import Flask, request, jsonify
from json_utils import jsonify
import numpy as np
import cv2
import time
from collections import OrderedDict
from Recognition import PlateRecognition# 實例化
app = Flask(__name__)
PR = PlateRecognition()# 設(shè)置編碼-否則返回數(shù)據(jù)中文時候-亂碼
app.config['JSON_AS_ASCII'] = False# route()方法用于設(shè)定路由;類似spring路由配置
@app.route('/', methods=['POST'])  # 在線識別
def forecast():# 獲取輸入數(shù)據(jù)stat = time.time()file = request.files['image']img_bytes = file.read()image = np.asarray(bytearray(img_bytes), dtype="uint8")image = cv2.imdecode(image, cv2.IMREAD_COLOR)RES = PR.VLPR(image)if RES is not None:result = OrderedDict(Error=0,Errmsg='success',InputTime=RES['InputTime'],UseTime='{:.2f}'.format(time.time() - stat),  # RES['UseTime'],Number=RES['Number'],From=RES['From'],Type=RES['Type'],List=RES['List'])else:result = OrderedDict(Error=1,Errmsg='unsuccess')return jsonify(result)if __name__ == '__main__':app.run()

三. 🦁 程序運行結(jié)果

系統(tǒng)測試結(jié)果
在這里插入圖片描述
點擊打開文件,在本地中選擇要識別的車輛的照片
在這里插入圖片描述
在這里插入圖片描述
點擊導(dǎo)出數(shù)據(jù),得到所識別的車牌數(shù)據(jù)
在這里插入圖片描述

四. 🦁 算法性能

每次處理時間小于1s
算法準(zhǔn)確度為97%

五. 🦁 總結(jié)

設(shè)計過程中對于車牌部分的矩形的識別,出現(xiàn)識別錯誤區(qū)域的問題,通過查找網(wǎng)上的相關(guān)案例設(shè)定好判斷條件以及和周圍相同題目的同學(xué)請教其如何識別出車牌區(qū)域得以解決。通過此次綜合項目練習(xí),讓我對以往的知識點的運用有了更進一步的實踐和運用。

tips:
一個數(shù)字圖像分析期末考核實驗,如果您喜歡,可以一鍵三連喲!!!
【源碼】后續(xù)會傳上來,敬請期待吧!

http://aloenet.com.cn/news/39483.html

相關(guān)文章:

  • 公司網(wǎng)站建設(shè)方案百度推廣管理系統(tǒng)
  • 黃驊港十里金沙灘門票重慶網(wǎng)站seo技術(shù)
  • js網(wǎng)站評論框小紅書推廣價目表
  • 華強北 做網(wǎng)站海外推廣營銷平臺
  • 對互聯(lián)網(wǎng)網(wǎng)站的理解網(wǎng)站維護費用
  • 網(wǎng)站權(quán)重為零百度快速優(yōu)化排名軟件
  • 網(wǎng)站打開速度很慢濟南疫情最新情況
  • 深圳建筑業(yè)協(xié)會石家莊seo顧問
  • 博野網(wǎng)站建設(shè)江西省水文監(jiān)測中心
  • linux怎么做網(wǎng)站怎么提高關(guān)鍵詞搜索權(quán)重
  • 網(wǎng)站正在開發(fā)中鄭州谷歌優(yōu)化外包
  • wordpress下拉篩選重慶做seo外包的
  • wordpress科技主題網(wǎng)站排名優(yōu)化公司
  • seo優(yōu)化排名推廣排名優(yōu)化系統(tǒng)
  • 網(wǎng)頁設(shè)計模板網(wǎng)站推薦外包網(wǎng)絡(luò)推廣公司
  • 上海網(wǎng)站開發(fā)公司外包自學(xué)seo能找到工作嗎
  • asp網(wǎng)站制作設(shè)計教程佛山網(wǎng)站優(yōu)化軟件
  • 海南省住房和城鄉(xiāng)建設(shè)廳網(wǎng)站首頁排名前50名免費的網(wǎng)站
  • 網(wǎng)站建設(shè) 云計算搜索數(shù)據(jù)
  • wordpress企業(yè)網(wǎng)站制作鄭州seo優(yōu)化
  • 這幾年做啥網(wǎng)站致富推廣鏈接讓別人點擊
  • 門戶網(wǎng)站建設(shè)如何入賬銅陵seo
  • 美國十大購物網(wǎng)站免費注冊個人網(wǎng)站不花錢
  • 長安東莞網(wǎng)站設(shè)計百度掃一掃識別圖片在線
  • logo設(shè)計培訓(xùn)寧波seo網(wǎng)絡(luò)推廣優(yōu)化價格
  • 網(wǎng)站網(wǎng)頁設(shè)計中怎么添加頁碼信息谷歌海外推廣
  • 網(wǎng)站方案策劃5118營銷大數(shù)據(jù)
  • wordpress屏蔽垃圾國外ip領(lǐng)碩網(wǎng)站seo優(yōu)化
  • 網(wǎng)站建設(shè)服務(wù)好公司排名google瀏覽器官網(wǎng)下載
  • 做公司網(wǎng)站計入什么會計科目seo用什么論壇引流