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的中文车牌识别相关推荐

  1. 【车牌识别和动态称重系统】(二)基于树莓派+HyperLPR的中文车牌识别

    引言 HyperLRP是一个开源的.基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP.C/C++.Python语言,Windows/Mac/Linux/Android/IO ...

  2. 基于Opencv的开源的中文车牌识别系统

    真正的大师,永远都怀着一颗学徒的心! 一.项目简介 基于Opencv的开源的中文车牌识别系统. 二.实现功能 车牌定位 车牌判断 车牌监测 字符分割 字符鉴别 字符识别 车牌识别 车牌抽象 训练车牌识 ...

  3. 基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)

    摘要:本文详细介绍基于深度学习的中文车牌识别与管理系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中既可以选择需要识别的车牌视频.图片文件.批量图片进行检测识别,也 ...

  4. 【深度学习实践】基于深度学习的车牌识别(python,车牌检测+车牌识别)

    车牌识别具有广泛的应用前景,基于传统方法的车牌识别效果一般比较差,随着计算机视觉技术的快速发展,深度学习的方法能够更好的完成车牌识别任务. 本文提供了车牌识别方案的部署链接,您可以在网页上体验该模型的 ...

  5. HyperLPR 高性能开源中文车牌识别框架

    概要 HyperLRP是一个开源的.基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP.C/C++.Python语言,Windows/Mac/Linux/Android/IO ...

  6. Python3 HyperLPR 中文车牌识别

    HyperLPR 高性能开源中文车牌识别框架 github地址: https://github.com/szad670401/HyperLPR 在使用的过程中真的踩了好多坑,GitHub中项目文件很多 ...

  7. C++中文车牌识别检测系统源码

    下载地址:C++中文车牌识别检测系统源码 其目标是成为一个简单.高效.准确的非限制场景(unconstrained situation)下的车牌识别库. 相比于其他的车牌识别系统,EasyPR有如下特 ...

  8. 基于 Spring Boot 的车牌识别系统(附项目地址)

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! gitee开源地址 " https://git ...

  9. delphi 数字识别_基于STM32单片机的车牌识别

    系统介绍    使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...

最新文章

  1. 分享一点python 编码设置的知识
  2. Blackey win10 + python3.6 + VSCode + tensorflow-gpu + keras + cuda8 + cuDN6N环境配置(转载)
  3. dede整站动态化或是整站静态化方法
  4. java对象重用_JAVA:避免重复的创建对象
  5. java 调用SAP RFC函数错误信息集锦
  6. 怎样验证TextBox输入的全是数字 - .NET技术 / ASP.NET
  7. 数组去重(JavaScript)先从网上整理一波,待验证
  8. Architecture:话说科学家/工程师/设计师/商人
  9. 同一网段计算机无法共享打印机,Win7同一个局域网内共享打印机不成功的修复方法...
  10. 34. 二分查找左右边界
  11. 一个图文混排问题的解决过程
  12. linux故障模式,Linux操作系统出现严重故障后的救援模式
  13. Decide what you want,and go after it with everything you got!
  14. VM12即VMware Workstation 12 序列号
  15. 【MOOC-生物信息学-蛋白质结构预测与分析】(占坑)
  16. iOS申请证书,Certificates, Identifiers Profiles 简介
  17. Distiller 安装时环境配置的一些可选项
  18. Fliqlo.scr怎么安装
  19. java程序的可移植性
  20. ubuntu 22.04下载wine及一些问题

热门文章

  1. Turtle系列之画一个简易的交通标志,安排安排【留作业】
  2. Split分离解析 RAID磁盘阵列 进程管理 日志管理
  3. 卖鞋月入5万、玩抖音买“大奔”:有些程序员收入靠副业,上班只为自律
  4. 如何解决origin导出图像有dome字样
  5. GNSS四大卫星导航系统导航电文构成
  6. 弹出模式窗口的returnValue问题
  7. Python|游邮APP技术路线
  8. joomla虚拟服务器,如何安装Joomla我们本地服务器
  9. libreoffice 开发文档_LibreOffice 用户文档
  10. 详解EBS接口开发之WIP模块接口