自从用上了 homeassistant,总是想着把家里的各种东西集成进去。上次把总电量接入了(参考我的贴子: https://bbs.hassbian.com/thread-6410-1-1.html )。
这次又想着把用水量也接进去。收集这些数据,期望可以发现:
家里的水表是放在门外的公共水表间里面的。大概就是在楼道里面有一个门,门里面排着很多水表,门一关里面黑黑的。水表就是普通的塑料水表了。
为了低调,在水表间房顶安装了 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 里面跑一跑(初学只是看了一些书),用了普通的回归做出来效果也不怎样。这块我就卡在这里不知道怎么办了,没有任何思路,求指点。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.