水表表盘读数识别新体验,带你进入华为云ModelArts算法套件的世界

news2024/12/22 1:21:05

前言

数字时代,数字化服务已经发展到各行各业,我们的生活中也随处可见。

数字化服务的便捷了我们的衣食住行的方方面面,除了我们日常化的出行、饮食、购物,其实住方面也已有了很深的发展。

水电燃气这三项和我们生活息息相关的能源,也已经基本上数字化、线上化了,逐步实现了从传统的线下购买到线上购买的过渡。

其中水比较特殊,与另外两个预付费的方式不同,水是先用后付费,传统方式是定期人工上门抄水表的数据然后用户根据用水量进行费用缴纳。

而今,随着技术的快速发展,智能水表读数识别的功能开始广泛被应用。

1分钟了解水表读数识别

智能水表读数识别的功能,可实现对水表的智能监控。

智能化监控的意义在于:

  • 分析用户用户量,给出优化建议,从而达到节约用水的目的;
  • 实时获取水表数字,改变上门手抄方式,节约人力成本和时间;
  • 生成用水数据,便于后续的数据分析。

3分钟了解华为云ModelArts算法套件

华为云ModelArts目前提供的算法开发套件中,主要包括自研(ivg系列)和开源(mm系列)两套算法资产。

可应用于分类、检测、分割和OCR等任务中。

华为云ModelArts使用自研分割算法(ivgSegmentation)和开源OCR算法(mmOCR)的组合完成水表读数识别项目,并使用算法开发套件将其部署为华为云在线服务。

接下来,让我们真实的体验一下算法开发套件实现的水表表盘读数识别的实验。

水表表盘读数识别实验

前置工作

1、确保已经完成了华为云账号的开通与认证。

2、已开通OBS服务。

3、已开通ModelArts服务

进入实验

步骤1:准备数据

1、在“全局配置”页面查看是否已经配置授权,允许ModelArts访问OBS。

2、分别下载本案例的数据集:水表表盘分割数据集和水表表盘读数OCR识别数据集。区域选择“华北-北京四”

3、新增OBS桶文件,将下载的数据集上传到OBS桶中。OBS路径示例如下:

  • obs://obs-water-yyy/water_meter_segmentation 水表表盘分割数据集

  • obs://obs-water-yyy/water_meter_crop 水表表盘读数OCR识别数据集

步骤2:准备开发环境

1、在“ModelArts控制台 > 开发环境 > Notebook”页面中,创建基于pytorch1.8-cuda10.2-cudnn7-ubuntu18.04镜像,类型为GPU的Notebook,

2、在“ModelArts控制台 > 开发环境 > Notebook”页面的列表中,单击操作栏的“打开”,进入JupyterLab页面。

3、打开JupyterLab的Terminal。

步骤3:创建算法工程

1、在JupyterLab的Terminal中,在work目录下执行ma-cli createproject命令创建工程,根据提示输入工程名称,例如:water_meter。然后直接回车选择默认参数,并选择跳过资产安装步骤(选择6)。

2、执行以下命令进入工程目录。

cd water_meter

3、执行以下命令拷贝项目数据到Notebook中。

python manage.py copy --source obs://obs-water-yyy/water_meter_crop --dest ./data/raw/water_meter_crop
python manage.py copy --source obs://obs-water-yyy/water_meter_segmentation --dest ./data/raw/water_meter_segmentation

步骤4:使用deeplabv3完成水表区域分割任务

1、首先安装ivgSegmentation套件。

python manage.py install algorithm ivgSegmentation==1.0.2

2、安装ivgSegmentation套件后,在JupyterLab界面左侧的工程目录中进入“./algorithms/ivgSegmentation/config/sample”文件夹中查看目前支持的分割模型,以sample为例(sample默认的算法就是deeplabv3),文件夹中包括config.py(算法外壳配置)和deeplabv3_resnet50_standard-sample_512x1024.py(模型结构)。

3、表盘分割只需要区分背景和读数区域,因此属于二分类,需要根据项目所需数据集对配置文件进行修改,如下所示:修改“./algorithms/ivgSegmentation/config/sample/config.py”文件。修改完后按Ctrl+S保存。

# config.py
alg_cfg = dict(
    ...    
    data_root='data/raw/water_meter_segmentation',   # 修改为真实路径本地分割数据集路径
    ...
)

4、修改“./algorithms/ivgSegmentation/config/sample/deeplabv3_resnet50_standard-sample_512x1024.py”文件。修改完后按Ctrl+S保存。

