0 引言

本报告为家用水表物联网检测仪实例的技术报告:

(1)本家用水表物联网检测仪实例的开发流程包含相机定位架、运算和显示模块固定架的机械设计;

(2)本实例采用Vscode+M5插件开发M5GO Lite,用于显示图像处理结果,并将结果通过wifi传输给阿里云;

(3)本实例采用Maxipy开发Widora AIRV r2用于处理表端图像,并将图像处理结果传输给M5 GO;

(4)本实例采用Flask Python于阿里云开发数据接收脚本。       

java识别水表 水表拍照识别_java识别水表

1机械设计方面

本实例购置了如图所示的家用水表检测仪。通过测量家用水表的相应参数,设计了相应的家用水表检测仪实例的机械结构。通过Solidworks绘制三维图纸和3D打印机打印,按照最终方案设计图制作最终实例。

设计主要分为以下两部分:

1.1底座部分

关于检测仪的底座部分,采购相应的标准家用水表,根据水表的外边尺寸规划安装固定部分。多次实践后,采用了将检测仪固定在水表表盖上的解决方案。该方案具体实施流程:一对表盖连接构件与表盖直接连接,两表盖连接结构件同时固定在中间梁架;

java识别水表 水表拍照识别_flask_02

1.2 模块固定部分

关于M5 GO和AIRV r2模块的固定,根据官方提供的外观参数,本实例设计了相应的固定件。其设计图和实际图的最终效果如图3所示,两模块的固定件同时与中间连接件连接。关于ov2640相机的标定计算参照相关的相机标定流程。

java识别水表 水表拍照识别_python_03

2 硬件算法设计

整体硬件算法流程图,如图4所示。

java识别水表 水表拍照识别_tensorflow_04

2.1 k210图像处理模块算法设计

本实例的图像处理算法,包含针对指针的识别计算以及数字的识别计算。当完成整个表示数的检测时,通过串口将结果发送给M5 GO模块。

2.1.1 k210指针识别

基于Openmv库开发设计,包含对四个圆区域内指针的检测。检测指针内圆与小表盘外圆之间范围内满足特定像素值范围的像素信息,根据统计到的像素信息,经过相应加权计算将得到最终的指针角度,其检测效果如图5所示。

java识别水表 水表拍照识别_python_05

2.1.2 k210数字识别

基于K210的神经网络数字检测,利用k210芯片自带的kpu,加载kmodel网络模型,实现对印刷体数字的检测识别分类。提取五个数字矩形区域,针对五块矩形数字区域进行预处理:预处理包括灰度化、中值滤波二值化等操作。在预处理后,将预处理后矩形区域内像素数据输入进网络中进行类别预测。

针对所述kmodel模型生成的前期工作包含以下过程:

  1. 基于tensorflow编写打印字母神经网络脚本;
  2. 通过数据增广生产打印字母数据集;
  3. 训练网络并保存pb模型;
  4. 将pb转化为tflite模型;
  5. 通过ncc工具将tflite转化为可供k210加载的kmodel模型;

2.1.3串口通讯

模块完成2.1.1和2.1.2中的检测算法后,模块需要将检测结果通过串口形式传输给M5 GO模块。针对k210的串口通讯,实例选用串口2。随串口2的初始化及设置,相关串口设置信息为:比特率115200;数据位8;校验位None;停止位1。

 

2.2 关于M5 GO算法设计

2.2.1 M5 GO串口通讯

M5 GO模块采用与2.1.3同样配置完成通讯。

2.2.2 M5 GO界面设计

从左至右的数字分别表示×10000、×1000、×100、×10、×1。从右至左的小表盘分别表示×0.1、×0.01、×0.001、×0.0001。

java识别水表 水表拍照识别_神经网络_06

2.2.3 数据上传

通过https请求,将2.2.1接收到的数据传输给服务器。

 

3 服务器

注册阿里云服务器,购买域名,并进行实名认证。配置服务器为ubuntu系统,安装相应开发环境。其中服务器端接收脚本基于Flask库。

此处附图为阿里云后台数据。

由于设备数目较少,并未制作数据库和相应网站,仅验证了跨域通讯功能。

java识别水表 水表拍照识别_flask_07