将车牌识别系统细分为三个部分:
1.车牌检测
2.字符分割
3.字符识别
1.车牌检测
为实现更稳定的检测性能,使用yolo来对车牌进行识别。具体的训练方法见darknet用自己的数据进行训练。数据由EasyPR提供的200多张和自己从网上爬的几百张组成,爬虫脚本和数据标注方法见自行准备深度学习训练数据。最终得到的效果不错,下面是一些测试结果:
2.字符分割
利用EasyPR开源的代码来实现字符分割,在源代码下修改如下:
1.src/core/plate_locate.cpp中注释掉int CPlateLocate::plateLocate(Mat src, vector &resultVec, int index)函数中的两行:
int CPlateLocate::plateLocate(Mat src, vector<Mat> &resultVec, int index) {
vector<CPlate> all_result_Plates;
plateColorLocate(src, all_result_Plates, index);
//plateSobelLocate(src, all_result_Plates, index);
//plateMserLocate(src, all_result_Plates, index);
for (size_t i = 0; i < all_result_Plates.size(); i++) {
CPlate plate = all_result_Plates[i];
resultVec.push_back(plate.getPlateMat());
}
return 0;
}
2.将test中全部删除,只保留chars.hpp和main.cpp
chars.hpp:
#ifndef EASYPR_CHARS_HPP
#define EASYPR_CHARS_HPP
namespace easypr {
namespace demo {
int test_chars_segment() {
cv::Mat src = cv::imread("resources/image/try_3.jpg");
std::vector<cv::Mat> resultVec;
CPlate