# deeplabv3_resnet50_standard-sample_512x1024.py
gpus=[0]
...
data_cfg = dict(
    ...    num_classes=2,  # 修改为2类
    ...    
    ...    train_scale=(512, 512),  # (h, w)#size全部修改为(512, 512)
    ...    train_crop_size=(512, 512),  # (h, w)
    ...    test_scale=(512, 512),  # (h, w)
    ...    infer_scale=(512, 512),  # (h, w)
 )

5、在water_meter工程目录下,安装deeplabv3预训练模型。

python manage.py install model ivgSegmentation:deeplab/deeplabv3_resnet50_cityscapes_512x1024

6、训练分割模型。(推荐使用GPU进行训练)

# shell
python manage.py run --cfg algorithms/ivgSegmentation/config/sample/config.py --gpus 0

训练好的模型会保存在指定位置中,默认为“output/deeplabv3_resnet50_standard-sample_512x1024/checkpoints/”中。

7、验证模型效果。模型训练完成后,可以在验证集上计算模型的指标,首先修改配置文件的模型位置。修改“./algorithms/ivgSegmentation/config/sample/config.py”。

# config.py
alg_cfg = dict(
    ...
    load_from='./output/deeplabv3_resnet50_standard-sample_512x1024/checkpoints/checkpoint_best.pth.tar',  # 修改训练模型的路径
    ...
)

8、模型推理。模型推理能够指定某一张图片,并且推理出图片的分割区域,并进行可视化,首先需要指定需要推理的图片路径。修改“./algorithms/ivgSegmentation/config/sample/config.py”

alg_cfg = dict(
    ...
   img_file =  './data/raw/water_meter_segmentation/image/train_10.jpg'  # 指定需要推理的图片路径
   ...
)

执行如下命令推理模型效果:

python manage.py run --cfg algorithms/ivgSegmentation/config/sample/config.py --pipeline infer

推理输出的图片路径在“./output/deeplabv3_resnet50_standard-sample_512x1024”下。

9、导出算法SDK。算法开发套件支持将模型导出成一个模型SDK,方便进行模型部署等下游任务。

# shell
python manage.py export --cfg algorithms/ivgSegmentation/config/sample/config.py --is_deploy

步骤5:水表读数识别

1、首先安装mmocr套件。

python manage.py install algorithm mmocr==0.2.1

2、安装mmocr套件后,“./algorithms/mmocr/config/textrecog”文件夹中包括config.py(算法外壳配置),需要根据所需算法和数据集路径修改配置文件。以下以robust_scanner算法为例。修改“./algorithms/mmocr/algorithm/configs/textrecog/robustscanner_r31_academic.py”,

# robustscanner_r31_academic.py
...
train_prefix = 'data/raw/water_meter_crop/'  # 修改数据集路径改为水表ocr识别数据集路径
train_img_prefix1 = train_prefix + 'train'
train_ann_file1 = train_prefix + 'train.txt'
 
...
test_prefix = 'data/raw/water_meter_crop/'
test_img_prefix1 = test_prefix + 'val/'
test_ann_file1 = test_prefix + 'val.txt'

3、安装robust_scanner预训练模型。

python manage.py install model mmocr:textrecog/robust_scanner/robustscanner_r31_academic

4、训练OCR模型。初次使用mmcv时需要编译mmcv-full,该过程较慢,可以直接使用官方预编译的依赖包。预编译包URL: https://download.openmmlab.com/mmcv/dist/cu102/torch1.6.0/index.html

pip uninstall mmcv -y
pip install https://download.openmmlab.com/mmcv/dist/cu102/torch1.6.0/mmcv_full-1.3.9-cp37-cp37m-manylinux1_x86_64.whl

将./algorithms/mmocr/config/textrecog/config.py中的epoch(迭代数量)改为2。

训练OCR模型。(仅使用GPU进行训练,大概需要四分钟)训练好的模型会保存在指定位置中,默认为output/robustscanner_r31_academic/文件夹中。

5、验证模型效果。模型训练完成后,可以在验证集上计算模型的指标,首先修改配置文件的模型位置。修改./algorithms/mmocr/config/textrecog/config.py

# config.py
...
model_path = './output/robustscanner_r31_academic/latest.pth'
...

步骤6:部署为在线服务

1、在“algorithms/mmocr/config/textrecog/config.py”文件中配置OBS桶。

修改./algorithms/mmocr/algorithm/configs/textrecog/robust_scanner/config.py

# 替换为用户自己的OBS桶信息
obs_bucket = 'obs://{your_obs_bucket_path}'

2、依次执行下述命令:

