智能驾驶 车牌检测和识别(四)《Android实现车牌检测和识别(可实时车牌识别)》

目录

智能驾驶 车牌检测和识别(四)《Android实现车牌检测和识别(可实时车牌识别)》

1. 前言

2. 车牌检测模型(YOLOv5)

(1) 将Pytorch模型转换ONNX模型

(2) 将ONNX模型转换为TNN模型

3. 车牌识别模型(PlateNet)

(1) 将Pytorch模型转换ONNX模型

(2) 将ONNX模型转换为TNN模型

4. 车牌检测和识别Android部署

(1) Android部署TNN模型

(2) 一些异常错误解决方法

5. 车牌检测和识别Android效果

6. 项目Android源码下载


1. 前言

这是项目《智能驾驶 车牌检测和识别》系列之《Android实现车牌检测和识别(可实时车牌识别)》;本项目将开发一个Android版本的车牌检测和识别APP,其中车牌检测算法采用YOLOv5模型,车牌识别算法采用PlateNet模型;车牌检测和识别APP在普通Android手机上可以达到实时的检测和识别效果,CPU(4线程)约30ms左右,GPU约25ms左右 ,基本满足业务的性能需求。

车牌识别Android Demo效果展示:

【 整套项目下载地址】智能驾驶 车牌检测和识别(四)《Android实现车牌检测和识别(可实时车牌识别)》

【Android Demo体验】https://download.csdn.net/download/guyuealian/87400593

【尊重原创,转载请注明出处】《Android实现车牌检测和识别(可实时识别车牌)》:https://blog.csdn.net/guyuealian/article/details/128704242


更多项目《智能驾驶 车牌检测和识别》系列文章请参考:

  1. 智能驾驶 车牌检测和识别(一)《CCPD车牌数据集》:https://blog.csdn.net/guyuealian/article/details/128704181
  2. 智能驾驶 车牌检测和识别(二)《YOLOv5实现车牌检测(含车牌检测数据集和训练代码)》:https://blog.csdn.net/guyuealian/article/details/128704068
  3. 智能驾驶 车牌检测和识别(三)《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码)》:https://blog.csdn.net/guyuealian/article/details/128704209
  4. 智能驾驶 车牌检测和识别(四)《Android实现车牌检测和识别(可实时车牌识别)》:https://blog.csdn.net/guyuealian/article/details/128704242
  5. 智能驾驶 车牌检测和识别(五)《C++实现车牌检测和识别(可实时车牌识别)》:https://blog.csdn.net/guyuealian/article/details/128704276
  6. 智能驾驶 红绿灯检测(一)《红绿灯(交通信号灯)数据集》:https://blog.csdn.net/guyuealian/article/details/128222850
  7. 智能驾驶 红绿灯检测(二)《YOLOv5实现红绿灯检测(含红绿灯数据集+训练代码)》:https://blog.csdn.net/guyuealian/article/details/128240198
  8. 智能驾驶 红绿灯检测(三)《Android实现红绿灯检测(含Android源码 可实时运行)》:https://blog.csdn.net/guyuealian/article/details/128240334
  9. 智能驾驶 车辆检测(一)《UA-DETRAC BITVehicle车辆检测数据集》:https://blog.csdn.net/guyuealian/article/details/127907325

  10. 智能驾驶 车辆检测(二)《YOLOv5实现车辆检测(含车辆检测数据集+训练代码)》:https://blog.csdn.net/guyuealian/article/details/128099672

  11. 智能驾驶 车辆检测(三)《Android实现车辆检测(含Android源码 可实时运行)》:https://blog.csdn.net/guyuealian/article/details/128190532


2. 车牌检测模型(YOLOv5)

车牌检测模型训练过程,请参考智能驾驶 车牌检测和识别(二)《YOLOv5实现车牌检测(含车牌检测数据集和训练代码)》:https://blog.csdn.net/guyuealian/article/details/128704068

