------韋訪 20181016
上一講學(xué)習(xí)了怎么樣用opencv識別車牌,但是,我們只做到了將車牌上的字符分割出來,還沒有對字符進行識別,這一講先來學(xué)習(xí)OCR(Optical Character Recognition,光學(xué)字符識別)。目前OCR用的比較多的是開源框架Tesseract-OCR,所以就挑這個來學(xué)學(xué)。
Ubuntu的話,直接執(zhí)行命令:
sudo apt-get install tesseract-ocr
就可以安裝了,我沒試過。下面我們用源碼安裝。
下載tesseract-ocr源碼:
Github地址為:https://github.com/tesseract-ocr/tesseract
安裝步驟可以參考文檔:https://github.com/tesseract-ocr/tesseract/wiki/Compiling
安裝依賴:
首先安裝一些依賴工具和庫:
sudo apt-get install g++ # or clang++ (presumably)
sudo apt-get install autoconf automake libtool
sudo apt-get install pkg-config
sudo apt-get install libpng-dev
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install zlib1g-dev
如果想自己訓(xùn)練數(shù)據(jù),則還要安裝以下工具:
sudo apt-get install libicu-dev
sudo apt-get install libpango1.0-dev
sudo apt-get install libcairo2-dev
再安裝Leptonica:
注意Tesseract和Leptonica版本的對應(yīng),如下表,
安裝命令如下,
wget http://www.leptonica.org/source/leptonica-1.74.4.tar.gz
tar -zxvf leptonica-1.74.4.tar.gz
cd leptonica-1.74.4/
./configure
make -j8
編譯安裝:
先cd到源碼的根目錄,然后運行
mkdir local
./autogen.sh
./configure --with-extra-libraries=/usr/local/include
make -j8
sudo make install
sudo ldconfig
如果上面命令都通過,再執(zhí)行命令
tesseract
如果打印如下信息則說明安裝成功。
安裝語言包:
git clone https://github.com/tesseract-ocr/tessdata.git
然后將所有的.traineddata文件拷貝到/usr/local/share/tessdata/文件夾。
用tesseract測試文字識別:
我們要識別的圖片如上圖,運行以下命令,
tesseract 05.png 05 -l chi_sim
-l可以指定字庫文件,chi_sim是識別中文的字庫,運行后會生成05.txt文本文件,
可以看到,中文識別出來了,但是英文的都識別出什么鬼咯!那指定一個英文的字庫文件看看效果如何?運行命令,
tesseract 05.png 05_en -l eng
運行結(jié)果,
這下英文識別正確,中文沒識別出來。就不能同時識別中文和英文嗎?字庫就不能混用嗎?百度了以下,蠻多人都有這個疑問的,找了老半天,在這個博客找到方法,
https://www.jianshu.com/p/f09045a4fc8a
把兩個字庫用加法”+”連起來就可以了,命令如下,
tesseract 05.png 05 -l chi_sim+eng
運行結(jié)果,
想讓python調(diào)用tesseract,得先執(zhí)行以下命令安裝pytesseract,
sudo pip install pytesseract
安裝好以后,識別圖片里的字符就很簡單了,執(zhí)行以下代碼,
- import pytesseract as pyt
- from PIL import Image
- img = Image.open('05.png')
- text = pyt.image_to_string(img, lang='chi_sim+eng')
- print(text)
運行結(jié)果:
上面的例子既然能識別中文、英文和數(shù)字,那么,能否直接用來識別我們上一講提取出來的車牌呢?試試看,
扣出來的字符圖片為
- #encoding:utf-8
- import pytesseract as pyt
- from PIL import Image
- img = Image.open('chepai_img0.jpg')
- text = pyt.image_to_string(img, lang='chi_sim+eng')
- print('車牌:' + str(text))
運行結(jié)果:
什么都沒識別到,試試中文呢?原圖片為
也什么都沒識別出來。
既然使用官方的字庫無法識別出字符,那么,我們就應(yīng)該訓(xùn)練自己的數(shù)據(jù),訓(xùn)練需要用到一個工具---jTessBoxEditorFX,這個工具是java寫的,我的系統(tǒng)是ubuntu,jTessBoxEditorFX根目錄如下圖,
Windows系統(tǒng)直接雙擊train.bat文件即可,linux系統(tǒng)則運行train腳本,我電腦運行腳本后,提示錯誤如下:
Error: Could not find or load main class net.sourceforge.tessboxeditor.JTessBoxEditor
搞了半天不知什么原因,在我自己的電腦上運行也是這個問題,我就想會不會是這個工具不支持openjdk導(dǎo)致的?因為我兩臺電腦安裝的都是openjdk,然后,將openjdk改成Oracle的,果然就可以了。因為公司電腦要編譯安裝7.1系統(tǒng),只能用Openjdk,所以就不改公司電腦環(huán)境了,先往后學(xué),以后再補上OCR自己訓(xùn)練字庫這部分。
如果您感覺本篇博客對您有幫助,請打開支付寶,領(lǐng)個紅包支持一下,祝您掃到99元,謝謝~~