Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mobile-LPR——面向移动端的准商业级车牌识别库

Mobile-LPR——面向移动端的准商业级车牌识别库

作者头像
CV君
发布于 2020-03-25 07:25:17
发布于 2020-03-25 07:25:17
1.9K00
代码可运行
举报
运行总次数:0
代码可运行
项目地址:

https://github.com/xiangweizeng/mobile-lpr

mobile-lpr

Mobile-LPR 是一个面向移动端的准商业级车牌识别库,以NCNN作为推理后端,使用DNN作为算法核心,支持多种车牌检测算法,支持车牌识别和车牌颜色识别。

特点

  • 超轻量,核心库只依赖NCNN,并且对模型量化进行支持
  • 多检测,支持SSD,MTCNN,LFFD等目标检测算法
  • 精度高,LFFD目标检测在CCPD检测AP达到98.9,车牌识别达到99.95%, 综合识别率超过99%
  • 易使用,只需要10行代码即可完成车牌识别
  • 易扩展,可快速扩展各类检测算法

算法流程

构建及安装

  1. 下载源码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/xiangweizeng/mobile-lpr.git
  1. 准备环境
  • 安装opencv4.0及以上, freetype库
  • 安装cmake3.0以上版本,支持c++11的c++编译器,如gcc-6.3
  1. 编译安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir build
cd build
cmake ..
make install

使用及样例

1.使用MTCNN检测

  • 代码样例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void test_mtcnn_plate(){
    pr::fix_mtcnn_detector("../../models/float", pr::mtcnn_float_detector);
    pr::PlateDetector detector = pr::IPlateDetector::create_plate_detector(pr::mtcnn_float_detector);

    pr::fix_lpr_recognizer("../../models/float", pr::float_lpr_recognizer);
    pr::LPRRecognizer lpr =  pr::float_lpr_recognizer.create_recognizer();
    Mat img = imread("../../image/plate.png");

    ncnn::Mat sample = ncnn::Mat::from_pixels(img.data, ncnn::Mat::PIXEL_BGR, img.cols, img.rows);
    std::vector<pr::PlateInfo> objects;
    detector->plate_detect(sample, objects);
    lpr->decode_plate_infos(objects);

    for (auto pi : objects)
    {
        cout << "plate_no: " << pi.plate_color << pi.plate_no << " box:" << pi.bbox.xmin << ","
        << pi.bbox.ymin << "," << pi.bbox.xmax << "," << pi.bbox.ymax << "," << pi.bbox.score << endl;
    }
}
  • 效果示例:

2.使用LFFD检测

  • 代码样例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void test_lffd_plate()
{
    pr::fix_lffd_detector("../../models/float", pr::lffd_float_detector);
    pr::PlateDetector detector = pr::IPlateDetector::create_plate_detector(pr::lffd_float_detector);

    pr::fix_lpr_recognizer("../../models/float", pr::float_lpr_recognizer);
    pr::LPRRecognizer lpr =  pr::float_lpr_recognizer.create_recognizer();
    Mat img = imread("../../image/plate.png");

    ncnn::Mat sample = ncnn::Mat::from_pixels(img.data, ncnn::Mat::PIXEL_BGR, img.cols, img.rows);
    std::vector<pr::PlateInfo> objects;
    detector->plate_detect(sample, objects);
    lpr->decode_plate_infos(objects);

    for (auto pi : objects)
    {
        cout << "plate_no: " << pi.plate_color << pi.plate_no << " box:" << pi.bbox.xmin << ","
             << pi.bbox.ymin << "," << pi.bbox.xmax << "," << pi.bbox.ymax << "," << pi.bbox.score << endl;
    }
}
  • 效果示例:

3.使用SSD检测

  • 代码样例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void test_ssd_plate()
{
    pr::fix_ssd_detector("../../models/float", pr::ssd_float_detector);
    pr::PlateDetector detector = pr::IPlateDetector::create_plate_detector(pr::ssd_float_detector);

    pr::fix_lpr_recognizer("../../models/float", pr::float_lpr_recognizer);
    pr::LPRRecognizer lpr =  pr::float_lpr_recognizer.create_recognizer();
    Mat img = imread("../../image/manys.jpeg");

    ncnn::Mat sample = ncnn::Mat::from_pixels(img.data, ncnn::Mat::PIXEL_BGR, img.cols, img.rows);
    std::vector<pr::PlateInfo> objects;
    detector->plate_detect(sample, objects);
    lpr->decode_plate_infos(objects);

    for (auto pi : objects)
    {
        cout << "plate_no: " << pi.plate_color << pi.plate_no << " box:" << pi.bbox.xmin << ","
             << pi.bbox.ymin << "," << pi.bbox.xmax << "," << pi.bbox.ymax << "," << pi.bbox.score << endl;
    }
}
  • 效果示例:

