1. 程式人生 > >EasyPR--中文開源車牌識別系統 開發詳解(1)

EasyPR--中文開源車牌識別系統 開發詳解(1)

  在上篇文件中作者已經簡單的介紹了EasyPR,現在在本文件中詳細的介紹EasyPR的開發過程。

  正如淘寶誕生於一個購買來的LAMP系統,EasyPR也有它誕生的原型,起源於CSDN的taotao1233的一個部落格,博主以讀書筆記的形式記述了通過閱讀“Mastering OpenCV”這本書完成的一個車牌系統的雛形。

  這個雛形有幾個特點:1.將車牌系統劃分為了兩個過程,即車牌檢測和字元識別。2.整個系統是針對西班牙的車牌開發的,與中文車牌不同。3.系統的訓練模型來自於原書。作者基於這個系統,誕生了開發一個適用於中文的,且適合與協作開發的開源車牌系統的想法,也就是EasyPR

   當然了,現在車牌系統滿大街都是,隨便上下百度首頁都是大量的廣告,一些甚至宣稱自己實現了99%

的識別率。那麼,作者為什麼還要開發這個系統呢?這主要是基於時勢與機遇的原因。

眾所皆知,現在是大資料的時代。那麼,什麼是大資料?可能有些人認為這個只是一個概念或著炒作。但是大資料確是實實在在有著基礎理論與科學研究背景的一門技術,其中包含著分散式計算、記憶體計算、機器學習、計算機視覺、語音識別、自然語言處理等眾多計算機界嶄新的技術,而且是這些技術綜合的產物。事實上,大資料的“大”包含著4個特徵,即4V理念,包括Volume(體量)、Varity(多樣性)、Velocity(速度)、Value(價值)。

  見下圖的說明:

圖1 大資料技術的4V特徵

  綜上,大資料技術不僅包含資料量的大,也包含處理資料的複雜,和處理資料的速度,以及資料中蘊含的價值。而車牌識別這個系統,雖然傳統,古老,卻是包含了所有這四個特偵的一個大資料技術的縮影。

  在車牌識別中,你需要處理的資料是影象中海量的畫素單元;你處理的資料不再是傳統的結構化資料,而是影象這種複雜的資料;如果不能在很短的時間內識別出車牌,那麼系統就缺少意義;雖然一副影象中有很多的資訊,但可能僅僅只有那一小塊的資訊(車牌)以及車身的顏色是你關心,而且這些資訊都蘊含著巨大的價值。也就是說,車牌識別系統事實上就是現在火熱的大資料技術在某個領域的一個聚焦,通過了解車牌識別系統,可以很好的幫助你理解大資料技術的內涵,也能清楚的認識到大資料的價值。

  很神奇吧,也許你覺得車牌識別系統很低端,這不是隨便大街上都有的麼,而你又認為大資料技術很高階,似乎高大上的感覺。其實兩者本質上是一樣的。另外對於覺得大資料技術是虛幻的炒作念頭的同學,你們也可以瞭解一下車牌識別系統,就能知道大資料落在實地,事實上已經不知不覺進入我們的生活很長時間了,像一些其他的如搶票系統,語音助手等,都是大資料技術的真真切切的體現。所謂再虛幻的概念落到實處,就成了下里巴人,應該就是這個意思。所以對於炒概念要有所警覺,但是不能因此排除一切,要了解具體的技術內涵,才能更好的利用技術為我們服務。

  除了幫忙我們更好的理解大資料技術,使我們跟的上時代,開發一個車牌系統還有其他原因。

  那就是、現在的車牌系統,仍然還有許多待解決的挑戰。這個可能很多同學有疑問,你別騙我,百度上我隨便一搜都是99%,只要多少多少元,就可以99%。但是事實上,車牌識別系統業界一直都沒有一個成熟的百分百適用的方案。一些90%以上的車牌識別系統都是跟高清攝像機做了整合,由攝像頭傳入的高解析度圖片進入識別系統,可以達到較高的識別率。但是如果影象解析度一旦下來,或者圖裡的車牌髒了的話,那麼很遺憾,識別率遠遠不如我們的肉眼。也就是說,距離真正的智慧的車牌識別系統,目前已有的系統還有許多挑戰。什麼時候能夠達到人眼的精度以及識別速率,估計那時候才算是完整成熟的。

  那麼,有同學問,就沒有辦法進一步優化了麼。答案是有的,這個就需要談到目前火熱的深度學習與計算機視覺技術,使用多隱層的深度神經網路也許能夠解決這個問題。但是目前EasyPR並沒有採用這種技術,或許以後會採用。但是這個方向是有的。也就是說,通過研究車牌識別系統,也許會讓你一領略當今人工智慧與計算機視覺技術最尖端的研究方向,即深度學習技術。怎麼樣,聽了是不是很心動?最後扯一下,前端時間非常火熱Google大腦技術和百度深度學習研究院,都是跟深度學習相關的。

  下圖是一個深度學習(右)與傳統技術(左)的對比,可以看出深度學習對於資料的分類能力的優勢。

