基于华为云ModelArts的水表读数识别开发实践
项目简介:
这里实现了如何端到端完成水表读数识别项目。涉及领域包括图像分类、语义分割、OCR文本检测、OCR文本识别。
本案例提供的方法较多,涉及多个模型,但不需要运行所有的模型。如果都测试一遍,默认创建的5GB磁盘规格可能不够用。
磁盘空间不够时可以将不需要的数据和模型文件删除,腾出空间;或者创建NoteBook时将磁盘规格增加到10GB。
解决方案流程:
一、使用语义分割或者OCR文本检测算法识别水表读数所在的四边形区域,并对四边形进行仿射变换转换成矩形,保存成新的图片数据。
二、如果文本区域的图片翻转严重,那第一步抠图生成的数据可能会有180度的翻转。因为文本识别的算法对翻转180度的场景效果不佳,所以再训练一个识别文本翻转的分类模型(本案例图片旋转角度微小,不需要此步骤,内容可供参考)。
三、利用步骤一中检测并抠图出来的文本数据训练OCR文本识别算法,识别图片中的文本内容,即数字。
数据集为华为云AI Gallery上提供的数据集。详情可参见本案例的关联资产。
下载该项目依赖脚本:
该案例效果图如下
import cv2import matplotlib.pyplot as plt
plt.figure(figsize=(10, 10))plt.imshow(cv2.imread('./imgs/result1.PNG'))plt.show()
教程目录
准备环境
准备数据
数据下载
数据切分
文本检测
数据准备
下载预训练模型
训练
推理
抠图
数据准备
下载预训练模型
训练
推理+四边形定位+矫正
分割算法(推荐)
文本检测算法
文本翻转检测(可选)
数据准备
下载预训练模型
训练
推理
文本识别
数据准备
下载预训练模型
训练
推理
端到端识别
分割算法
文本识别算法
1.准备环境
请在本页面的
5.3.训练
训练的数据集、模型、优化器等均已保存在配置文件./textrecog/water_meter_textrecog_config.py和./textrecog/base_config.py中。
base_config.py文件是基础配置,可不必改动。
water_meter_textrecog_config.py文件是针对该案例的配置,例如数据路径、预训练模型路径、epoch数、学习率等可直接在此文件中修改。
默认训练50个epoch,精度不够,可以修改water_meter_textrecog_config.py中的训练参数进行调参。
训练生成的模型保存在./train_url/textrecog路径下。大约耗时2-3分钟左右:
推理结果可视化:
from util import show_pair
img_dir = './data/raw/test_imgs'res_dir = './outputs_with_seg'show_pair(img_dir, res_dir, show_num=2)
6.2文本识别算法
与分割算法算法二选一。
如果文本检测部分使用的是文本识别算法,参考infer_end2end_with_textdet.py脚本,模型路径,数据路径都配置在了该脚本中,可修改该脚本。
如果前面的模型或者数据有改动部分,该脚本请同步修改。
!python infer_end2end_with_textdet.py \--num_classes=2 \--img_path=./data/raw/test_imgs \--out=./outputs_with_textdet \--detect_180=False
# num_classes:类别数
# img_path:推理图片路径
# out:推理结果保存路径
# detect_180:如果训练了识别翻转的模型,设置detect_180=True即可,默认值为False
推理结果可视化:
from util import show_pair
img_dir = './data/raw/test_imgs'res_dir = './outputs_with_textdet'show_pair(img_dir, res_dir, show_num=2)
转载请在文章开头和结尾显眼处标注:作者、出处和链接。不按规范转载侵权必究。
未经授权严禁转载,授权事宜请联系作者本人,侵权必究。
本文禁止转载,侵权必究。
授权事宜请至数英微信公众号(ID: digitaling) 后台授权,侵权必究。
评论
评论
推荐评论
暂无评论哦,快来评论一下吧!
全部评论(0条)