1. 项目背景
开源项目HyperLPR,在车牌粗定位(提取)阶段,依赖于训练好的模型文件cascade.xml,而该文件是一个由基于OpenCV的Haar级联分类器训练出来的模型,HyperLPR作者有在他的博客中谈到了该模型文件的训练过程。
车牌粗定位大致程序流程:
以下内容记录训练cascade.xml模型文件的过程。
2. 环境准备
- Python2.7.14
- OpenCV3.0
- 其他依赖(image, opencv-python):
- 开源项目:OpenCV Cascade车牌检测器训练代码
- Tip:记住安装或下载解压的目录
3. 数据准备
- 正样片:最好使用项目具体应用,若无,可用开源项目Plate_Recognition-LPRnet下的车牌图像作为正样片,此项目正样片应置于
train-detector/china/
目录下 - 负样片:train-detector下的raw-neg已包含
4. prep.py使用说明
4.1. 变量说明
- 调整国家和车牌长度宽度,将以下代码置于导包语句后
- OPENCV_DIR:opencv安装目录
OPENCV_DIR= 'D:\\ProgramData\\OpenCV3.0.0\\opencv\\build\\x64\\vc11\\bin'
- BASE_DIR:指定prep所在的目录
BASE_DIR = 'G:\\PycharmProjects\\train-detector\\'
- OUTPUT_DIR:训练模型输出目录
- INPUT_NEGATIVE_DIR:负样本放置目录
INPUT_NEGATIVE_DIR = BASE_DIR + 'raw-neg\\'
- INPUT_POSITIVE_DIR:正样本输出目录
INPUT_POSITIVE_DIR = BASE_DIR + COUNTRY + '\\'
4.2. 训练过程(cmd切换到prep所在目录下)
- & ‘D:\ProgramData\Python27\python.exe’ prep.py neg
- & ‘D:\ProgramData\Python27\python.exe’ prep.py pos
- & ‘D:\ProgramData\Python27\python.exe’ prep.py train---->生成的语句复制运行
训练过程
可能出现的问题:<BEGIN OpenCV Error: Bad argument (Can not get new positive sample. The most possible reason is insufficient count of samples in given vec-file. ) in CvCascadeImageReader::PosReader::get, file C:\buildslave64\win64_amdocl\master_PackSlave-win64-vc11-shared\opencv\apps\traincascade\imagestorage.cpp, line 157
解决方法:参数numPos调低,如此处正样片有752,可设置numPos为652,原因参见
4.3. 训练结果
train-detector/out/cascade.xml
5. 相关知识点
- 基于OpenCV的Haar级联分类器
- OpenALPR的Train-Detector