水表数字识别5:Android实现水表数字识别(含源码 可实时检测)

水表数字识别5:Android实现水表数字识别(含源码 可实时检测)

目录

水表数字识别5:Android实现水表数字识别(含源码 可实时检测)

1. 前言

2. 水表数字分割模型

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

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

3. 水表数字识别模型(PlateNet)

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

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

4. 水表数字识别Android部署

(1) Android部署NCNN模型

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

5.水表识别数字识别效果(Android版本)

6. 项目Android源码下载


1. 前言

本项目将实现水表数字识别,整套方案采用二阶段方法实现,即首先使用文本(数字)检测模型DBNet定位水表数字的区域,然后进行校正并裁剪水表数字区域,再使用CRNN模型对水表数字的区域进行文本(数字)识别。

整套项目分为:数据集说明,DBNet文本(数字)检测模型训练、CRNN文本(数字)识别模型训练,以及水表数字识别边缘侧部署C++/Android等多个章节,本篇是项目《​​​​水表数字识别》系列文章之《Android实现水表数字识别》;为了方便后续模型工程化和Android平台部署,项目对文字检测模型和文字识别模型进行轻量化,并提供Python/C++/Android多个版本;

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

模型input-sizeparams(M)GFLOPsAccuracy
LPRNet94×240.48M0.147GFlops0.9000
CRNN160×328.35M1.06GFlops0.9150
PlateNet168×481.92M1.25GFlops0.9275

  

【尊重原创,转载请注明出处】https://download.csdn.net/download/guyuealian/89537381


更多项目《水表数字识别》系列文章请参考:

      


2. 水表数字分割模型

关于水表数字分割模型训练,请参考《水表数字识别2:Pytorch DBNet实现水表数字检测(含训练代码和数据集)

项目提供两个版本的水表数字分割模型DBNet和Fast-SCNN模型;DBNet属于高精度版本,参数量和计算量较大,检测精度较高,但比较耗时;Fast-SCNN模型属于轻量化版本,参数量和计算量较小,检测精度一般,速度较快,适合手机移动端部署。

下表格给出文本(数字)检测模型DBNet和Fast-SCNN的计算量和参数量,以及其预测结果的均方误差MSE:

模型input-sizeparams(M)GFLOPsMSEmIOU

DBNet

320×320

9722.27M

12.22M

0.1508

0.9333

Fast-SCNN

320×320

1.24M

939.01M

0.1997

0.9531

考虑到手机端比较弱鸡的性能,项目最终使用Fast-SCNN模型进行端上部署。水表数字分割模型在C++端上部署过程,请参考如下

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

训练好Pytorch模型后,我们需要先将模型转换为ONNX模型,以便后续模型部署。

  • 原始项目提供转换脚本,你只需要修改model_file和config_file
    为你模型和配置文件路径即可
  • convert_torch_to_onnx.py实现将Pytorch模型转换ONNX模型的脚本
python libs/converter/convert_torch_to_onnx.py

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

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

NCNN转换工具:


3. 水表数字识别模型(PlateNet)

关于水表数字识别模型训练,请参考《水表数字识别3:Pytorch CRNN实现水表数字识别(含训练代码和数据集)

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

整套水表数字识别系统,在OpenCL加速下,可以达到实时的检测效果,基本满足业务的性能需求。下表格给出CRNN,LPRNet和PlateNet模型的计算量和参数量以及其识别的准确率:

模型input-sizeparams(M)GFLOPsAccuracy
LPRNet94×240.48M0.147GFlops0.9000
CRNN160×328.35M1.06GFlops0.9150
PlateNet168×481.92M1.25GFlops0.9275

考虑到LPRNet和CRNN模型,存在某些OP算子,NCNN不支持,项目最终使用PlateNet模型进行端上部署。水表数字识别模型在C++端上部署过程,请参考如下

PlateNet识别模型在C++端上部署过程,请参考如下

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

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

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

NCNN转换工具,请参考:


4. 水表数字识别Android部署

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

(1) Android部署NCNN模型

水表数字分割模型采用Fast-SCNN,识别模型采用PlateNet,模型推理实现Android源码核心算法部分均采用C++实现,上层Java通过JNI接口调用C++算法。

如果你想在这个Android Demo部署你自己训练的模型,你可将训练好的Pytorch模型转换ONNX ,再转换成NCNN模型,然后把原始的模型替换成你自己的TNCNN模型即可。

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版本水表数字检测分割和识别算法开发,APP在普通Android手机上可以达到实时的检测和识别效果,CPU(4线程)约40ms左右,GPU约30ms左右 ,基本满足业务的性能需求。

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

  


6. 项目Android源码下载

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

如需下载项目源码,请WX关注【AI吃大瓜】,回复【水表数字识别】即可下载

项目资源内容包含:

  1. 提供Fast-SCNN水表数字分割模型
  2. 提供PlateNet水表数字识别模型,识别准确率可以达到0.9275左右
  3. 提供整套项目水表数字分割和识别Android Demo项目源码
  4. Android Demo源码可用于二次开发
  5. Android Demo在普通手机CPU/GPU上可以实时检测,CPU约40ms,GPU约30ms左右
  6. Android Demo支持图片、视频和摄像头测试
  7. 所有依赖库都已经配置好,可直接build运行,若运行出现闪退,请参考dlopen failed: library “libomp.so“ not found 解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI吃大瓜

尊重原创,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值