python manage.py export --cfg algorithms/mmocr/config/textrecog/config.py --is_deploy  # 导出部署模型所需文件
python manage.py deploy --cfg algorithms/mmocr/config/textrecog/config.py  # 本地部署调试

3、本地部署成功后的输出结果

# 
...
[Conda environment created successfully.]
local_service_port is 127.0.0.1:42153
Deploying the local service ...
Successfully deployed the local service. You can check the log in /home/ma-user/work/water_meter/export/robustscanner_r31_academic/Linux_x86_64_GPU_PyTorch_Common_py/log.txt
[07/05 09:40:14][INFO][ma_cau-deployer.py 49]: {
 "text": "00326",
 "score": 0.9999999046325684
}
[07/05 09:40:14][INFO][ma_cau-deployer.py 59]: ************************ End Deployer ************************
python manage.py deploy --cfg algorithms/mmocr/config/textrecog/config.py --launch_remote本地部署成功后可直接进行在线部署,大约需要12分钟。


 

步骤7:清除资源和数据

完成之后,记得清除资源和数据,避免产生不必要的费用:

  • 停止Notebook:在“Notebook”页面,单击对应实例操作列的“停止”。
  • 删除数据:前往OBS,删除上传的数据,然后删除文件夹及OBS桶。
  • 停止在线服务:在Modelarts部署上线->在线服务界面,单击对应在线服务操作列的“更多”->“停止”。

总结

完成水表表盘读数识别的实验之后,对华为云提供的算法开发套件功能有了更深一些的了解。

华为云提供的算法开发套件,可以实现目标检测功能,通过导入数据集、选择模型、训练等一系列流程,快速完成目标检测任务(详见:目标检测算法套件使用Demo)。

接下来,对于算法开发套件,我会继续进行研究和实验,掌握更多的业务用途。

未来,也期待与华为云ModelArts一起实现更多的可能。


作者:非职业「传道授业解惑」的开发者叶一一
简介:「趣学前端」、「CSS畅想」系列作者,华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1429219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLO-World: Real-Time Open-Vocabulary Object Detection

文章目录 1. Introduction2. Experiments2.1 Implementation Details2.2 Pre-training2.3 Ablation Experiments2.3.1 预训练数据2.3.2 对RepVL-PAN的消融研究2.3.3 文本编码器 2.4 Fine-tuning YOLO-World2.5 Open-Vocabulary Instance Segmentation2.6 Visualizations Refere…

R语言分析任务:

有需要实验报告的可CSDN 主页个人私信 《大数据统计分析软件(R语言)》 实 验 报 告 指导教师: 专 业: 班 级: 姓 名: 学 …

Multisim14.0仿真(四十三)LM311应用

一、LM311简介: lm311是一款高灵活性的电压比较器,能工作于5V-30V单个电源或正负15V分离电源。 二、LM311主要特性: ★ 快速响应时间:165 ns。 ★ 选通能力。 ★ 最大输入偏置电流:300nA。 ★ 最大输入偏置电流&#…

8868体育助力意甲尤文图斯俱乐部 帮助球队签订新合同

意甲的尤文图斯俱乐部是8868合作体育球队之一,根据意大利媒体的消息,尤文图斯已经决定和费德里科-基耶萨续约,这名球员已经开始思考他的将来了。 费德里科-基耶萨今年26岁,他和尤文图斯的合约到2025年6月30号就结束了。他知道很多…

大数据分析|设计大数据分析的三个阶段

文献来源:Saggi M K, Jain S. A survey towards an integration of big data analytics to big insights for value-creation[J]. Information Processing & Management, 2018, 54(5): 758-790. 下载链接:链接:https://pan.baidu.com/s/1…

flask基于django大数据的证券股票分析系统python可视化大屏

证券分析系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的Python进行编写,使用了Django框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改,对股票信息、股票买入、…

[Linux 进程(六)] 写时拷贝 - 进程终止

文章目录 1、写时拷贝2、进程终止2.1 进程退出场景2.1.1 退出码2.1.2 错误码错误码 vs 退出码2.1.3 代码异常终止引入 2.2 进程常见退出方法2.2.1 exit函数2.2.2 _exit函数 本片我们主要来讲进程控制,讲之前我们先把写时拷贝理清,然后再开始讲进程控制。…

从源代码看Chrome 版本号

一直以来都是用Chrome 浏览器,但是看到Chrome 点分4 组数据的表达方式,总是感觉怪怪的,遂深入源代码了解她的版本号具体表示的内容 chrome 浏览器中显示的版本号 源代码中的版本号标识 版本号文件位于 chrome/VERSION , 看到源代…

