基于CRNN的中文车牌识别
1、概述
目前HyperLRP是一个开源的、基于深度学习高性能中文车牌识别库,本文主要在其基础上进行改动,自己训练一个crnn车牌识别模型。
2、可识别的车牌类型
- 单行蓝牌
- 单行黄牌
- 新能源车牌
- 白色警用车牌
- 使馆/港澳车牌
- 教练车牌
3、可识别的车牌类型
此处我们有依旧采用HyperLPR的
- cascade.xml 车牌检测模型 - 目前效果最好的cascade检测模型
PlateDetection::PlateDetection(std::string filename_cascade) {cascade.load(filename_cascade); };void PlateDetection::plateDetectionRough(cv::Mat InputImage, std::vector<PlateInfo> &plateInfos, int min_w, int max_w) {cv::Mat processImage;cv::cvtColor(InputImage, processImage, cv::COLOR_BGR2GRAY);std::vector<cv::Rect> platesRegions;cv::Size minSize(min_w, min_w / 4);cv::Size maxSize(max_w, max_w / 4);cascade.detectMultiScale(processImage, platesRegions, 1.1, 3, cv::CASCADE_SCALE_IMAGE, minSize, maxSize);for (auto plate : platesRegions){//此处稍微调整了一下,放大车牌截图int zeroadd_x = static_cast<int>(plate.width * 0.1);int zeroadd_y = static_cast<int>(plate.height * 0.4);int zeroadd_w = static_cast<int>(plate.width * 0.2);int zeroadd_h = static_cast<int>(plate.height * 0.8);plate.x -= zeroadd_x;plate.y -= zeroadd_y;plate.height += zeroadd_h;plate.width += zeroadd_w;cv::Mat plateImage = util::cropFromImage(InputImage, plate);PlateInfo plateInfo(plateImage, plate);plateInfos.push_back(plateInfo);} }
- crnn.onnx端到端的车牌识别模型
- 车牌识别模型训练可参考:crnn-pytorch: crnn字符识别
PlateRecognizer::PlateRecognizer(std::string filename_crnn)
{net = cv::dnn::readNet(filename_crnn);net.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);//net.setPreferableBackend(cv::dnn::DNN_BACKEND_INFERENCE_ENGINE);net.setPreferableTarget(cv::dnn::DNN_TARGET_CPU);
}inline float PlateRecognizer::Sigmoid(float x, std::vector<float> line_num)
{float sum = 0.f;for (int i = 0; i < line_num.size(); i++)sum += exp(line_num[i]);return static_cast<float>(exp(x) / sum);
}std::pair<std::string, float> PlateRecognizer::getPlateName(cv::Mat &plateImg)
{cv::Mat srcImg = plateImg.clone();if (plateImg.channels() == 3) {cvtColor(plateImg, srcImg, CV_BGR2GRAY);}srcImg.convertTo(srcImg, CV_32F, 1.0 / 255);srcImg -= 0.5; srcImg /= 0.5;cv::Mat blob = cv::dnn::blobFromImage(srcImg);net.setInput(blob);cv::Mat res = net.forward();std::string plate, temp_C = "-";float confidence = 0.0;int length = 0;std::vector<float> temp;for (int r = 0; r < res.size[0]; r++){cv::Mat slice = cv::Mat(1, res.size[2], CV_32F, res.ptr<float>(r));float *line = (float*)res.ptr<float>(r);for (int i = 0; i < slice.size[1]; i++) {temp.push_back(line[i]);}cv::Point p; double m;cv::minMaxLoc(slice, 0, &m, 0, &p);std::string c = p.x > 0 ? alphabet[p.x - 1] : "-";if (c != "-"){if (temp_C != c) {plate += alphabet[p.x - 1];}length++;confidence += Sigmoid((float)m, temp);}temp_C = c;temp.clear();}std::pair<std::string, float> plate_conf("none", 0.f);if (length > 0){plate_conf.first = plate;plate_conf.second = confidence / length;}return plate_conf;
}
4、检测结果
基于CRNN的中文车牌识别相关推荐
- 【车牌识别和动态称重系统】(二)基于树莓派+HyperLPR的中文车牌识别
引言 HyperLRP是一个开源的.基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP.C/C++.Python语言,Windows/Mac/Linux/Android/IO ...
- 基于Opencv的开源的中文车牌识别系统
真正的大师,永远都怀着一颗学徒的心! 一.项目简介 基于Opencv的开源的中文车牌识别系统. 二.实现功能 车牌定位 车牌判断 车牌监测 字符分割 字符鉴别 字符识别 车牌识别 车牌抽象 训练车牌识 ...
- 基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)
摘要:本文详细介绍基于深度学习的中文车牌识别与管理系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中既可以选择需要识别的车牌视频.图片文件.批量图片进行检测识别,也 ...
- 【深度学习实践】基于深度学习的车牌识别(python,车牌检测+车牌识别)
车牌识别具有广泛的应用前景,基于传统方法的车牌识别效果一般比较差,随着计算机视觉技术的快速发展,深度学习的方法能够更好的完成车牌识别任务. 本文提供了车牌识别方案的部署链接,您可以在网页上体验该模型的 ...
- HyperLPR 高性能开源中文车牌识别框架
概要 HyperLRP是一个开源的.基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP.C/C++.Python语言,Windows/Mac/Linux/Android/IO ...
- Python3 HyperLPR 中文车牌识别
HyperLPR 高性能开源中文车牌识别框架 github地址: https://github.com/szad670401/HyperLPR 在使用的过程中真的踩了好多坑,GitHub中项目文件很多 ...
- C++中文车牌识别检测系统源码
下载地址:C++中文车牌识别检测系统源码 其目标是成为一个简单.高效.准确的非限制场景(unconstrained situation)下的车牌识别库. 相比于其他的车牌识别系统,EasyPR有如下特 ...
- 基于 Spring Boot 的车牌识别系统(附项目地址)
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! gitee开源地址 " https://git ...
- delphi 数字识别_基于STM32单片机的车牌识别
系统介绍 使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...
最新文章
- 分享一点python 编码设置的知识
- Blackey win10 + python3.6 + VSCode + tensorflow-gpu + keras + cuda8 + cuDN6N环境配置(转载)
- dede整站动态化或是整站静态化方法
- java对象重用_JAVA:避免重复的创建对象
- java 调用SAP RFC函数错误信息集锦
- 怎样验证TextBox输入的全是数字 - .NET技术 / ASP.NET
- 数组去重(JavaScript)先从网上整理一波,待验证
- Architecture:话说科学家/工程师/设计师/商人
- 同一网段计算机无法共享打印机,Win7同一个局域网内共享打印机不成功的修复方法...
- 34. 二分查找左右边界
- 一个图文混排问题的解决过程
- linux故障模式,Linux操作系统出现严重故障后的救援模式
- Decide what you want,and go after it with everything you got!
- VM12即VMware Workstation 12 序列号
- 【MOOC-生物信息学-蛋白质结构预测与分析】(占坑)
- iOS申请证书,Certificates, Identifiers Profiles 简介
- Distiller 安装时环境配置的一些可选项
- Fliqlo.scr怎么安装
- java程序的可移植性
- ubuntu 22.04下载wine及一些问题