4.使用量化模型

  • 代码样例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void test_quantize_mtcnn_plate(){
    pr::fix_mtcnn_detector("../../models/quantize", pr::mtcnn_int8_detector);
    pr::PlateDetector detector = pr::IPlateDetector::create_plate_detector(pr::mtcnn_int8_detector);

    pr::fix_lpr_recognizer("../../models/quantize", pr::int8_lpr_recognizer);
    pr::LPRRecognizer lpr =  pr::int8_lpr_recognizer.create_recognizer();
    Mat img = imread("../../image/plate.png");

    ncnn::Mat sample = ncnn::Mat::from_pixels(img.data, ncnn::Mat::PIXEL_BGR, img.cols, img.rows);
    std::vector<pr::PlateInfo> objects;
    detector->plate_detect(sample, objects);
    lpr->decode_plate_infos(objects);

    for (auto pi : objects)
    {
        cout << "plate_no: " << pi.plate_color << pi.plate_no << " box:" << pi.bbox.xmin << ","
             << pi.bbox.ymin << "," << pi.bbox.xmax << "," << pi.bbox.ymax << "," << pi.bbox.score << endl;
    }
}
  • 效果示例:

后续工作

  • 添加更优的算法支持
  • 优化模型,支持更多的车牌类型,目前支持普通车牌识别,欢迎各位大神提供更好的模型
  • 优化模型,更高的精度
  • 添加Android 使用实例
  • 性能评估

参考

  1. light-LPR 本项目的模型大部分来自与此:https://github.com/lqian/light-LPR
  2. NCNN 使用NCNN作为后端推理:https://github.com/Tencent/ncnn
  3. LFFD LFFD的模型及实现:https://github.com/YonghaoHe/A-Light-and-Fast-Face-Detector-for-Edge-Devices
  4. CCPD 中国车牌数据集,达到200万样本:https://github.com/detectRecog/CCPD
  5. HyperLPR 一个开源的车牌识别框架:https://github.com/zeusees/HyperLPR
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我爱计算机视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MTCNN人脸检测 附完整C++代码
Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neural Networks
cpuimage
2018/05/07
4.6K8
MTCNN人脸检测 附完整C++代码
车牌识别从0到1之C++实现
车牌识别理论不做概述,网上比比皆是,请自行搜索哦。一个纯干货的公众号,断断续续写了一周,贴出代码,供交流学习。
用户9831583
2022/06/16
5680
车牌识别从0到1之C++实现
【深度学习系列】用PaddlePaddle进行车牌识别(一)
小伙伴们,终于到了实战部分了!今天给大家带来的项目是用PaddlePaddle进行车牌识别。车牌识别其实属于比较常见的图像识别的项目了,目前也属于比较成熟的应用,大多数老牌厂家能做到准确率99%+。传统的方法需要对图像进行多次预处理再用机器学习的分类算法进行分类识别,然而深度学习发展起来以后,我们可以通过用CNN来进行端对端的车牌识别。任何模型的训练都离不开数据,在车牌识别中,除了晚上能下载到的一些包含车牌的数据是不够的,本篇文章的主要目的是教大家如何批量生成车牌。 ---- 生成车牌数据 1.定义车牌
Charlotte77
2018/03/19
2K0
【深度学习系列】用PaddlePaddle进行车牌识别(一)
车牌识别综述阅读笔记
目前车牌识别所遇到的难点主要体现在三个方面,主要体现在:车牌倾斜,图像噪声,还有车牌模糊。
润森
2022/08/18
2.5K0
车牌识别综述阅读笔记
深度学习AI美颜系列——人像静态/动态贴纸特效算法实现
人像静态/动态贴纸特效几乎已经是所有图像视频处理类/直播类app的必需品了,这个功能看起来复杂,实际上很简单,本文将给大家做个详细的讲解。
AI算法与图像处理
2019/11/09
2.3K0
深度学习AI美颜系列——人像静态/动态贴纸特效算法实现
opencv 视觉项目学习笔记(二): 基于 svm 和 knn 车牌识别
    训练数据: 所有训练数据存储再一个 N x M 的矩阵中, 其中 N 为样本数, M 为特征数(每个样本是该训练矩阵中的一行)。这些数据  所有数据存在  xml 文件中, 
