主頁 >  其他 > 基于深度學習的中文車牌識別與管理系統(含UI界面,Python代碼)

基于深度學習的中文車牌識別與管理系統(含UI界面,Python代碼)

2022-02-27 11:19:25 其他

攝像頭車牌識別

摘要:本文詳細介紹基于深度學習的中文車牌識別與管理系統,在介紹演算法原理的同時,給出Python的實作代碼以及PyQt的UI界面,在界面中既可以選擇需要識別的車牌視頻、圖片檔案、批量圖片進行檢測識別,也可以通過電腦自帶的攝像頭進行實時檢測、識別、管理車牌,通過車牌記錄查看歷史識別的車牌,博文提供了完整的Python代碼和使用教程,適合新入門的朋友參考,完整代碼資源檔案請轉至文末的下載鏈接,本博文目錄如下:

文章目錄

  • 前言
  • 1. 效果演示
  • 2. 車牌檢測與識別
  • 下載鏈接
  • 結束語

?點擊跳轉至文末所有涉及的完整代碼檔案下載頁?


前言

車牌識別其實是個經典的機器視覺任務了,通過影像處理技術檢測、定位、識別車牌上的字符,實作計算機對車牌的智能管理功能,如今在小區停車場、高速公路出入口、監控場所、自動收費站等地都有車牌識別系統的存在,車牌識別的研究也已逐步成熟,盡管該技術隨處可見了,但其實在精度和識別速度上還需要進一步提升,自己動手實作一個車牌識別系統有利于學習和理解影像處理的先進技術,

車牌識別的演算法經過了多次版本迭代,檢測的效率和準確率有所提升,從最初的基于LBP和Haar特征的車牌檢測,到后來逐步采用深度學習的方式如SSD、YOLO等演算法,車牌的識別部分也由字符匹配到深度神經網路,通過不斷驗證和測驗,其檢測和識別效果和適用性都更加突出,支持的模型也更為豐富,

網上的車牌識別程式代碼很多,大部分都是采用深度學習的目標檢測演算法等識別單張圖片中的車牌,但幾乎沒有人將其開發成一個可以展示的完整軟體,即使有的也是比較簡單的界面,對此這里給出博主設計的界面,不算精美但比較簡約風,功能也可以滿足單張圖片、批量圖片、視頻和攝像頭的識別檢測了,初始界面如下圖:

在這里插入圖片描述
檢測車牌時的界面截圖(點擊圖片可放大)如下圖,也可開啟攝像頭或視頻檢測:

車牌展示
詳細的功能演示效果參見博主的B站視頻或下一節的動圖演示,覺得不錯的朋友敬請點贊、關注加收藏!系統UI界面的設計作業量較大,界面美化更需仔細雕琢,大家有任何建議或意見和可在下方評論交流,


1. 效果演示

首先還是用動圖先展示一下效果,系統主要實作的功能是對圖片、視頻和攝像頭畫面中的車牌進行檢測和識別,識別的結果可視化顯示在界面和影像中,另外提供車牌識別歷史記錄和回看功能,演示效果如下,

(一)選擇單張 / 批量車牌識別

首先還是用動圖先展示一下效果,進入軟體界面后,點擊圖片選擇按鈕選擇一張圖片,點擊“開始運行”即可自動識別車牌并顯示結果在界面上;點擊歷史識別記錄的表格序號可回看識別記錄,本功能的界面展示如下圖所示:

圖片選擇
同樣的如果需要識別批量圖片,可以選擇一個包含多張圖片檔案的檔案夾,選擇好后點擊“開始運行”則逐個對每個檔案進行檢測和識別,結果與單張圖片時類似,可通過表格記錄回看識別結果:

在這里插入圖片描述

(二)車牌視頻識別效果展示

很多時候我們需要識別一段視頻中的車牌,這里設計了視頻選擇功能,點擊視頻按鈕可選擇待檢測的視頻,系統會自動決議視頻逐幀識別車牌,并將結果記錄在右下角表格中,效果如下圖所示:

車牌視頻識別演示
(三)攝像頭檢測效果展示

在真實場景中,我們往往利用設備攝像頭獲取實時畫面,同時需要對畫面中的車牌進行識別,因此本文考慮此功能,如下圖所示,點擊攝像頭按鈕后系統進入準備狀態,再點擊“開始運行”后,系統顯示實時畫面并開始檢測畫面中的車牌,識別結果展示并記錄:

攝像頭車牌識別


2. 車牌檢測與識別

目前,智能交通系統中集成運用計算機視覺、物聯網、人工智能等多種技術成為未來發展方向,其中,車牌識別(License Plate Recognition, LPR)技術作為一項重要技術,從獲取的影像中提取目標車輛的車牌資訊,成為完善智能交通管理運行的基礎,

