This research aims at simply developping plate recognition project based on deep learning methods, with low complexity and high speed. This project has been used by some commercial corporations. Free and open source, deploying by Zeusee. this pipline also can apply to other countries license plate by training
HyperLPR是一个使用深度学习针对对中文车牌识别的实现,与其他开源的中文车牌识别框架相比,它的检测速度和鲁棒性和多场景的适应性都要好于其他的开源框架。
- 在线测试地址(已失效)。
- 相关技术博客(技术文章会在接下来的几个月的时间内连续更新)。
- 带UI界面的工程(感谢群内小伙伴的工作)。
- 端到端(多标签分类)训练代码(感谢群内小伙伴的工作)。
- 端到端(CTC)训练代码(感谢群内小伙伴工作)。
- 训练代码和字符分割介绍。
- IOS版本 xiaojun123456贡献。
- 编译好的OpenCV_3.3.1_VS2013_Win64 版本;(采用VS2015可以使用opencv_3.3以上官方提供的Release版本)。
- 增加了端到端模型的cpp实现,识别速度比分割快30%(Linux)(2018.1.31)
- 增加字符分割训练代码和字符分割介绍(2018.1)
- 更新了Android实现,大幅提高准确率和速度 (骁龙835 (720x1280) ~50ms )(2017.12.27)
- 添加了IOS版本的实现(感谢xiaojun123456的工作)
- 添加端到端的序列识别模型识别率大幅度提升,使得无需分割字符即可识别,识别速度提高20% (2017.11.17)
- 新增的端到端模型可以识别新能源车牌、教练车牌、白色警用车牌、武警车牌 (2017.11.17)
- 更新Windows版本的Visual Studio 2015 工程(2017.11.15)
- 增加cpp版本,目前仅支持标准蓝牌(需要依赖OpenCV 3.3) (2017.10.28)
- 提供字符字符识别的训练代码
- 改进精定位方法
- C++版的端到端识别模型
- 速度快 720p ,单核 Intel 2.2G CPU (macbook Pro 2015)平均识别时间低于100ms
- 基于端到端的车牌识别无需进行字符分割
- 识别率高,仅仅针对车牌ROI在EasyPR数据集上,0-error达到 95.2%, 1-error识别率达到 97.4% (指在定位成功后的车牌识别率)
- 轻量 总代码量不超1k行
- Win工程中若需要使用静态库,需单独编译
- 本项目的C++实现和Python实现无任何关联,都为单独实现
- 在编译C++工程的时候必须要使用OpenCV 3.3(DNN 库),否则无法编译
- Keras (>2.0.0)
- Theano(>0.9) or Tensorflow(>1.1.x)
- Numpy (>1.10)
- Scipy (0.19.1)
- OpenCV(>3.0)
- Scikit-image (0.13.0)
- PIL
- Opencv 3.3
from hyperlpr import pipline as pp
import cv2
image = cv2.imread("filename")
image,res = pp.SimpleRecognizePlate(image)
print(res)
- 仅需要的依赖OpenCV 3.3 (需要DNN框架)
cd cpp_implementation
mkdir build
cd build
cmake ../
sudo make -j
#include "../include/Pipeline.h"
int main(){
pr::PipelinePR prc("model/cascade.xml",
"model/HorizonalFinemapping.prototxt","model/HorizonalFinemapping.caffemodel",
"model/Segmentation.prototxt","model/Segmentation.caffemodel",
"model/CharacterRecognization.prototxt","model/CharacterRecognization.caffemodel",
"model/SegmentationFree.prototxt","model/SegmentationFree.caffemodel"
);
//定义模型文件
cv::Mat image = cv::imread("/Users/yujinke/ClionProjects/cpp_ocr_demo/test.png");
std::vector<pr::PlateInfo> res = prc.RunPiplineAsImage(image,pr::SEGMENTATION_FREE_METHOD);
//使用端到端模型模型进行识别 识别结果将会保存在res里面
for(auto st:res) {
if(st.confidence>0.75) {
std::cout << st.getPlateName() << " " << st.confidence << std::endl;
//输出识别结果 、识别置信度
cv::Rect region = st.getPlateRect();
//获取车牌位置
cv::rectangle(image,cv::Point(region.x,region.y),cv::Point(region.x+region.width,region.y+region.height),cv::Scalar(255,255,0),2);
//画出车牌位置
}
}
cv::imshow("image",image);
cv::waitKey(0);
return 0 ;
}
- 单行蓝牌
- 单行黄牌
- 新能源车牌
- 白色警用车牌
- 使馆/港澳车牌
- 教练车牌
- 武警车牌
- 民航车牌
- 双层黄牌
- 双层武警
- 双层军牌
- 双层农用车牌
- 双层个性化车牌
- 体验 Android APP:https://fir.im/HyperLPR (根据图片尺寸调整程序中的尺度,提高准确率)
- 感谢 sundyCoder Android 版本完善
车牌识别框架开发时使用的数据并不是很多,有意着可以为我们提供相关车牌数据。联系邮箱 [email protected]。
如果您愿意支持我们持续对这个框架的开发,可以通过下面的链接来对我们捐赠。
- HyperLPR讨论QQ群:673071218, 加前请备注HyperLPR交流。