用户2434869
2018/10/11
3.1K0
基于深度学习的自动车牌识别(详细步骤+源码)
本文将重点介绍 ALPR 的端到端实现。它将侧重于两个过程:车牌检测和检测到的车牌的 OCR。(公众号:OpenCV与AI深度学习)
Color Space
2022/04/06
7.6K0
基于深度学习的自动车牌识别(详细步骤+源码)
yolov8学习,车辆车牌识别代码解读
最近对人工智能、计算机视觉等一类的东西很感兴趣,突发奇想想做一个停车场管理系统,从其中就需要车牌识别,于是尝试学习并尝试做一下这个yolo车牌检测识别的项目。
繁依Fanyi
2024/10/27
4410
利用OpenCV和深度学习实现人脸检测
今天偷点儿懒,就没有及时整理最新的paper,还请各位看官谅解。这里整理了一份前段时间做的小demo,实现献丑了 本文基于OpenCV3.3.1或以上版本(如OpenCV3.4)、DNN模块和face_detector示例实现简单、实时的人脸检测。 往期回顾 [计算机视觉] 入门学习资料 [计算机视觉论文速递] 2018-03-20 [计算机视觉论文速递] 2018-03-18 注: [1]:主要参考Face detection with OpenCV and deep learning这个英文教程
Amusi
2018/04/12
6.9K1
利用OpenCV和深度学习实现人脸检测
【目标检测】SSD目标检测
场景文字识别 目标检测任务的目标是给定一张图像或是视频帧,让计算机找出其中所有目标的位置,并给出每个目标的具体类别。对于人类来说,目标检测是一个非常简单的任务。然而,计算机能够“看到”的仅有一些值为0 ~ 255的矩阵,很难解图像或是视频帧中出现了人或是物体这样的高层语义概念,也就更加难以定位目标出现在图像中哪个区域。与此同时,由于目标会出现在图像或是视频帧中的任何位置,目标的形态千变万化,图像或是视频帧的背景千差万别,诸多因素都使得目标检测对计算机来说是一个具有挑战性的问题。 【目标检测】 SSD目标
用户1386409
2018/04/02
4.5K1
【目标检测】SSD目标检测
TinaLinux NPU开发
MobileNet V2是一种轻量级的卷积神经网络(CNN)架构,专门设计用于在移动设备和嵌入式设备上进行计算资源受限的实时图像分类和目标检测任务。
韦东山
2024/08/24
2450
TinaLinux NPU开发
系列 | OpenVINO视觉加速库使用三
OpenVINO除了可以集成OpenCV DNN一起使用之外,其本身也提供了一套开发接口(SDK),可以不依赖于其他任何第三方库实现对模型的加速推断运行。
OpenCV学堂
2019/04/29
2.5K0
系列 | OpenVINO视觉加速库使用三
在NVIDIA Jetson开发套件上快速构建一个实时中文车牌检测和识别应用
这是NVIDIA在2021年初公布的一个开源项目,用NVIDA Jetson设备上的DeepStream视频分析套件实现“车牌识别”的功能,这是个实用性非常高的应用,能应用在各类小区门禁管理、停车场管理、道路违章等使用场景。
GPUS Lady
2021/07/12
2.1K0
YOLOv5-Lite 树莓派实时 | 更少的参数、更高的精度、更快的检测速度(C++部署分享)
YOLOv5-Lite的网络结构的Backbone主要使用的是含Shuffle channel的Shuffle block组成;
集智书童公众号
2021/11/05
4600
YOLOv5-Lite 树莓派实时 | 更少的参数、更高的精度、更快的检测速度(C++部署分享)
关键点检测项目代码开源了!
本文通过自建手势数据集,利用YOLOv5s检测,然后通过开源数据集训练squeezenet进行手部关键点预测,最后通过指间的夹角算法来判断具体的手势,并显示出来。文章第四部分为用C++实现整体的ncnn推理(代码较长,可先马后看)
Datawhale
2022/02/17
8190
关键点检测项目代码开源了!
【专知荟萃25】文字识别OCR知识资料全集(入门/进阶/论文/综述/代码/专家,附查看)
OCR文字,车牌,验证码识别 专知荟萃 入门学习 论文及代码 文字识别 文字检测 验证码破解 手写体识别 车牌识别 实战项目 视频 入门学习 端到端的OCR:基于CNN的实现 blog: [http://blog.xlvector.net/2016-05/mxnet-ocr-cnn/] 如何用卷积神经网络CNN识别手写数字集? blog: [http://www.cnblogs.com/charlotte77/p/5671136.html] OCR文字识别用的是什么算法? [https://www.zh
WZEARW
2018/04/11
4.2K0
Qt+opencv+EasyPR(车牌识别系统,从配置环境到成功运行)
最近在东软睿道实训搞一个车牌识别系统,所用材料为Qt+opencv+EasyPR,从配环境到成功运行历时几天颇为艰难,这里写篇经验贴,手把手教你~ 作者:张俊怡       2017/7/21      东北大学 俗话说巧妇难为无米之炊,所以得首先准备所需材料: 1、Qt  版本为5.5.1 32位  下载地址为 https://www.qt.io/download/ 2、opencv 版本为3.2.0  下载地址为http://opencv.org/opencv-3-2.html 3、Easy
张俊怡
2018/04/24
3.5K0
Qt+opencv+EasyPR(车牌识别系统,从配置环境到成功运行)
keras+resnet34实现车牌识别
参考:https://github.com/Haveoneriver/License-Plate-Recognition-Items
全栈程序员站长
2022/11/10
5060
车牌识别 之 字符分割
直接贴代码: #include "stdafx.h" #include "cv.h" #include "highgui.h" using namespace std; using namespace cv; IplImage *g_pGrayImage = NULL; IplImage *g_pBinaryImage = NULL; const char *pstrWindowsBinaryTitle = "二值图"; void on_trackbar(int pos) {
MachineLP
2022/05/09
1.8K0
车牌识别 之 字符分割
附源码 | SeetaFace6Open开源人脸识别引擎库 人脸识别演示
SeetaFace6:https://github.com/SeetaFace6Open/index
AI算法与图像处理
2021/01/20
4.8K1
推荐阅读
相关推荐
MTCNN人脸检测 附完整C++代码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验