圖2 深度學習(右)與PCA技術(左)的對比

  總結一下:開發一個車牌識別系統可以讓你瞭解最新的時勢---大資料的內涵,同時,也有機遇讓你瞭解最新的人工智慧技術---深度學習。因此,不要輕易的小看這門技術中蘊含的價值。

  好,談價值就說這麼多。現在,我簡單的介紹一下EasyPR的具體過程。

  在上一篇文件中,我們瞭解到EasyPR包括兩個部分,但實際上為了更好進行模組化開發,EasyPR被劃分成了六個模組,其中每個模組的準確率與速度都影響著整個系統。

  具體說來,EasyPRPlateDetectCharsRecognize各包括三個模組。

  PlateDetect包括的是車牌定位,SVM訓練,車牌判斷三個過程,見下圖。

圖3 PlateDetect過程詳解 

  通過PlateDetect過程我們獲得了許多可能是車牌的圖塊,將這些圖塊進行手工分類,聚集一定數量後,放入SVM模型中訓練,得到SVM的一個判斷模型,在實際的車牌過程中,我們再把所有可能是車牌的圖塊輸入SVM判斷模型,通過SVM模型自動的選擇出實際上真正是車牌的圖塊。

  PlateDetect過程結束後,我們獲得一個圖片中我們真正關心的部分--車牌。那麼下一步該如何處理呢。下一步就是根據這個車牌圖片,生成一個車牌號字串的過程,也就是CharsRecognisze的過程。

  CharsRecognise包括的是字元分割,ANN訓練,字元識別三個過程,具體見下圖。

 

 圖4 CharsRecognise過程詳解

  在CharsRecognise過程中,一副車牌圖塊首先會進行灰度化,二值化,然後使用一系列演算法獲取到車牌的每個字元的分割圖塊。獲得海量的這些字元圖塊後,進行手工分類(這個步驟非常耗時間,後面會介紹如何加速這個處理的方法),然後喂入神經網路(ANN)的MLP模型中,進行訓練。在實際的車牌識別過程中,將得到7個字元圖塊放入訓練好的神經網路模型,通過模型來預測每個圖塊所表示的具體字元,例如圖片中就輸出了“蘇EUK722”,(這個車牌只是示例,切勿以為這個車牌有什麼特定選取目標。車主既不是作者,也不是什麼深仇大恨,僅僅為學術說明選擇而已)。

  至此一個完整的車牌識別過程就結束了,但是在每一步的處理過程中,有許多的優化方法和處理策略。尤其是車牌定位和字元分割這兩塊,非常重要,它們不僅生成實際資料,還生成訓練資料,因此會直接影響到模型的準確性,以及模型判斷的最終結果。這兩部分會是作者重點介紹的模組,至於SVM模型與ANN模型,由於使用的是OpenCV提供的類,因此可以直接看openCV的原始碼或者機器學習介紹的書,來了解訓練與判斷過程。

  好了,本期就介紹這麼多。下面的篇章中作者會重點介紹其中每個模組的開發過程與內容,但是時間不定,可能幾個星期發一篇吧。

  最後,祝大家國慶快樂,闔家幸福!

