基于深度学习的多类别电表读数识别方案详解

本文详细介绍了基于深度学习的多类别电表读数识别项目,探讨了项目背景、数据集挑战、模型选择(如PaddleOCR的PP-OCR)以及解决方案,包括训练、评估和优化过程。文中还提到针对不同问题的探索,如目标检测方案的应用和效果分析。
摘要由CSDN通过智能技术生成

多类别电表读数识别方案详解

项目背景

我国电力行业发展迅速,电表作为测电设备经历了普通电表、预付费电表和智能电表三个阶段的发展。虽然智能电表具有通信功能,但环境和设备使得智能电表具有不稳定性,非智能电表仍然无法实现自动采集。采集到的大量电表图片如果能够借助人工智能技术批量检测和识别,将会大幅提升效率和精度。

在本系列项目中,使用Paddle工具库实现一个OCR垂类场景。原始数据集是一系列电度表的照片,类型较多,需要完成电表的读数识别,对于有编号的电表,还要完成其编号的识别。
在这里插入图片描述

项目难点

  • 数据方面:电表种类多、数据少,拍摄角度多样且部分数据反光严重。
  • 电表数据没有开源数据集,如何从零标注数据应当选择何种标注软件能够最快速度构建数据集?
  • 在技术路线选择也面临多方面的问题,例如是通过文字检测来反向微调,还是通过目标检测从零训练?

最终项目方案

使用飞桨文字识别开发套件PaddleOCR,完成PP-OCR模型完成微调与优化,由于其检测部分基于DB的分割方法实现,对于数据中的倾斜问题能够良好解决。PP-OCR模型经过大量实验,其泛化性也足以支撑复杂垂类场景下的效果。

系列项目全集:

  • 主线篇

    • PPOCR:多类别电表读数识别
    • PPOCR:使用TextRender进行电表编号识别的finetune
    • 数据标注懒人包:PPOCRLabel极速增强版——以电表识别为例(二)
  • 番外篇

    • PPOCR+PPDET电表读数和编号检测

安装说明

环境要求

  • PaddlePaddle >= 2.1.0
  • 3.5 <= Python < 3.9
  • PaddleOCR >= 2.1
# 克隆项目
!git clone https://gitee.com/paddlepaddle/PaddleOCR.git

# 安装ppocr
!pip install fasttext==0.8.3
!pip install paddleocr --no-deps -r requirements.txt

%cd PaddleOCR/

数据集简介

(注:数据集稍后公开,尽请期待)

首先,我们来简单看一下数据集的情况。总的来说,这个场景面临几个比较大的问题:

  • 电表类型较多,相比之下,现有数据量(500张)可能不够。
  • 照片角度倾斜较厉害,有些电表可能不具备正面拍照条件。
  • 反光严重,影响目标框定位和数字识别。
  • 表号是点阵数字,不易识别。
  • 对检测框精准度要求非常高。

数据标注

在数据标注工具上,使用PPOCRLabel作为实现半自动标注,内嵌PP-OCR模型,一键实现机器自动标注,且具有便捷的修改体验。支持四点框、矩形框标注模式,导出格式可直接用于PaddleOCR训练。

标注文件格式如下所示:

" 图像文件名                    json.dumps编码的图像标注信息"
ch4_test_images/img_61.jpg    [{"transcription": "MASA", "points": [[310, 104], [416, 141], [418, 216], [312, 179]]}, {...}]

模型选型

PaddleOCR包含丰富的文本检测、文本识别以及端到端算法。在PaddleOCR的全景图中,我们可以看到PaddleOCR支持的文本检测算法。

在标注数据的基础上,基于通用的文本检测算法finetune,我们就可以训练一个能将电表识别中的多余文本框自动去除,只留下目标的电表读数、编号的电表文本检测模型。

明确目标,开始下一步的操作

检测模型训练

为节省训练时间,提供了一个效果不错的预训练模型以及配置文件,读者可以选择基于预训练模型finetune或是从头训练。

!pip install Polygon3 -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install lanms-nova
!pip install rapidfuzz

# 从头开始训练
!python tools/train.py -c configs/det/ch_PP-OCRv2/ch_PP-OCRv2_det_student.yml

模型评估与推理

通过上述代码训练好模型后,运行 tools/eval.py, 指定配置文件和模型参数即可评估效果。

# 提供的预训练模型和配置文件
!tar -xvf ../my_exps.tar -C ./

# 查看提供的模型训练效果
!python tools/eval.py -c configs/det/ch_PP-OCRv2/ch_PP-OCRv2_det_student.yml  -o Global.checkpoints="my_exps/det_dianbiao_size1600_copypaste/best_accuracy"
``

`

## 模型导出和串接

这里用了个比较取巧的方式,先将模型导出,然后把whl下预测用的检测模型用新训练的模型直接替换掉,就可以看到finetune后的检测效果了!

```python
# 模型导出
!python tools/export_model.py -c configs/det/ch_PP-OCRv2/ch_PP-OCRv2_det_student.yml -o Global.pretrained_model=./my_exps/det_dianbiao_size1600_copypaste/best_accuracy Global.save_inference_dir=./inference/det_db
from paddleocr import PaddleOCR, draw_ocr