由于本文介紹的是中文車牌,所以可以簡單了解一下國內汽車拍照的特點:字符數為七個,包括漢字、字母和數字,車牌顏色組合中,其中最常見的組合為普通小型汽車藍底白字和新能源汽車的漸變綠底黑字1

在這里插入圖片描述
由于本文介紹的是中文車牌,所以可以簡單了解一下國內汽車拍照的特點:字符數為七個,包括漢字、字母和數字,車牌輪廓長寬比例基本固定,車牌顏色組合中,其中最常見的組合為普通小型汽車藍底白字和新能源汽車的漸變綠底黑字,總結來說,車牌是一個有特點的影像區域,幾種特征可以綜合起來確定車牌定位,所以之前就有利用車牌與周圍環境的差異的演算法,目前常見的車牌定位演算法有以下 4 種:基于顏色、紋理、邊緣資訊的車牌定位演算法和基于人工神經網路的車牌定位演算法2

為了方便演示,博主繪制了一張車牌識別的流程圖,如下圖所示,常規的步驟包括影像采集、預處理、車牌定位、字符分割、字符識別、輸出結果,深度學習技術成熟之后,端到端的網路模型使得這一程序變得簡單起來,從思想上來說,基于深度學習的車牌識別實作思路主要包括兩個部分:(1)車牌檢測定位;(2)車牌字符識別,

在這里插入圖片描述
其中,車牌的檢測定位本質是一個特定的目標檢測(Object Detection)任務,即通過演算法框選出屬于車牌的位置坐標,以便將其與背景區分開來,可以認為檢測出的車牌位置才是我們的感興趣區域(Region Of Interest, ROI),好用的方法如Cascade LBP,它是一種機器學習的方法,可以利用OPenCV訓練級聯分類器,依賴CPU進行計算,參考網址:https://gitee.com/zeusees/HyperLPR,級聯分類器的方法對于常用場景效果比較好,檢測速度較快,曾經一度比較流行,但準確率一般,基于深度學習的檢測演算法有Mobilene-SSD、YOLO-v5等,利用大批量的標注資料進行訓練,訓練代碼可以參考開源代碼https://github.com/zeusees/License-Plate-Detector,

當ROI被檢測出來,如何對這一區域中的字符進行識別,這就涉及到采取的處理方式,第一種處理方式,首先利用一系列字符分割的演算法將車牌中的字符逐個分開,然后基于深度學習進行字符分類,得到識別結果,可參考的代碼地址:https://github.com/LCorleone/A-Simple-Chinese-License-Plate-Generator-and-Recognition-Framework;第二種,區別于第一種先分割再分類的兩步走方式,利用端到端的CTC( Connectionist Temporal Classification)網路直接進行識別,代碼地址:https://github.com/armaab/hyperlpr-train,

這里我們使用網上開源的HyperLPR中文車牌識別框架,首先匯入OpenCV和hyperlpr,讀取一張車牌圖片呼叫架構中的車牌識別方法獲得結果,以下代碼來自官方的示例:

#匯入包
from hyperlpr import *
#匯入OpenCVimport cv2
#讀入圖片
image = cv2.imread("demo.jpg")
#識別結果
print(HyperLPR_plate_recognition(image))

以上代碼運行結果如下,可以看出該方法識別了車牌的車牌字符、置信度值、車牌位置坐標、圖片尺寸等結果,

運行結果
這樣的結果還不夠直觀,我們寫一個函式將車牌的識別結果標注在圖片上,首先匯入相關依賴包,其代碼如下:

# 匯入包
from hyperlpr import *
# 匯入OpenCVimport cv2 as cv
from PIL import Image, ImageDraw, ImageFont
import numpy as np

新建一個函式drawRectBox,將影像資料、識別結果、字體等引數傳入,函式內部利用OpenCV和PIL庫添加標注框和識別結果的字符,其代碼如下:

def drawRectBox(image, rect, addText, fontC):
    cv.rectangle(image, (int(round(rect[0])), int(round(rect[1]))),
                 (int(round(rect[2]) + 8), int(round(rect[3]) + 8)),
                 (0, 0, 255), 2)
    cv.rectangle(image, (int(rect[0] - 1), int(rect[1]) - 16), (int(rect[0] + 75), int(rect[1])), (0, 0, 255), -1, cv.LINE_AA)
    img = Image.fromarray(image)
    draw = ImageDraw.Draw(img)
    draw.text((int(rect[0] + 1), int(rect[1] - 16)), addText, (255, 255, 255), font=fontC)
    imagex = np.array(img)
    return imagex

我們首先讀取圖片檔案,利用前面的HyperLPR_plate_recognition方法識別出車牌結果,呼叫以上函式獲得帶標注框的圖片,利用OpenCV的imshow方法顯示結果圖片,其代碼如下:

