版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、ython車牌識(shí)別系統(tǒng)開源代碼_Python+Tensorflow+CNN實(shí)現(xiàn)車牌識(shí)別的例代碼、項(xiàng)概述本次項(xiàng)標(biāo)是實(shí)現(xiàn)對動(dòng)成的帶有各種噪聲的車牌識(shí)別。在噪聲擾情況下,車牌字符分割較困難,此次車牌識(shí)別是將車牌7個(gè)字符同時(shí)訓(xùn)練,字符包括31個(gè)省份簡稱、10個(gè)阿拉伯?dāng)?shù)字、24個(gè)英字母(O和I除外),共有65個(gè)類別,7個(gè)字符使單獨(dú)的loss函數(shù)進(jìn)訓(xùn)練。(運(yùn)環(huán)境:tensorflow1.14.0-GPU版)、成車牌數(shù)據(jù)集import osimport cv2 as cvimport numpy as npfrom math import *from PIL import ImageFontfrom PIL
2、 import Imagefrom PIL import ImageDrawindex = 京: 0,滬: 1,津: 2,渝: 3,冀: 4,晉: 5,蒙: 6,遼: 7,吉: 8,: 9,蘇: 10,浙: 11,皖: 12,閩: 13,贛: 14,魯: 15,豫: 16,鄂: 17,湘: 18,粵: 19,桂: 20,瓊: 21,川: 22,貴: 23,云: 24,藏: 25,陜: 26,: 27,青: 28,寧: 29,新: 30,0: 31,1: 32,2: 33,3: 34,4: 35,5: 36,6: 37,7: 38,8: 39,9: 40,A: 41,B: 42,C: 43,D:
3、 44,E: 45,F: 46,G: 47,H: 48,J: 49,K: 50,L: 51,M: 52,N: 53,P: 54,Q: 55,R: 56,S: 57,T: 58,U: 59,V: 60,W: 61,X: 62,Y: 63,Z: 64chars = 京, 滬, 津, 渝, 冀, 晉, 蒙, 遼, 吉, ,蘇, 浙, 皖, 閩, 贛, 魯, 豫, 鄂, 湘, 粵,桂, 瓊, 川, 貴, 云, 藏, 陜, , 青, 寧,新, 0, 1, 2, 3, 4, 5, 6, 7, 8,9, A, B, C, D, E, F, G, H, J,K, L, M, N, P, Q, R, S, T,
4、 U,V, W, X, Y, Zdef AddSmudginess(img, Smu):模糊處理:param img: 輸圖像:param Smu:模糊圖像:return: 添加模糊后的圖像rows = r(Smu.shape0 - 50)cols = r(Smu.shape1 - 50)adder = Smurows:rows + 50,cols:cols + 50adder = cv.resize(adder, (50, 50)img = cv.resize(img,(50,50)img = cv.bitwise_not(img)img = cv.bitwise_and(adder, im
5、g)img = cv.bitwise_not(img)return imgdef rot(img, angel, shape, max_angel):添加透視畸變size_o = shape1, shape0size = (shape1+ int(shape0 * cos(float(max_angel ) / 180) * 3.14), shape0)interval = abs(int(sin(float(angel) / 180) * 3.14) * shape0)pts1 = np.float32(0, 0, 0, size_o1, size_o0, 0, size_o0, size_
6、o1)if angel 0:pts2 = np.float32(interval, 0, 0, size1, size0, 0, size0 - interval, size_o1)else:pts2 = np.float32(0, 0, interval, size1, size0 - interval, 0, size0, size_o1)M = cv.getPerspectiveTransform(pts1, pts2)dst = cv.warpPerspective(img, M,size)return dstdef rotRandrom(img, factor, size):添加放射
7、畸變:param img: 輸圖像:param factor: 畸變的參數(shù):param size: 圖標(biāo)尺:return: 放射畸變后的圖像shape = sizepts1 = np.float32(0, 0, 0, shape0, shape1, 0, shape1, shape0)pts2 = np.float32(r(factor), r(factor), r(factor), shape0 - r(factor), shape1 - r(factor), r(factor),shape1 - r(factor), shape0 - r(factor)M = cv.getPerspect
8、iveTransform(pts1, pts2)dst = cv.warpPerspective(img, M,size)return dstdef tfactor(img):添加飽和度光照的噪聲hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)hsv:, :, 0 = hsv:, :, 0 * (0.8 + np.random.random() * 0.2)hsv:, :, 1 = hsv:, :, 1 * (0.3 + np.random.random() * 0.7)hsv:, :, 2 = hsv:, :, 2 * (0.2 + np.random.rand
9、om() * 0.8)img = cv.cvtColor(hsv, cv.COLOR_HSV2BGR)return imgdef random_envirment(img, noplate_bg):添加然環(huán)境的噪聲,noplate_bg為不含車牌的背景圖bg_index = r(len(noplate_bg)env = cv.imread(noplate_bgbg_index)env = cv.resize(env, (img.shape1, img.shape0)bak = (img = 0)bak = bak.astype(np.uint8) * 255inv = cv.bitwise_a
10、nd(bak, env)img = cv.bitwise_or(inv, img)return imgdef GenCh(f, val):成中字符img = Image.new(RGB, (45, 70), (255, 255,255)draw = ImageDraw.Draw(img)draw.text(0, 3), val, (0, 0,0), font=f)img = img.resize(23, 70)A = np.array(img)return Adef GenCh1(f, val):成英字符img =Image.new(RGB, (23, 70), (255, 255,255)d
11、raw = ImageDraw.Draw(img)draw.text(0, 2), val, (0, 0,0), font=f) # val.decode(utf-8)A = np.array(img)return Adef AddGauss(img, level):添加斯模糊return cv.blur(img, (level * 2 + 1,level * 2 + 1)def r(val):return int(np.random.random() * val)def AddNoiseSingleChannel(single):添加斯噪聲diff = 255 - single.max()n
12、oise = np.random.normal(0, 1 + r(6), single.shape)noise = (noise - noise.min() / (noise.max() - noise.min()noise *= diff# noise= noise.astype(np.uint8)dst = single + noisereturn dstdef addNoise(img): # sdev = 0.5,avg=10img:, :, 0 = AddNoiseSingleChannel(img:, :, 0)img:, :, 1 = AddNoiseSingleChannel(
13、img:, :, 1)img:, :, 2 = AddNoiseSingleChannel(img:, :, 2)return imgclass GenPlate:def _init_(self, fontCh, fontEng, NoPlates):self.fontC = ImageFont.truetype(fontCh, 43,0)self.fontE = ImageFont.truetype(fontEng, 60,0)self.img = np.array(Image.new(RGB, (226, 70),(255, 255,255)self.bg = cv.resize(cv.i
14、mread(dataimagestemplate.bmp), (226, 70) # template.bmp:車牌背景圖self.smu = cv.imread(dataimagessmu2.jpg) # smu2.jpg:模糊圖像self.noplates_path = for parent, parent_folder, filenames in os.walk(NoPlates):for filename in filenames:path = parent + + filenameself.noplates_path.append(path)def draw(self, val):o
15、ffset = 2self.img0:70, offset+8:offset+8+23 = GenCh(self.fontC, val0)self.img0:70, offset+8+23+6:offset+8+23+6+23 = GenCh1(self.fontE, val1)for i in range(5):base = offset + 8 + 23 + 6 + 23 + 17 + i * 23 + i * 6self.img0:70, base:base+23 = GenCh1(self.fontE, vali+2)return self.imgdef generate(self,
16、text):if len(text) = 7:fg = self.draw(text) # decode(encoding=utf-8)fg = cv.bitwise_not(fg)com = cv.bitwise_or(fg, self.bg)com = rot(com, r(60)-30, com.shape,30)com = rotRandrom(com, 10,(com.shape1, com.shape0)com = tfactor(com)com = random_envirment(com, self.noplates_path)com = AddGauss(com, 1+r(4
17、)com = addNoise(com)return comstaticmethoddef genPlateString(pos, val):成車牌string,存為圖成車牌list,存為labelplateStr = plateList=box = 0, 0,0,0,0,0,0if pos != -1:boxpos = 1for unit, cpos in zip(box, range(len(box):if unit = 1:plateStr += valplateList.append(val)else:if cpos = 0:plateStr += charsr(31)plateLis
18、t.append(plateStr)elif cpos = 1:plateStr += chars41 + r(24)plateList.append(plateStr)else:plateStr += chars31 + r(34)plateList.append(plateStr)plate = plateList0b = plateListi-1 for i in range(len(plateList)plate.extend(b1:7)return plateStr, platestaticmethoddef genBatch(batchsize, outputPath, size):將成的車牌圖寫件夾,對應(yīng)的label寫label.txt:param batchsize: 批次:param outputPath: 輸出圖像的保存路徑:param size: 輸出圖像的尺:return: Noneif not os.path.exists(outputPath):os.mkdir(outputPath)outfile = open(dataplatelabel.txt, w, encoding=utf-8)for i in range(batchsize):plateStr, plate = G.genPlate
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026中國科協(xié)所屬單位招聘應(yīng)屆高校畢業(yè)生33人考試備考題庫及答案解析
- 2025天津津彩投資公司面向社會(huì)選聘1人(第25期)筆試考試備考題庫及答案解析
- 2025年山西省長治市人民醫(yī)院公開招聘碩士以上專業(yè)技術(shù)工作人員參考筆試題庫附答案解析
- 2025廣東省城市技師學(xué)院招聘工作人員1人考試筆試模擬試題及答案解析
- 深度解析(2026)GBT 26104-2010WGJ 型接中間軸鼓形齒式聯(lián)軸器
- 2025廣西百色平果市發(fā)展和改革局城鎮(zhèn)公益性崗位人員招聘1人備考筆試題庫及答案解析
- 2025福建三明經(jīng)濟(jì)開發(fā)區(qū)管理委員會(huì)直屬事業(yè)單位公開招聘專業(yè)技術(shù)人員2人模擬筆試試題及答案解析
- 2025山東青島海建投資有限公司附全資子公司招聘25人參考筆試題庫附答案解析
- 深度解析(2026)《GBT 25798-2010紡織染整助劑分類》(2026年)深度解析
- 深度解析(2026)《GBT 25736-2010棉花加工企業(yè)生產(chǎn)環(huán)境及安全管理要求》(2026年)深度解析
- 陜西單招數(shù)學(xué)試題及答案
- 應(yīng)收賬款債權(quán)轉(zhuǎn)讓協(xié)議
- 四川省宜賓市長寧縣2024-2025學(xué)年九年級(jí)上學(xué)期期末化學(xué)試題(含答案)
- CNAS-CC01:2015 管理體系認(rèn)證機(jī)構(gòu)要求
- 可行性報(bào)告商業(yè)計(jì)劃書
- 甲流防控知識(shí)培訓(xùn)課件
- DB32 T538-2002 江蘇省住宅物業(yè)管理服務(wù)標(biāo)準(zhǔn)
- 湖南師范大學(xué)課程毛概題庫
- 借住合同范本(2篇)
- 2025年民航華北空管局招聘筆試參考題庫含答案解析
- 公司反腐敗反賄賂培訓(xùn)
評論
0/150
提交評論