水表刻度识别数据集 | 水表读数 指针识别 关键点检测 字符识别 OCR9138期
数据集概述
本数据集专注于水表表盘刻度与指针的视觉识别,服务于智能水务管理、自动抄表系统及城市基础设施数字化。数据涵盖水表刻度与指针位置,适配智能读表、远程抄表及计费系统等应用。
数据集核心信息
| 数据要素 | 详细说明 |
|---|---|
| 类别 | 共1类:水表 |
| 数量 | 1500张图像 |
| 格式 | 图像为 JPG/PNG;标签为 YOLO 关键点检测格式(txt)+ PPOCR 识别格式 |
| 配套资源 | 预训练模型、ONNX 推理代码、完整训练与推理工作流 |
| 应用价值 | 1.智能抄表:替代人工现场抄表,实现水表读数的远程自动化采集与录入。 2.计量管理:支撑供水企业实时监测用水量,辅助漏损分析与管网调度。 3.智慧城市:为城市基础设施数字化提供基础数据采集能力。 4.算法研发:为指针式仪表识别、关键点检测与字符识别等视觉任务提供真实场景的训练与评测数据。 |
完整类别列表(共1类)
| 序号 | 英文名称 | 中文释义 | 说明 |
|---|---|---|---|
| 1 | water_meter | 水表 | 水表表盘及指针区域 |
数据三要素解析
类别与识别目标
- 数据集定义1个核心类别:水表(water_meter),聚焦于水表表盘区域。
- 采用YOLOv8Pose检测水表指针位置(关键点),结合CRNN进行数字识别,构成端到端的读数系统。
- 指针位置的关键点检测是读数的基础,通过指针角度可计算对应刻度值。
数据规模与格式
- 图像总量约1500张,规模适中,适合作为水表读数识别任务的基准数据集。
- 提供YOLO 关键点检测格式(txt)与PPOCR 识别格式,可分别用于指针检测与数字识别任务。
- 附赠预训练模型与ONNX 推理代码,支持端到端部署。
技术方案与工作流
- YOLOv8Pose:用于检测水表表盘区域与指针关键点位置。
- CRNN:用于识别表盘上的数字字符。
- 推理工作流:将 YOLOv8Pose 与 CRNN 结合,实现从图像输入到读数输出的端到端处理。
- 提供完整的数据准备、环境部署、模型训练、推理工作流及可视化验证脚本。
知识普及:水表读数识别的技术要点
- 指针角度计算:通过 YOLOv8Pose 检测指针关键点后,可计算指针相对于表盘中心的角度,进而映射到对应刻度值。
- 数字识别:CRNN(卷积循环神经网络)适合处理不定长字符序列,常用于仪表数字识别。结合 CTC 损失函数,可直接输出读数序列。
- 图像预处理:水表图像可能存在光照不均、表盘反光、指针遮挡等问题,需进行灰度化、对比度增强、去噪等预处理。
- 多指针识别:部分水表有多个指针(如千位、百位、十位、个位),需分别检测各指针位置并独立计算读数。
- 应用闭环:识别结果可结合用户信息与时间戳,自动生成抄表记录,服务于水务计费与漏损分析。
快速开始(代码示例)
1. 准备配置文件 (dataset.yaml)
train:./images/trainval:./images/valnc:1names:['water_meter']2. 训练 YOLOv8Pose
fromultralyticsimportYOLOimportos dataset_path='path/to/dataset'model=YOLO('yolov8n-pose.pt')results=model.train(data=os.path.join(dataset_path,'dataset.yaml'),epochs=100,imgsz=640,save=True)3. 训练 CRNN(数字识别)
importtorchimporttorch.nnasnnimporttorch.optimasoptimfromtorch.utils.dataimportDataLoader# CRNN 模型定义与训练过程详见数据集文档# 核心流程:加载数据 → 定义模型 → 训练 → 验证4. 推理工作流
importcv2importnumpyasnpimportonnxruntimeasortfromultralyticsimportYOLO# 加载模型yolo_model=YOLO('runs/train/exp/weights/best.pt')ort_session=ort.InferenceSession('crnn.onnx')defread_water_meter(image_path):image=cv2.imread(image_path)results=yolo_model(image)forresultinresults:boxes=result.boxes.cpu().numpy()keypoints=result.keypoints.cpu().numpy()forbox,keypointinzip(boxes,keypoints):r=box.xyxy[0].astype(int)roi=image[r[1]:r[3],r[0]:r[2]]# 使用 CRNN 识别数字digit=infer_crnn(roi)print(f'Digit:{digit}')标签
水表读数指针识别关键点检测字符识别OCRYOLO格式深度学习数据集计算机视觉