您的位置:

易车库EasyPR

一、介绍

易车库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官方文档中的相关内容。