为了能部署在手机Android平台上,本人对YOLOv5s进行了简单的模型轻量化,并开发了一个轻量级的版本yolov5s05_416和yolov5s05_320模型;轻量化模型在普通Android手机上可以达到实时的检测效果,CPU(4线程)约30ms左右,GPU约25ms左右 ,基本满足业务的性能需求。下表格给出轻量化模型的计算量和参数量以及其检测精度

模型 input-size params(M) GFLOPs mAP_0.5:0.95
yolov5s 640×640 7.2 16.5 0.75261
yolov5s05 416×416 1.7 1.8 0.74593
yolov5s05 320×320 1.7 1.1 0.74341

车牌检测效果:

YOLOv5车牌检测模型在Android端上部署过程,请参考如下

(1) 将Pytorch模型转换ONNX模型

训练好yolov5s05或者yolov5s模型后,你需要将模型转换为ONNX模型,并使用onnx-simplifier简化网络结构

# 转换yolov5s05模型
python export.py --weights "data/model/yolov5s05_320/weights/best.pt" --img-size 320 320
# 转换yolov5s模型
python export.py --weights "data/model/yolov5s_640/weights/best.pt" --img-size 640 640

GitHub: https://github.com/daquexian/onnx-simplifier
Install:  pip3 install onnx-simplifier

(2) 将ONNX模型转换为TNN模型

目前CNN模型有多种部署方式,可以采用TNN,MNN,NCNN,以及TensorRT等部署工具,鄙人采用TNN进行Android端上部署:

TNN转换工具:

  • (1)将ONNX模型转换为TNN模型,请参考TNN官方说明:TNN/onnx2tnn.md at master · Tencent/TNN · GitHub
  • (2)一键转换,懒人必备:一键转换 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine   (可能存在版本问题,这个工具转换的TNN模型可能不兼容,建议还是自己build源码进行转换,2022年9约25日测试可用)


3. 车牌识别模型(PlateNet)

车牌识别模型训练过程,请参考 智能驾驶 车牌检测和识别(三)《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码)》:https://blog.csdn.net/guyuealian/article/details/128704209

项目基于CRNN或LPRNet模型构建车牌识别算法,支持绿牌和蓝牌识别;为方便后续工程化,项目对CRNN模型进行魔改,提出一个PlateNet模型,用于支持部署到Android平台或者开发板上

整套智能车牌检测和识别系统,在普通Android手机上可以达到实时的检测效果,CPU(4线程)约30ms左右,GPU约25ms左右 ,基本满足业务的性能需求。下表格给出CRNN,LPRNet和PlateNet模型的计算量和参数量以及其车牌识别的准确率:

模型 input-size params(M) GFLOPs Accuracy
LPRNet 94×24 0.48M 0.147GFlops 0.9393
CRNN 160×32 8.35M 1.06GFlops 0.9343
PlateNet 168×48 1.92M 1.25GFlops 0.9583

车牌识别Demo效果展示:

PlateNet车牌识别模型在Android端上部署过程,请参考如下

(1) 将Pytorch模型转换ONNX模型

车牌识别项目源码demo.py文件中参数--export设置为True,可将Pytorch的模型转换为ONNX模型文件,且ONNX文件会默认保存在Pytorch的模型文件同一目录下。

(2) 将ONNX模型转换为TNN模型

TNN转换工具,请参考:

  • (1)将ONNX模型转换为TNN模型,请参考TNN官方说明:TNN/onnx2tnn.md at master · Tencent/TNN · GitHub
  • (2)一键转换,懒人必备:一键转换 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine   (可能存在版本问题,这个工具转换的TNN模型可能不兼容,建议还是自己build源码进行转换,2022年9约25日测试可用)

4. 车牌检测和识别Android部署

项目实现了Android版本的车牌检测和车牌识别,部署框架采用TNN,支持多线程CPU和GPU加速推理,在普通手机上可以实时处理。

(1) Android部署TNN模型

车牌检测模型YOLOv5和车牌识别模型PlateNet的Android源码核心算法部分均采用C++实现,上层通过JNI接口调用。

如果你想在这个Android Demo部署你自己训练的车牌检测模型YOLOv5和车牌识别模型PlateNet,你可将训练好的Pytorch模型转换ONNX ,再转换成TNN模型,然后把原始的模型替换成你自己的TNN模型即可。

