求教用图像识别水表的算法

2019-09-09 16:11:58 +08:00
 msmmbl

自从用上了 homeassistant,总是想着把家里的各种东西集成进去。上次把总电量接入了(参考我的贴子: https://bbs.hassbian.com/thread-6410-1-1.html )。

这次又想着把用水量也接进去。收集这些数据,期望可以发现:

  1. 每天的用水习惯是怎样的
  2. 是不是存在漏水的情况(水表一直缓慢转动,或者在家没有人的情况下发生转动,说明有地方漏水了)
  3. 是不是忘记关水了(水表一直长时间转动)

家里的水表是放在门外的公共水表间里面的。大概就是在楼道里面有一个门,门里面排着很多水表,门一关里面黑黑的。水表就是普通的塑料水表了。

为了低调,在水表间房顶安装了 raspberry zero w 和 pi camera,用 gpio 控制当拍摄时,打开 8 颗红外 led 闪光照明。把所有的东西放在一个 3d 打印的盒子里面。用细线引直流电源供电。3d 打印的外壳为黑色,并且没有可见光照片,在黑漆漆的水表间中很没有存在感。pi camera 是 1 代的 500W 像素,距离水表表盘大概 4 米。表盘大小为 8cm 的样子。为了得到足够大的图,给 pi camera 换了一个焦距大概是 10mm 左右的监控镜头。

这是第一版的图:画了块 PCB,上面有白光 led、dc-dc 电路、一个电机驱动(想后期接机械臂用来远程开关水阀)、光照度传感器、时钟芯片、还有块液晶屏。这一版没有最终采用,因为白光 led 实在是太高调了,夜晚楼道里一闪一闪的很是吓人。

第二版就去掉了不少东西,led 换成了红外的,电机驱动、屏幕光照啥的全部去掉,这一版给直接安屋顶了没拍照片,不过 3d 打印外壳的时候,为了得到尺寸,做了个 3d 效果图。

这样搞了一波后,在 respberry 中用 crontab 每隔 30s 跑脚本拍照,拍出来的照片大概是这样子的。最右边的那个表盘是咱家的。

经过一波 opencv 各种心态学、边界操作后(这图的特征是表盘比表盘的边暗很多,这特征很容易分开表盘)。找到了表盘。

在经过一波 opencv 的模板匹配(我只关心这种样子的水表,那做一个模板把对应的区域切出来)。得到了数字和指针。

其中数字还是挺清晰的,0342,边缘增强,二值化也容易,然后四等分后,跑一个分类器,再考虑写边界条件,估计就 ok 了。

指针有点模糊,但是肉眼还是可以分辨是指向下面的。分析:本身指针是红颜色的,表盘是白色的,在红外 led 的照射下,红色指针能反射红外光,表盘能反射红外光,所以两者的区别就不是很大。要二值化分离出来找形态特征似乎不是很容易。放 tensorflow 里面跑一跑(初学只是看了一些书),用了普通的回归做出来效果也不怎样。这块我就卡在这里不知道怎么办了,没有任何思路,求指点。

7126 次点击
所在节点    分享创造
37 条回复
SeaRecluse
2019-09-09 16:27:16 +08:00
啊,你这都固定位置了,完全用不上模型啊。表盘边缘检测下,然后根据坐标不就知道数字了- -,另一个水表的数字直接 OCR,不用分类器
optional
2019-09-09 16:46:46 +08:00
👍🏻 这行动力
lxrmido
2019-09-09 17:00:13 +08:00
求教 LZ 是用什么做效果图的?最近打印 pi 的外壳想装到花盆上观察植物生长,用尺子量尺寸量得心好累,一个外壳要打印七八次实物出来一点点修改等得心态快炸了
sadfQED2
2019-09-09 17:05:51 +08:00
你都用上 opencv 了,简单二值化,然后直接丢 tesseract ocr 就完事了,还要什么 tensorflow
chengxiao
2019-09-09 17:07:33 +08:00
如果不在乎钱的话 可以找一些线上的打码平台,专门识别验证码的,价格差不多几离到 1 分一次
allgy
2019-09-09 17:21:48 +08:00
提高输入图像的质量,1.换高清摄像头,2 改善光线条线 ?
nisnaker
2019-09-09 17:30:21 +08:00
按 1 楼所说,监测一些固定的像素就能确定指针的指向吧;另外提供一个思路,我觉得直接用 0342 那张图,末位数字的纵坐标也能确定小数点后边的值,都不用看指针。
就比如 0342 这张图,看 4 和 2 的位置,2 应该是向上移动的,按说应该是 2 垂直居中的时候是 2.0,现在看好像是往上走了一点点,但远没到 3,姑且认为是 2.1 或 2.05 吧,精确的值可以多搜集一些数据把公式求出来就行了。
msmmbl
2019-09-09 17:37:41 +08:00
@SeaRecluse 谢谢。表盘边缘检测我试试看能不能把特征搞出来。
@lxrmido Altium Designer 可以导出 pcb 和 3d 元器件为 step 文件,然后导入 solidworks 中。然后就可以画外壳啦。
@sadfQED2 谢谢,tesseract ocr 我去了解下。
@chengxiao 哈哈,人肉识别,很强势
@allgy 嗯,是,硬件上,后期考虑换树莓派 v2 的 camera,这样可以得到更多的像素,以及增加更多的红外 led (不过红色指针会不会在更多的红外 led 上更清晰还需要实验)。不过这一版既然已经人肉可分辨了,还是考虑能否在软件上搞定。
seraphv3
2019-09-09 19:34:54 +08:00
xmoiduts
2019-09-09 19:56:42 +08:00
觉得判定最小数字位置的方案可行;另外,那个黑色大兴机场型指针敏感度应该最高,如果能拍到视频,也可以间接测出水流量吧。
msmmbl
2019-09-09 20:23:34 +08:00
@xmoiduts 拍视频应该问题不大。可是这个黑色的东西有时候转的很快,快到只有阴影的那种。可能是这种弱光情况下帧率上不去……我得再看看。
msmmbl
2019-09-09 20:24:06 +08:00
@seraphv3 谢谢
CloudnuY
2019-09-09 20:39:10 +08:00
@xmoiduts #10 大兴机场指针绝了🤣
shintendo
2019-09-09 20:59:34 +08:00
原来是真的水表
cshlxm
2019-09-10 09:22:50 +08:00
这个查水表的方式 硬核~ 楼主行动力真 nb~ 6666
koala9527
2019-09-10 09:51:04 +08:00
有这个动手能力,在家再接一个流量传感器就行了。。。
qping
2019-09-10 11:08:16 +08:00
3d 打印是自己买设备么
ty89
2019-09-10 12:46:35 +08:00
把你家的总表换成智能的就行了,费这劲
sorasyl
2019-09-10 15:41:48 +08:00
你这头像,怪不得要查水表
hahaayaoyaoyao
2019-09-10 15:55:34 +08:00
自己写代码,我可惜帮你。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/599348

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX