OpenALPR 為一開源車牌辨識程式庫(github連結)。
最新的 Ubuntu 16.04 上已納入系統套件庫,可直接 apt-get 安裝,不過截至目前為止(2017/02) raspbian 上還沒有編譯好的套件,需要手動編譯安裝。
這裡亦列出 Ubuntu 16.04 上的套件安裝方法供參考
Ubuntu 16.04
$ sudo apt-get update && sudo apt-get install -y openalpr openalpr-daemon openalpr-utils libopenalpr-dev
用圖片檔測試結果:
$ wget http://plates.openalpr.com/ea7the.jpg
$ alpr -c us ea7the.jpg
$ wget http://plates.openalpr.com/h786poj.jpg
$ alpr -c eu h786poj.jpg
在 Raspberry Pi3 上安裝 OpenALPR
影像辨識向來都是 CPU intensive 應用,加上底下的程式編譯過程須花費長久時間,在 Pi3 上需要一個多小時的編譯時間,Pi2 應該也跑得動但編譯時間會增加,Pi1 就不建議了。
系統使用 raspbian jessie,OpenALPR 需要 OpenCV 與 tesseract-ocr,可分別獨立安裝。
安裝 OpenCV
在 Raspberry Pi3 安裝 OpenCV 最詳盡的 step by step 步驟莫過於這篇了。摘要如下:
確定記憶卡上有足夠的空間,下載與編譯需要用個 3~4G,我是用 8G 的卡安裝 raspbian lite,空間還夠用,記得使用 sudo raspi-config
設定將檔案系統擴展到使用整張記憶卡空間。
安裝編譯環境與工具
養成好習慣,先來個更新:
$ sudo apt-get update
$ sudo apt-get upgrade
安裝編譯環境與工具
$ sudo apt-get install build-essential cmake pkg-config
一些必要的相依性套件
$ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
$ sudo apt-get install libxvidcore-dev libx264-dev
要使用 OpenCV 的 highgui
圖形介面的需要這個:
$ sudo apt-get install libgtk2.0-dev
矩陣數值運算會用到
$ sudo apt-get install libatlas-base-dev gfortran
需要 python 標頭檔
$ sudo apt-get install python2.7-dev python3-dev
下載 OpenCV 與 OpenCV_contrib 程式庫原始碼檔案並解壓縮:
$ cd ~
$ wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.1.0.zip
$ unzip opencv.zip
$ wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
$ unzip opencv_contrib.zip
接著來搞定 Python 環境,建議使用 virtualenv + virtualenvwrapper 建立獨立環境,可避免干擾系統相關 Python 程式庫。
首先先重新手動安裝 pip,為什麼要手動安裝? 因為 raspbian 系統的 pip 版本太舊了!
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
安裝 virtualenv 與 virtualenvwrapper
$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/.cache/pip
修改 ~/.profile
,在檔案最後加入下列幾行:
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
想要不登出,重新載入系統環境變數,可用:
想要使用 python 2 的:
$ mkvirtualenv cv2 -p python2
想要使用 python 3 的:
$ mkvirtualenv cv3 -p python3
上面的 cv2/cv3 是自己取的名稱,方便辨識即可
爾後要切換不同 python 環境,使用 workon xx
即可,離開環境則使用 deactivate
指令,例如:
切換至名為 cv2 的 python 2 環境:
$ workon cv2
切換至名為 cv3 的 python 3 環境:
$ workon cv3
在系統提示符號前方會有一括號標示現在所處的 virtualenv 環境。
開始編譯安裝 OpenCV
$ cd ~/opencv-3.1.0/
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules \
-D BUILD_EXAMPLES=ON ..
$ make -j4
$ sudo make install
$ sudo ldconfig
注意 python 2 與 python 3 環境編譯安裝的 CV2.so 檔名有些不同,python 2 版本安裝於 /usr/local/lib/python2.7/site-packages/cv2.so
, python 3 則安裝為 /usr/local/lib/python3.4/site-packages/cv2.cpython-34m.so
在 virtualenv 環境中建立 cvs.so 檔連結
python 2 環境:
$ cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so
python 3 環境:
$ cd ~/.virtualenvs/cv/lib/python3.4/site-packages/
$ ln -s /usr/local/lib/python3.4/site-packages/cv2.cpython-34m.so cv2.so
測試
$ python
>>> import cv2
>>> cv2.__version__
'3.1.0'
>>>
大功告成!
安裝 tesseract-ocr 文字辨識程式庫
首先準備編譯工具,部分套件在安裝 OpenCV 時亦會安裝。
sudo apt-get install autoconf automake libtool
sudo apt-get install autoconf-archive
sudo apt-get install pkg-config
sudo apt-get install libpng12-dev
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install zlib1g-dev
如果需要安裝辨識訓練工具,另需要下列套件
sudo apt-get install libicu-dev
sudo apt-get install libpango1.0-dev
sudo apt-get install libcairo2-dev
tesseract-ocr 需要 leptonica 影像演算法套件,先來安裝 leptonica 程式庫。
安裝 leptonica
2017/02 版本下載
下載後解壓縮
$ tar xvzf leptonica-1.74.1.tar.gz
$ cd leptonica-1.74.1
兩種安裝方式,擇一使用
使用 autoconf
./configure --prefix=/usr/local/
make
sudo make install
使用 cmake
mkdir build
cd build
cmake ..
make
安裝 tesseract-ocr
git clone --depth 1 https://github.com/tesseract-ocr/tesseract.git
cd tesseract
./autogen.sh
./configure --enable-debug LDFLAGS="-L/usr/local/lib" CFLAGS="-I/usr/local/include"
make
sudo make install
sudo ldconfig
另外需要語言資料檔
可從 https://github.com/tesseract-ocr/tesseract/wiki/Data-Files
下載,存放於 tessdata 目錄
可設定環境變數指定資料檔路徑
export TESSDATA_PREFIX="/usr/local/share/"
安裝 OpenALPR
$ git clone https://github.com/openalpr/openalpr.git
$ cd openalpr/src
修改 CMakeLists.txt, 加入下列兩行:
SET (OpenCV_DIR "/home/pi/opencv-3.1.0/build")
SET (Tesseract_DIR "/home/pi/tesseract")
$ cmake ./
如果出現 lib4cplus 找不到,請 `sudo apt-get install lib4cplus-dev`
$ make
如果出現 curl.h 找不到,請 `sudo apt-get install libcurl4-openssl-dev`
$ sudo make install
完成後下載個車牌圖片進行測試,加上 --clock
參數,查看辨識計算時間
$ wget http://plates.openalpr.com/ea7the.jpg
$ alpr -c us ea7the.jpg --clock
底下是我的 Pi3 實際輸出結果,圖形處理加上辨識時間小於 1 秒,已達實用階段,如果再透過 GPIO 連接一些 sensor 與 relay 控制,應該可以實作出一簡易車牌辨識的停車場閘門系統吧? Oh Ye! Raspberry Pi 好棒棒!
[email protected]:~ $ alpr -c us ea7the.jpg --clock
Info in bmfCreate: Generating pixa of bitmap fonts from string
Total Time to process image: 482.089ms.
plate0: 10 results -- Processing Time = 143.435ms.
- EA7THE confidence: 91.0578
- EA7TBE confidence: 84.133
- EA7T8E confidence: 83.0083
- EA7TRE confidence: 82.7869
- EA7TE confidence: 82.5961
- EA7TME confidence: 80.2908
- EA7TH6 confidence: 77.0045
- EA7THB confidence: 75.5779
- EA7TH confidence: 74.6576
- EA7TB6 confidence: 70.0797
後記
影像辨識系統採用都是學習演算法,要提高精準度,就必須提供大量的圖片資料供學習,建立辨識樣式。然而每個國家與地區車牌樣式、尺寸、字體不盡相同,需針對每個地區的車牌建立學習資料庫。
OpenALPR 目前已內建幾個區域如 US、EU、KR、SG 等樣式資料庫,但沒有台灣地區。加上台灣 2015 年改版的 7 位數車牌,字體與以往的舊系統大不相同,增加了辨識複雜度。
實際以本地車牌測試,舊式車牌(2015年以前),直接以 US 樣式比對,已有相當不錯的正確率,信心度最高的項目通常即為正確車牌,但若遇到新式車牌,則經常會有頭尾掉字或誤認情形。
待有空時再來建立一個本地的車牌學習資料庫...