相關推薦

EasyPR--中文開源車牌識別系統 開發1

  在上篇文件中作者已經簡單的介紹了EasyPR,現在在本文件中詳細的介紹EasyPR的開發過程。   正如淘寶誕生於一個購買來的LAMP系統,EasyPR也有它誕生的原型,起源於CSDN的taotao1233的一個部落格,博主以讀書筆記的形式記述了通過閱讀“Mastering OpenCV”這本書完成的一

EasyPR--開發2車牌定位

  這篇文章是一個系列中的第三篇。前兩篇的地址貼下:介紹、詳解1。我撰寫這系列文章的目的是:1、普及車牌識別中相關的技術與知識點;2、幫助開發者瞭解EasyPR的實現細節;3、增進溝通。   EasyPR的專案地址在這:GitHub。要想執行EasyPR的程式,首先必須配置好openCV,具體可以參照這篇文

EasyPR--開發8文字定位

dont bubuko 通用 設置 光照 detect improve nmp easy 轉自https://www.cnblogs.com/subconscious/p/5637735.html 今天我們來介紹車牌定位中的一種新方法--文字定位方法(MSER),包括其主要

EasyPR--開發7顏色定位與偏斜扭轉

  本篇文章介紹EasyPR裡新的定位功能:顏色定位與偏斜扭正。希望這篇文件可以幫助開發者與使用者更好的理解EasyPR的設計思想。   讓我們先看一下示例圖片,這幅圖片中的車牌通過顏色的定位法進行定位並從偏斜的視角中扭正為正視角(請看右圖的左上角)。 圖1 新版本的定位效果     下面內容會對這兩

EasyPR--開發7字元分割

大家好,好久不見了。   一轉眼距離上一篇部落格已經是4個月前的事了。要問博主這段時間去幹了什麼,我只能說:我去“外面看了看”。 圖1 我想去看看    在外面跟幾家創業公司談了談,交流了一些大資料與機器視覺相關的心得與經驗。不過由於各種原因,博主又回來了。

EasyPR--開發9文字定位

  今天我們來介紹車牌定位中的一種新方法–文字定位方法(MSER),包括其主要設計思想與實現。接著我們會介紹一下EasyPR v1.5-beta版本中帶來的幾項改動。 一. 文字定位法   在EasyPR前面幾個版本中,最為人所詬病的就是定位效果不佳,尤其是在面對生活場景(例如手機拍攝)時。由於EasyP

EasyPR--開發6SVM開發

  在前面的幾篇文章中,我們介紹了EasyPR中車牌定位模組的相關內容。本文開始分析車牌定位模組後續步驟的車牌判斷模組。車牌判斷模組是EasyPR中的基於機器學習模型的一個模組,這個模型就是作者前文中從機器學習談起中提到的SVM(支援向量機)。  我們已經知道,車牌定位模組的輸出是一些候選車牌的圖片。但如何從

EasyPR--開發5顏色定位與偏斜扭轉

  本篇文章介紹EasyPR裡新的定位功能:顏色定位與偏斜扭正。希望這篇文件可以幫助開發者與使用者更好的理解EasyPR的設計思想。   讓我們先看一下示例圖片,這幅圖片中的車牌通過顏色的定位法進行定位並從偏斜的視角中扭正為正視角(請看右圖的左上角)。 圖1 新版本的定位效果     下

EasyPR--開發4形態學操作、尺寸驗證、旋轉等操作

  在上一篇深度分析與調優討論中,我們介紹了高斯模糊,灰度化和Sobel運算元。在本文中,會分析剩餘的定位步驟。  根據前文的內容,車牌定位的功能還剩下如下的步驟,見下圖中未塗灰的部分。 圖1 車牌定位步驟   我們首先從Soble運算元分析出來的邊緣來看。通過下圖可見,Sobel運算元有很強的區分性