package com.cv.tnn.model;import android.graphics.Bitmap;public class Detector {static {System.loadLibrary("tnn_wrapper");}/**** 初始化检测模型* @param det_model: 检测模型(不含后缀名)* @param cls_model: 识别模型(不含后缀名)* @param root:模型文件的根目录,放在assets文件夹下* @param model_type:模型类型* @param num_thread:开启线程数* @param useGPU:关键点的置信度,小于值的坐标会置-1*/public static native void init(String det_model, String cls_model, String root, int model_type, int num_thread, boolean useGPU);/**** 返回检测和识别结果* @param bitmap 图像(bitmap),ARGB_8888格式* @param score_thresh:置信度阈值* @param iou_thresh:  IOU阈值* @return*/public static native FrameInfo[] detect(Bitmap bitmap, float score_thresh, float iou_thresh);
}

(2) 一些异常错误解决方法

运行APP闪退:dlopen failed: library "libomp.so" not found

参考解决方法:解决dlopen failed: library “libomp.so“ not found_PKing666666的博客-CSDN博客_dlopen failed


5. 车牌检测和识别Android效果

车牌识别Android Demo效果展示:

Android APP Demo体验:https://download.csdn.net/download/guyuealian/87400593


6. 项目Android源码下载

【Android APP Demo体验】https://download.csdn.net/download/guyuealian/87400593

【车牌检测和识别Android源码下载】 智能驾驶 车牌检测和识别(四)《Android实现车牌检测和识别(可实时车牌识别)》

整套Android项目源码内容包含:

  1. 提供YOLOv5车牌检测模型:包含快速版yolov5s05车牌检测模型,在普通手机可实时检测识别,CPU(4线程)约30ms左右,GPU约25ms左右;包含高精度版本yolov5s车牌检测模型,CPU(4线程)约250ms左右,GPU约100ms左右
  2. 提供PlateNet车牌识别模型:支持蓝牌和绿牌车牌识别
  3. Android Demo支持图片,视频,摄像头测试
  4. 所有依赖库都已经配置好,可直接build运行,若运行出现闪退,请参考dlopen failed: library “libomp.so“ not found 解决。

如果你需要C++版本或Python的车牌检测和车牌识别,请查看更多项目《智能驾驶 车牌检测和识别》系列文章请参考: 

  1. 智能驾驶 车牌检测和识别(一)《CCPD车牌数据集》:https://blog.csdn.net/guyuealian/article/details/128704181
  2. 智能驾驶 车牌检测和识别(二)《YOLOv5实现车牌检测(含车牌检测数据集和训练代码)》:https://blog.csdn.net/guyuealian/article/details/128704068
  3. 智能驾驶 车牌检测和识别(三)《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码)》:https://blog.csdn.net/guyuealian/article/details/128704209
  4. 智能驾驶 车牌检测和识别(四)《Android实现车牌检测和识别(可实时车牌识别)》:https://blog.csdn.net/guyuealian/article/details/128704242
  5. 智能驾驶 车牌检测和识别(五)《C++实现车牌检测和识别(可实时车牌识别)》:https://blog.csdn.net/guyuealian/article/details/128704276

