一、介紹
易車庫EasyPR是一個基於開源庫的車牌識別系統,由中國科學院自動化研究所-AI車聯網創新中心研發,最早於2013年發布第一個版本。EasyPR具有以下特點:
- 支持中國大陸、香港、澳門、台灣等多個地區的車牌識別
- 識別率高,準確率達到90%,能夠處理極端場景(如雨天、夜晚、刻意遮擋等)下的車牌識別問題
- 易於擴展,支持用戶自定義識別模型的訓練和部署
- 易於使用,提供C++、Python、Java三種語言的接口
二、安裝
1. 環境要求
EasyPR支持Windows、Linux、macOS等操作系統,需要安裝如下幾個必需的庫:
- OpenCV 3.0以上(必須)
- Tesseract OCR引擎(可選)
- Caffe深度學習框架(可選)
2. 安裝命令
以Ubuntu 18.04為例進行安裝,其他操作系統請根據官網提供的指南進行安裝。
sudo apt-get -y update
sudo apt-get -y install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get -y install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get -y install libopencv-dev python3-opencv
git clone https://github.com/liuruoze/EasyPR.git
cd EasyPR/
mkdir build && cd build/
cmake ..
make -j8
sudo make install
三、使用
1. C++接口
#include <iostream>
#include <easypr.h>
using namespace easypr;
int main(int argc, char *argv[]) {
std::string imgPath = argv[1];
cv::Mat src = cv::imread(imgPath);
CPlateRecognize pr;
pr.setResultShow(false);
pr.setDetectType(PR_DETECT_CMSER);
std::vector<CPlate> plateVec;
pr.plateRecognize(src, plateVec);
for (auto plate : plateVec) {
std::cout << "plate str: " << plate.getPlateStr() << std::endl;
std::cout << "plate color: " << getPlateColorStr(plate.getPlateColor()) << std::endl;
std::cout << "confidence: " << plate.getConfidence() << std::endl << std::endl;
}
return 0;
}
2. Python接口
import cv2
from libeasypr import easypr
img_path = input("Enter image path: ")
src = cv2.imread(img_path)
pr = easypr.PlateRecognizer()
pr.setResultShow(False)
pr.setDetectType(easypr.PR_DETECT_CMSER)
plateVec = pr.plateRecognize(src)
for plate in plateVec:
print("plate str: {}".format(plate.getPlateStr()))
print("plate color: {}".format(easypr.getPlateColorStr(plate.getPlateColor())))
print("confidence: {}".format(plate.getConfidence()))
print()
3. Java接口
import java.util.List;
import java.util.Scanner;
import cn.liwh.easycar.easypr.EasyPR;
public class PlateRecognizerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter image path: ");
String imgPath = sc.nextLine();
EasyPR pr = EasyPR.create("./lib/libjniEasyPR.so");
List<String> plateVec = pr.plateRecognize(imgPath);
for (String plate : plateVec) {
System.out.println("plate str: " + plate);
}
}
}
四、訓練自定義模型
默認的EasyPR模型在較為極端的場景下可能會出現識別錯誤的情況,但是,EasyPR提供了用戶自行訓練並部署模型的功能,從而讓我們可以在特定的場景下提高識別率。
EasyPR提供了如下幾個命令來完成自定義模型的訓練:
- prepare_dataset.py:用於生成訓練數據集
- train_ann.py:用於訓練神經網絡模型,並存儲模型權重
- gen_anni.py:用於將神經網絡模型轉換為C++代碼,並存儲在/easypr/core/dnn/include/anni_gen.h中
這裡就不展開詳細說明如何使用這些命令訓練模型,讀者可以參考EasyPR官方文檔中的相關內容。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/186634.html