java车牌号识别EasyPR_EasyPR
EasyPR
EasyPR是一個中文的開源車牌識別系統,其目標是成為一個簡單、高效、準確的車牌識別引擎。
相比于其他的車牌識別系統,EasyPR有如下特點:
它基于openCV這個開源庫。這意味著你可以獲取全部源代碼,并且移植到opencv支持的所有平臺。
它能夠識別中文。例如車牌為蘇EUK722的圖片,它可以準確地輸出std:string類型的"蘇EUK722"的結果。
它的識別率較高。圖片清晰情況下,車牌檢測與字符識別可以達到80%以上的精度。
更新
本次更新是1.3 正式版,主要改進在于幾個方面:
1.相對原先的1.2版本,在完整識別率上有所提升:
2.增加了30張左右的新圖片,目前的測試圖片數達到了204張。
3.對“字符分割”類的代碼做了改善。
在1.4版本中計劃做以下幾點改善:
1.開放ANN訓練功能。
2.新的評價框架,更加合理的評估數據。
3.新的車牌定位算法。
跨平臺
目前除了windows平臺以外,還有以下其他平臺的EasyPR版本。一些平臺的版本可能會暫時落后于主平臺。
版本
開發者
版本
地址
linux
Micooz
1.3
已跟EasyPR整合
mac
zhoushiwei,Micooz
1.3
已跟EasyPR整合
兼容性
EasyPR是基于opencv2.4.8版本開發的,2.4.8以上的版本應該可以兼容,以前的版本可能會存在不兼容的現象。opencv3.0的版本還沒有經過測試。
例子
假設我們有如下的原始圖片,需要識別出中間的車牌字符與顏色:
經過EasyPR的第一步處理車牌檢測(PlateDetect)以后,我們獲得了原始圖片中僅包含車牌的圖塊:
接著,我們對圖塊進行OCR過程,在EasyPR中,叫做字符識別(CharsRecognize)。我們得到了一個包含車牌顏色與字符的字符串:
“藍牌:蘇EUK722”
版權
EasyPR的源代碼與訓練數據遵循Apache v2.0協議開源。
EasyPR的resources/image/general_test文件夾下的圖片數據遵循GDSL協議(通用數據共享協議)進行開放。
請確保在使用前了解以上協議的內容。
目錄結構
以下表格是本工程中所有目錄的解釋:
目錄
解釋
src
所有源文件
include
所有頭文件
test
測試程序
resources/model
機器學習的模型
resources/train
訓練數據與說明
resources/image
測試用的圖片
resources/doc
相關文檔
以下表格是resources/image目錄中子目錄的解釋:
目錄
解釋
general_test
GDTS(通用數據測試集)
native_test
NDTS(本地數據測試集)
tmp
Debug模式下EasyPR輸出中間圖片的目錄
以下表格是src目錄中子目錄的解釋:
目錄
解釋
core
核心功能
preprocess
SVM預處理
train
訓練目錄,存放模型訓練的代碼
util
輔助功能
以下表格是src目錄下一些核心文件的解釋與關系:
文件
解釋
plate_locate
車牌定位
plate_judge
車牌判斷
plate_detect
車牌檢測,是車牌定位與車牌判斷功能的組合
chars_segment
字符分割
chars_identify
字符鑒別
chars_recognise
字符識別,是字符分割與字符鑒別功能的組合
plate_recognize
車牌識別,是車牌檢測與字符識別的共有子類
feature
特征提取回調函數
plate
車牌抽象
core_func.h
共有的一些函數
以下表格是test目錄下文件的解釋:
文件
解釋
main.cpp
主命令行窗口
accuracy.hpp
批量測試
chars.hpp
字符識別相關
plate.hpp
車牌識別相關
使用
EasyPR的所有源代碼可在Github上的項目主頁直接打包下載得到。
由于Github在中國有時下載速度較慢,可以使用oschina的鏡像地址來下載。
如果你熟悉git版本控制工具,可以使用下面的命令來從Github里克隆代碼:
$ git clone https://github.com/liuruoze/EasyPR
EasyPR支持當前主流的操作系統,通常不需要對源代碼進行更改就可以編譯運行,盡管如此,不同平臺上IDE的配置也是有很大差異的,下面主要說明Windows,Linux以及Mac OS下的編譯方法。
Note: 無論在哪個平臺使用EasyPR,都要安裝對應平臺版本的opencv,建議使用正式穩定版本。
windows平臺下的opencv的配置可以參考這份博客。
Windows
Windows下的配置建議使用最新的Visual Studio 2013版本。
目前2010與2012下會存在編譯問題,這是由于老版本對C++ 11特性支持的不足導致的。
打開項目目錄下的解決方案文件EasyPR.sln。
Note: 該解決方案會加載兩個項目,一個是EasyPR,用于編譯src/下的源文件生成靜態庫libeasypr.lib;另一個是Demo,用來編譯test/下的main.cpp,并鏈接libeasypr.lib生成可執行程序。
配置OpenCV庫
OpenCV for Windows通常會將使用VS編譯好二進制文件放到opencv\build\目錄下。
EasyPR兩個項目的Debug和Release模式都會引用opencv.props屬性表,用屬性表管理器打開,修改用戶宏里面的OpenCV項,使之指向你的OpenCV的build目錄。
Note: 如果你使用的opencv版本不是2.4.11,請修改屬性表下的鏈接器-輸入-附加依賴項,調整為對應版本的lib。
Note: 如果你要使用X64的opencv庫或者其他版本的VS,請修改鏈接器-常規-附加庫目錄,調整為對應的版本。
生成解決方案
默認情況下,生成出現的libeasypr.lib和easypr_test.exe會放在bin\debug(release)下。
Note: 直接雙擊運行程序會出現找不到opencv動態庫的情況,這個時候只需要在opencv\build\x86(x64)\vc(..)\bin下找到缺失的dll放到執行目錄即可。
Linux & Mac OS
EasyPR使用CMake在Linux及Mac OS下進行構建,確保系統安裝了最新版本的CMake,然后在任意目錄(將存放編譯所需的Makefile)執行:
$ cmake path/to/EasyPR
完成后在同一目錄下執行編譯命令:
$ make
CMake將首先把EasyPR/src下的源文件編譯打包為靜態庫libeasypr.a,然后編譯test/main.cpp,鏈接靜態庫生成可執行程序easypr_test。
Note: 你可以直接利用EasyPR/include和這個靜態庫來調用EasyPR提供的函數接口編寫自己的程序。
運行Demo:
$ ./easypr_test // 進入菜單交互界面
$ ./easypr_test ? // 查看CLI幫助
命令行示例
可以向easypr_test[.exe]傳遞命令行參數來完成你想要的工作,目前Demo支持四個子命令,其他功能如字符識別將逐步加入。對于每個子命令的幫助信息可以傳入-h參數來獲取。
車牌識別
# 利用提供的SVM和ANN模型來識別一張圖片里面的所有車牌
$ ./easypr_test recognize -p resources/image/plate_recognize.jpg --svm resources/model/svm.xml --ann resources/model/ann.xml
# 或者更簡單一些(注意模型路徑)
$ ./easypr_test recognize -p resources/image/plate_recognize.jpg
SVM訓練
# 首先生成訓練用圖片
$ ./easypr_test svm --create --in raw/ --out learn/
# 接下來給訓練用圖片打標簽,自動把“是”車牌的圖塊放到has/,“不是”車牌的圖塊放到no/里,注意這里要使用svm.xml的原因是為了簡化你的分類工作量,你也可以手動對圖塊分類
$ ./easypr_test svm --tag --source=learn/ --has=has/ --no=no/ --svm=resources/model/svm.xml
# 接下來就是訓練過程了,--divide意味著訓練程序會對兩個目錄下的圖塊進行劃分,默認是70%的訓練數據,30%的測試數據,分別放在
# has/train(70%), has/test;
# no/train(70%), no/test
# Note: 目前你需要自己建立子目錄
$ ./easypr_test svm --train --has-plate=has/ --no-plate=no/ --divide --svm=save/to/svm.xml
詳細的開發與教程請見介紹與開發教程。
如果你在使用過程中遇到任何問題,請在這里告訴我們。
Contributors
liuruoze:1.0-1.2版作者,1.3版整合工作
海豚嘎嘎(車主之家):1.3版算法貢獻者,提升了車牌定位與字符識別的準確率
Micooz:1.3版架構改善與重構,linux與mac的跨平臺編譯等
jsxyhelu:deface版本一
zhoushiwei:deface版本二
ahccom:新的plateLocate函數
阿水:1.3版整合,數據標注等工作
鳴謝
taotao1233,邱錦山,唐大俠,jsxyhelu,如果有一天(zhoushiwei),學習奮斗,袁承志,
圣城小石匠,goldriver,Micooz,夢里時光,Rain Wang,任薛紀,ahccom,星夜落塵,海豚嘎嘎(車主之家),
劉超,Free&&Easy, 以及所有對EasyPR貢獻數據的熱心同學。
總結
以上是生活随笔為你收集整理的java车牌号识别EasyPR_EasyPR的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Delphi中使用indy SMTP发
- 下一篇: 如何在C++中调用python代码