智能驾驶 车牌检测和识别(四)《Android实现车牌检测和识别(可实时车牌识别)》相关推荐

  1. 智能驾驶 车牌检测和识别(三)《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码)》

    智能驾驶 车牌检测和识别(三)<CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码)> 目录 智能驾驶 车牌检测和识别(三)<CRNN和LPRNet实现车牌识别(含车牌识 ...

  2. 智能驾驶 车牌检测和识别(一)《CCPD车牌数据集》

    智能驾驶 车牌检测和识别(一)<CCPD车牌数据集> 目录 智能驾驶 车牌检测和识别(一)<CCPD车牌数据集> 1. 前言 2.车牌号码说明 3.车牌数据集CCPD (1)车 ...

  3. 智能驾驶 车牌检测和识别(二)《YOLOv5实现车牌检测(含车牌检测数据集和训练代码)》

    智能驾驶 车牌检测和识别(二)<YOLOv5实现车牌检测(含车牌检测数据集和训练代码)> 目录 智能驾驶 车牌检测和识别(二)<YOLOv5实现车牌检测(含车牌检测数据集和训练代码) ...

  4. 智能驾驶 车牌检测和识别(五)《C++实现车牌检测和识别(可实时车牌识别)》

    智能驾驶 车牌检测和识别(五)<C++实现车牌检测和识别(可实时车牌识别)> 目录 智能驾驶 车牌检测和识别(五)<C++实现车牌检测和识别(可实时车牌识别)> 1. 前言 2 ...

  5. Android实现红绿灯检测(含Android源码 可实时运行)

    Android实现红绿灯检测(含Android源码 可实时运行) 目录 Android实现红绿灯检测(含Android源码 可实时运行) 1. 前言 2. 红绿灯检测数据集说明 3. 基于YOLOv5 ...

  6. 智能驾驶功能软件平台设计规范 第一部分:系统架构

    智能驾驶功能软件平台设计规范 第一部分:系统架构 2020-07-29 发布 1 规范应用范围 本规范规定了智能驾驶功能软件平台的系统架构.功能模块和算法组件划分. 本规范适用于 GB/T<汽车 ...

  7. 智能驾驶功能软件平台设计规范 第二部分:感知融合功能服务接口

    智能驾驶功能软件平台设计规范 第二部分:感知融合功能服务接口 版本:1.0 2020-07-29 发布 1 规范应用范围 本规范规定了智能驾驶功能软件平台中的感知融合功能服务接口. 本规范适用于设计开 ...

  8. 初识华为MDC智能驾驶计算平台

    初识华为MDC智能驾驶计算平台 前言 世界智能大会下的世界智能驾驶挑战赛组织方推荐:"华为MDC是面向自动驾驶领域的计算平台.MDC拥有自研CPU和AI芯片,联合车规级AUTOSAR平台,促 ...

  9. 【MDC智能驾驶开发者课程】1.华为MDC总体介绍

    文章目录 1.智能驾驶产业发展趋势 2.华为MDC智能驾驶计算平台 2.1 华为MDC平台的特性 3.典型应用场景 3.1高速干线货运物流 3.2末端无人物流配送 3.3高危高强度特种作业 3.4定点 ...

最新文章

  1. linux小红帽实验心得,格林童话小红帽读书心得体会5篇
  2. 【网址收藏】WSL安装docker(不折腾版)
  3. 系统错误_Win10系统提示0x80004005错误的解决方法
  4. 【读书笔记】实战Java高并发程序设计(第2版)读书笔记
  5. javascript模块 (Module) 简介
  6. PUT上传POC--Put2Poc.py
  7. minicom 使用方法
  8. LCD12864图形点阵液晶显示模块中文资料介绍
  9. [-Flutter 自组篇-] 圆形进度条
  10. 施耐德PLC Unity Pro xl 软件使用二
  11. 好多网友都不知道怎么阅读Linux内核源码,这篇让你快速理解
  12. 搭建VC2010 开发环境,创建《C语言实现俄罗斯方块游戏》教程
  13. linux 运行有道词典,Linux有道词典软件安装
  14. Drools——什么是规则
  15. Launcher3 安装App加载显示过程分析,androidstudio开发app实例
  16. b500k电位器引脚接法_电位器的种类、作用及其引脚的接法
  17. Linux运维工程师学习目标
  18. pandas 索引去重_python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除) 如何更新pandas dataframe的值...
  19. C#.Net干货分享-构建Aocr_ImageHelper读取图片文字做解析
  20. VC++编程实现网络嗅探器

热门文章

  1. ubuntu安装后基本配置
  2. Java---MyBatis框架
  3. vector自定义排序
  4. php执行dmidecode,linux必学的命令
  5. LeetCode_1024_视频拼接
  6. python环境搭建 python3.10.5 安装
  7. 使用poi替换XWPFTableCell内容,并设置行间距
  8. ios 设计模式备忘录(1)
  9. HTML躬行记(4)——Web音视频基础
  10. 两次转行,我为什么要做程序员?