Docker上安装配置tomcat

目录 1. 拉取镜像 2. 创建运行镜像 3. 查看是否创建成功 ps:如果出现404错误 tomcat目录结构 1. 拉取镜像 这里使用 tomcat:8.5.40 版本作为安装 docker pull tomcat:8.5.40 2. 创建运行镜像 docker run -d --name tomcat -p 8080:8080 \--privilegedtrue …

2024最新版Sublime Text 4安装使用指南

2024最新版Sublime Text 4安装使用指南 Installation and Usage Guide to the Latest Sublime Text 4 in 2024 By JacksonML 0. Sublime Text是什么? Sublime Text 由自定义组件构建,支持Python, Java, C/C等多种编程语言,并为用户提供无与…

记一次 Android CPU高使用率排查

文章目录 背景排查高占用的进程adb shelltoptop -b -H -n 1 | grep 29337 (打印各线程 cpu使用详情)kill -3 29337 (生成trace文件)adb pull /data/anr /Users/gerry.liang/Desktop定位问题 补充说明: 背景 测试同学反馈我们的App CPU使用率 90% 居高不下,经过一番艰难的排查后…

flutter如何实现省市区选择器

前言 当我们需要用户填写地址时,稳妥的做法是让用户通过“滚轮”来滑动选择省份,市,区,此文采用flutter的第三方库来实现这一功能,比调用高德地图api简单一些。 流程 选择库 这里我选择了一个最近更新且支持中国的…

本体匹配方法概述

目录 前言1 基于术语匹配的方法1.1 字符串匹配1.2 语言方法 2 基于虚拟文档的方法3 基于结构的匹配方法3.1 结构信息利用3.2 Anchor-prompt方法 4 大型本体匹配4.1 本体划分4.2 匹配分块4.3 实体间映射 结语 前言 本文将深入探讨本体匹配的不同方法,从基于术语匹配…

Python||五城P.M.2.5数据分析与可视化_使用华夫图分析各个城市的情况(上)

目录 五城P.M.2.5数据分析与可视化——北京市、上海市、广州市、沈阳市、成都市,使用华夫图分析各个城市的情况 1.北京市的空气质量 2.广州市的空气质量 【上海市和成都市空气质量情况详见下期】 五城P.M.2.5数据分析与可视化——北京市、上海市、广州市、沈阳市、成…

108.乐理基础-五线谱-五线谱的拍号、音符与写法

内容参考于:三分钟音乐社 上一个内容:十五度记号-CSDN博客 上一个内容联系的答案: 调号、拍号、速度的性质与内涵跟简谱里一样,所以这里只会写它们在五线谱里造型上有什么改变,该怎样去识别。 拍号:五线…

深度学习入门笔记(七)卷积神经网络CNN

我们先来总结一下人类识别物体的方法: 定位。这一步对于人眼来说是一个很自然的过程,因为当你去识别图标的时候,你就已经把你的目光放在了图标上。虽然这个行为不是很难,但是很重要。看线条。有没有文字,形状是方的圆的,还是长的短的等等。看细节。纹理、颜色、方向等。卷…

聚观早报 | 360 AI搜索App上线;岚图汽车与京东达成合作

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 1月30日消息 360 AI搜索App上线 岚图汽车与京东达成合作 三星电子在硅谷新设实验室 小米平板7系列参数曝光 Spa…

【文本到上下文 #8】NLP中的变形金刚:解码游戏规则改变者

一、说明 欢迎来到我们对不断发展的自然语言处理 (NLP) 领域的探索的第 8 章。在本期中,我们将重点介绍一项重塑 NLP 格局的突破性创新:Transformers。在我们之前对 seq2seq 模型、编码器-解码器框架和注意力机制的讨论之后&#…

OpenCV+ moviepy + tkinter 视频车道线智能识别项目源码

项目完整源代码,使用 OpenCV 的Hough 直线检测算法,提取出道路车道线并绘制出来。通过tkinter 提供GUI界面展示效果。 1、导入相关模块 import matplotlib.pyplot as plt import numpy as np import cv2 import os import matplotlib.image as mpimg …

第三篇:跨平台QT开发-元对象系统

元对象系统 元对象系统是一个基于 标准 C的扩展 ,为 Qt 提供了信号与槽机制、实时类型信息,动态属性系统 元对象系统的三个基本条件:类必须继承自 QObject、类声明 Q_OBJECT 宏(默认私有 有)、元对象编译器 moc。 class ExamDia…