EasyPR--開發3高斯模糊、灰度化和Sobel運算元

在上篇文章中我們瞭解了PlateLocate的過程中的所有步驟。在本篇文章中我們對前3個步驟,分別是高斯模糊、灰度化和Sobel運算元進行分析。 一、高斯模糊  1.目標   對影象去噪,為邊緣檢測演算法做準備。    2.效果   在我們的車牌定位中的第一步就是高斯模糊處理。    圖1 高斯

PHP與Java集成開發

new 編程語言 到你 其中 web-inf request 測試 add 輸入 很久以前,有人從www上看到看到天空上一個很亮的亮點,它就是Java語言,與此同時,在另一個地方一位夢想家也看到了一個亮點,它就是PHP。 時間一天天過去,這兩個亮點也變得越來越亮,很快,它

SpringBoot開發--SpringBoot配置檔案YML注意事項

轉載自:https://blog.csdn.net/qq_31001665/article/details/70197543#commentBox 一、多重層級讀取 在YML中我們再新增一個ZZP2的配置資訊,其中包含了girl節點以及girl下的name,age屬性。 zzp2:

SpringBoot開發--SpringBoot的配置檔案以及註解

轉載自:https://blog.csdn.net/qq_31001665/article/details/69938750 一、Spring Boot註解 通過上一篇文章,我們已經快速構建了一個spring boot的專案,那spring boot專案和我們之前使用的springMVC專案

SpringBoot開發--初識SpringBoot

轉載自:https://blog.csdn.net/qq_31001665/article/details/54803354 一、寫在前面的話: 越來越多的公司開始使用sprinbgboot作為後臺伺服器開發的框架,作為目前微服務框架的佼佼者,現在學習springboot框架是一個很好的機會

區塊鏈開源實現hyperledger fabric架構轉載

hyperledger fabric是區塊鏈中聯盟鏈的優秀實現,主要程式碼由IBM、Intel、各大銀行等貢獻,目前v1.1版的kafka共識方式可達到1000/s次的吞吐量。本文中我們依次討論:區塊鏈的共通特性、fabric核心概念、fabric的交易執行流程。本文來源於筆

SpringBoot開發 -- 使用JPA訪問資料庫上篇

更優雅的訪問資料庫JPA JPA訪問資料庫的優點: 通常我們訪問資料庫歸根結底無非就是增刪改查,作為開發人員,我們會寫大量的SQL,而這些SQL有大多是重複且枯燥的。無非就是庫名,表名的不同。為了提高開發效率,我們通常會使用ORM框架,而其中最著名的就是Hi

c++實戰開發類與物件

一、面向物件程式設計介紹 (一)什麼是面向物件?      面向將系統看成通過互動作用來完成特定功能的物件的集合。每個物件用自己的方法來管理資料。也就是說只有物件內部的程式碼能夠操作物件內部的資料。

微信小程式開發---微信小程式開發元件使用初步

1:建立一個微信小程式的工程 2:請參考如下連結裡面的內容,這是微信小程式的官方開發指南: https://mp.weixin.qq.com/debug/wxadoc/dev/component/button.html?t=20161222 3:可以拷貝部分例子程式到你

微信小程式開發---微信小程式APP生命週期

1:微信小程式APP的生命週期方法: 在微信小程式工程中的app.js中增加如圖1所示方法 圖1 編譯執行,檢視日誌如圖2,圖3所示:微信小程式啟動時,呼叫生命週期方法為:onLaunch方法(app.js)---onShow方法(app.js)---onLoad方法(首

微信小程式開發---微信小程式佈局基礎

1:Flex佈局 Flex佈局如圖1所示 圖1 1.1 Flex容器屬性 1.2 Flex容器內元素屬性 align如果定義會覆寫掉容器屬性中的justify-content,align-items設定的屬性 微信小程式開發工程中,新建檔案layout,然後新建各