image = cv.imread('test3.jpeg')  # 讀取選擇的圖片
res_all = HyperLPR_plate_recognition(image)
fontC = ImageFont.truetype("./platech.ttf", 14, 0)
res, confi, axes = res_all[0]
image = drawRectBox(image, axes, res, fontC)
cv.imshow('Stream', image)
c = cv.waitKey(0) & 0xff

此時運行以上代碼可以得到如下結果:

在這里插入圖片描述
同理,識別視頻中的車牌也可以做類似的操作,不過我們需要先對視頻檔案進行逐幀讀取,然后采用以上的方式在圖片中標識出車牌并顯示,這部分代碼如下:

capture = cv.VideoCapture("./車牌檢測.mp4")  # 讀取視頻檔案
fontC = ImageFont.truetype("./platech.ttf", 14, 0)  # 字體,用于標注圖片

i = 1
while (True):
    ref, frame = capture.read()
    if ref:
        i = i + 1
        if i % 5 == 0:
            i = 0
            res_all = HyperLPR_plate_recognition(frame)  # 識別車牌
            if len(res_all) > 0:
                res, confi, axes = res_all[0]  # 獲取結果
                frame = drawRectBox(frame, axes, res, fontC)
            cv.imshow("num", frame)  # 顯示畫面

        if cv.waitKey(1) & 0xFF == ord('q'):
            break  # 退出
    else:
        break

以上代碼每5幀識別一次視頻中的車牌,將車牌的結果標注在畫面中進行實時顯示,運行結果的截圖如下所示:

在這里插入圖片描述
車牌的識別部分代碼演示完畢,對此我們完成了圖片和視頻的識別,然而這些還是簡單的腳本呈現,為了方便更換圖片、視頻以及管理車牌,還需要設計檔案選擇功能以及系統的UI界面,打開QtDesigner軟體,拖動以下控制元件至主視窗中,車牌識別系統的界面設計如下圖所示:

在這里插入圖片描述

控制元件界面部分設計好,接下來利用PyUIC工具將.ui檔案轉化為.py代碼檔案,通過呼叫界面部分的代碼同時加入對應的邏輯處理代碼,博主對其中的UI功能進行了詳細測驗,最終開發出一版流暢得到清新界面,就是博文演示部分的展示,完整的UI界面、測驗圖片視頻、代碼檔案,以及Python離線依賴包(方便安裝運行,也可自行配置環境),均已打包上傳,感興趣的朋友可以通過下載鏈接獲取,


下載鏈接

若您想獲得博文中涉及的實作完整全部程式檔案(包括測驗圖片、視頻,py, UI檔案等,如下圖),這里已打包上傳至博主的面包多平臺和CSDN下載資源,本資源已上傳至面包多網站和CSDN下載資源頻道,可以點擊以下鏈接獲取,已將所有涉及的檔案同時打包到里面,點擊即可運行,完整檔案截圖如下:

在這里插入圖片描述

在檔案夾下的資源顯示如下,其中包含了Python的離線依賴包,讀者可在正確安裝Anaconda和Pycharm軟體后,點擊bat檔案進行安裝,詳細演示也可見本人B站視頻,

在這里插入圖片描述

注意:本資源已經過除錯通過,下載后可通過Pycharm運行;運行界面的主程式為runMain.py,測驗識別圖片腳本可運行testPic.py,視頻測驗腳本可運行testVideo.py檔案,為確保程式順利運行,請配置Python依賴包的版本如下:???
(Python版本:3.7)
hyperlpr 0.0.2
Keras 2.2.4
tensorflow 1.13.1
numpy 1.21.5
Pillow 9.0.1
PyQt5 5.15.4
pyqt5-tools 5.15.4.3.2
opencv-python 3.4.9.31

完整資源下載鏈接1博主在面包多網站上的完整資源下載頁

完整資源下載鏈接2https://mianbaoduo.com/o/bread/mbd-YpiUlphp

注:以上兩個鏈接為面包多平臺下載鏈接,CSDN下載資源頻道下載鏈接稍后上傳,


結束語

由于博主能力有限,博文中提及的方法即使經過試驗,也難免會有疏漏之處,希望您能熱心指出其中的錯誤,以便下次修改時能以一個更完美更嚴謹的樣子,呈現在大家面前,同時如果有更好的實作方法也請您不吝賜教,


  1. 中華人民共和國公安部.GA36-2014. 中華人民共和國公共安全行業標準–中華人民共和國機動車號牌[S]. 北京:群眾出版社, 2014, 2-4 ??

  2. Du S, Ibrahim M, Shehata M, et al. Automatic license plate recognition (ALPR): A state-of-the-art review[J]. IEEE Transactions on circuits and systems for video technology, 2012, 23(2): 311-325. ??

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/433325.html

標籤:AI

上一篇:2019中國工程機器人大賽暨國際公開賽人工智能專案外骨骼賽總結

下一篇:全國30m精度二級分類土地利用資料

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more