项目主页:https://github.com/zeusees/HyperLPR
1 C++中端到端的字符识别方法
此部分C++代码在HyperLPR-master\Prj-Win中test_segmentationFree.cpp、SegmentationFreeRecognizer.h、SegmentationFreeRecognizer.cpp、Pipeline.h,模型文件是\HyperLPR-master\Prj-Linux\lpr\model中SegmenationFree-Inception.caffemodel、SegmenationFree-Inception.prototxt。
1.1 模型网络结构
C++代码中的模型是用caffe实现的,在现有代码中,没有模型网络结构和模型训练,只给出了训练好的模型文件,所以如果要重新训练,需实现模型网络结构。模型网络结构详见SegmenationFree-Inception.caffemodel,模型的输入shape为 3 * 160 *40,输出shape为1 * 84 * 20(此模型能够识别长度可变的车牌字符,且python中端到端的字符识别采用ctc loss作为损失函数,后处理过程与ctc loss也极为相似,但没看见此模型的训练代码,只能猜测此模型是用ctc los训练)。如图:


1.2 测试结果
经过测试,该模型能够识别蓝牌和绿牌等长度可变的车牌,性能较好。用CCPD数据集测试结果如下:

2 python中端到端的字符识别方法
此部分测试的python代码在HyperLPR-master中demo.py、HyperLPRLite.py;此部分训练的python代码在hyperlpr-train-master中main.py。
2.1 模型网络结构
python代码中端到端的字符识别方法有两种:第一,ocr_plate_all_w_rnn_2.h5模型,此模型有训练代码(详见main.py,用keras实现),模型的输入shape为? * 160 * 40 * 3,输出shape为? * 16 * 1 * 84,损失函数为ctc loss。第二