# 模型路径下必须含有model和params文件
ocr = PaddleOCR(det_model_dir='./inference/det_db', use_angle_cls=True)
img_path = './M2021/test.jpg'
result = ocr.ocr(img_path, cls=True)
for line in result:
    print(line)

# 显示结果
from PIL import Image

image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores)
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')

如果您想要进一步优化识别结果,可以通过以下两种思路:

  1. 重新训练识别模型

    • 通过 导出识别数据 功能在PPOCRLabel中导出识别数据:包含已经裁切好的识别图片与label。
    • 如果真实数据量太小,使用Textrenderer、StyleText等造数据工具,制造合成数据(可能需要提供字体文件等)。
    • 将数据按照识别模型训练文档整理数据后启动训练,通过调整学习率、调整相应的合成与真实数据比例(保证每个batch中真实:合成=10:1左右)等操作优化识别模型。
  2. 通过后处理解决,包括调整阈值、将非数字内容处理掉等。

如果您对本项目以及PaddleOCR应用有更深入的需求,欢迎扫码加群交流:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

番外篇:基于目标检测方案的探索

工业场景中对于文字的检测也可以算是目标的一种,因此我们也探索了通用目标检测的方法在该场景中的效果。

整体方案的流程首先将PPOCRLabel的标注文件格式转换为VOC格式,然后训练YOLOv3模型进行文本检测。 具体代码可参考 PPOCR+PPDET电表读数和编号识别。

最终预测效果如下:

(预测结果图片)

从上面的预测结果看来,我们发现直接用矩形框检测也存在问题。由于输入图片会存在歪斜,导致矩形框可能会框住多余的文字,进而影响文字识别效果。

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: DBNetCRNN是一款具有高精度的数字仪表读数识别算法。该算法使用了深度学习模型和自然语言处理技术,可以识别多种类型的数字仪表读数并对其精确判断。该算法的优点在于其可以识别被污染、模糊、歪斜等不同情况下的数字仪表读数,并将其转化为完整的数字序列或实数值,从而大幅提高了数字仪表读数的自动化识别效率和准确性。 自动数字仪表读数识别是智能电力系统的重要组成部分,对于电力设备的运行、维护和管理都有着关键的作用。传统的数字仪表读数识别技术需要人力识别,无法满足高速、大批量进行数字仪表读数识别的要求。而DBNetCRNN算法不仅提高了数字仪表读数识别的效率,同时也大大减轻了人类操作的压力。此外,该算法还可以应用于其他领域,如自动化工业、交通、医疗等,具有广泛的应用前景。 ### 回答2: DBNetCRNN是一种数字仪表读数识别的技术,它的核心是深度学习的神经网络模型。DBNetCRNN将两个经典的深度学习模型结合起来,包括端到端的文本检测模型DBNet和序列化的文本识别模型CRNN。这种结合模型不仅可以检测数字仪表上的文本信息,还可以精准地识别出文本上的数字。 DBNetCRNN的识别准确率非常高,经过大量训练和测试,可以达到比较稳定的数字读数识别效果。此外,DBNetCRNN的应用也非常广泛,可以用于各种数字仪表的读数识别,如水表、电表、气表等等。特别是在物联网(IoT)应用中,DBNetCRNN可以实时地对数字仪表的读数进行识别,提高设备监控的精确度和效率。 总结起来,DBNetCRNN是一种高效且精准的数字仪表读数识别技术。它的核心是深度学习的神经网络模型,结合了端到端的文本检测模型和序列化的文本识别模型。在物联网应用中,DBNetCRNN可以实时地识别数字仪表上的读数,提高设备监控的作用和效率。 ### 回答3: DBNetCRNN是一种基于深度学习的数字仪表读数识别技术。它综合了两种网络结构,分别是DBNet和CRNN。 DBNet用于文本定位和提取,可以准确地找到仪表上的数字并将其截取出来。CRNN则用于文本识别,可以将截取出来的数字转换成可读的文本。这两个网络结构的结合,使得DBNetCRNN能够在复杂背景下准确、快速地识别数字仪表读数。 通过训练深度神经网络,DBNetCRNN可以自适应地学习数字的不同形状和大小,从而适应于不同类型的数字仪表。同时,它还可以在低分辨率和模糊图像上进行精准识别,为数字仪表读数的自动化处理提供了更加高效和便捷的方式。 在工业生产、电力行业、航空航天等领域,数字仪表读数识别是非常关键的工作,它的准确度和速度直接影响到生产效率和质量。DBNetCRNN技术的应用可以提高数字仪表读数的准确度和速度,降低人工操作的成本和风险,为企业提供更加可靠和高效的数字化解决方案

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

OverlordDuke

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值