PART I:仪表探测
* 方式1: 接入实时巡检视频流,生成带有仪表盘的顺序截图
a. 从视频中detect仪表,并用bounding box标出, 使用Faster_rcnn_resnet101网络训练,为提高计算速度,每1秒取一帧画面就可以,因为机器人移动速度很慢,在表盘的停留时间够长
b. 因为读表盘示数对表盘大小&清晰度要求较高,只有当探测图像占据的面积达到画面一定比例以上时,且位置相对居中,才符合截图条件
c. 为避免重复截图,时序上连续符合条件的截图只保留一张,但要注意聚焦问题,(cv.Laplacian(image, cv2.CV_64F).var() < threshold, then blur)与运行轨迹对应可以将仪表图片对号入座
Test 1
2018/08/24中午11点半左右开始,机器人具体出库时间不详,程序共运行62.5分钟
其中在48.6分钟内检测到18块仪表,发现三个误判
(编号空白因为没有截到仪表编号/仪表没有编号)
Cropped示例 & 识别示例 & 三个误判::
仪表编号在测试后进行过改编,此测试仅供效果参考* 方式2: 调取API接口传入图片,得到图片是否包含仪表盘的判断
对gauge_detection model使用falsk进行封装,图片地址是以img_addr=XXX 的形式嵌入在请求中的,需要把其中的”=”全部用”%26”替换,否则会影响识别,对”img_addr=”中的”=”造成混淆
接口返回值示例:
包含了PARTII仪表读数部分的结果code部分为识别结果
0:存在可读数仪表盘;1:圆盘定位故障;2:复杂表盘读数故障;3:数字&角度validate失败
4:读数故障;5:不存在可读数仪表盘
msg部分为读数结果
读数精确到小数点后一位
PART II:仪表读数
难点分析:表盘种类繁多,有的还为多指针
Step1: 用深度学习识别数字
Step2: 根据数字位置定位表盘及圆心
Step3: 定位指针角度
Step4: Generate readings
测试结果示例:
准确度还是比较高的,对于开*视频流中唯一一种复杂表盘,无法用以上通用读法攻克,单独做了应对处理。
PART III : PROJECT PROGRESS
2018/10/12
两个场地的测试样本接收,4500条
2018/10/13 - 2018/10/25
一轮一轮的调试优化代码
2018/10/26
识别及读数效果统计
2018/10/29
场地三测试样本接收,10000条
2018/10/30 -
因为新的测试样本中有很多表盘带有小数点,更新算法以解决小数点的问题
source code: https://git.c.citic/lijy/GaugeReading (Private,未对外开设权限)
网友评论