首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
V2EX  ›  分享创造

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

  •  
  •   msmmbl · 6 天前 · 2734 次点击

    自从用上了 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 实在是太高调了,夜晚楼道里一闪一闪的很是吓人。

    微信图片_20190909154747.jpg

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

    TIM 截图 20190909155818.png

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

    e0-2019-03-30-15-49-09.jpg

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

    r0-2019-03-18-11-29-43.png

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

    n0-2019-03-18-11-30-10.png p2-2019-03-18-13-44-10.png

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

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

    第 1 条附言  ·  4 天前
    已订购焦距更大的镜头,看能否拍到更大的图像,这样也许会清晰些
    第 2 条附言  ·  1 天前

    新的镜头到货,原来16mm的镜头,换成了25mm的镜头,效果提升,至少现在能看清楚圆盘上的小字了,大赞! dark2-3.jpg

    32 回复  |  直到 2019-09-14 23:43:54 +08:00
        1
    SeaRecluse   6 天前
    啊,你这都固定位置了,完全用不上模型啊。表盘边缘检测下,然后根据坐标不就知道数字了- -,另一个水表的数字直接 OCR,不用分类器
        2
    optional   6 天前
    👍🏻 这行动力
        3
    lxrmido   6 天前
    求教 LZ 是用什么做效果图的?最近打印 pi 的外壳想装到花盆上观察植物生长,用尺子量尺寸量得心好累,一个外壳要打印七八次实物出来一点点修改等得心态快炸了
        4
    sadfQED2   6 天前
    你都用上 opencv 了,简单二值化,然后直接丢 tesseract ocr 就完事了,还要什么 tensorflow
        5
    chengxiao   6 天前
    如果不在乎钱的话 可以找一些线上的打码平台,专门识别验证码的,价格差不多几离到 1 分一次
        6
    allgy   6 天前
    提高输入图像的质量,1.换高清摄像头,2 改善光线条线 ?
        7
    nisnaker   6 天前   ♥ 1
    按 1 楼所说,监测一些固定的像素就能确定指针的指向吧;另外提供一个思路,我觉得直接用 0342 那张图,末位数字的纵坐标也能确定小数点后边的值,都不用看指针。
    就比如 0342 这张图,看 4 和 2 的位置,2 应该是向上移动的,按说应该是 2 垂直居中的时候是 2.0,现在看好像是往上走了一点点,但远没到 3,姑且认为是 2.1 或 2.05 吧,精确的值可以多搜集一些数据把公式求出来就行了。
        8
    msmmbl   6 天前
    @SeaRecluse 谢谢。表盘边缘检测我试试看能不能把特征搞出来。
    @lxrmido Altium Designer 可以导出 pcb 和 3d 元器件为 step 文件,然后导入 solidworks 中。然后就可以画外壳啦。
    @sadfQED2 谢谢,tesseract ocr 我去了解下。
    @chengxiao 哈哈,人肉识别,很强势
    @allgy 嗯,是,硬件上,后期考虑换树莓派 v2 的 camera,这样可以得到更多的像素,以及增加更多的红外 led (不过红色指针会不会在更多的红外 led 上更清晰还需要实验)。不过这一版既然已经人肉可分辨了,还是考虑能否在软件上搞定。
        9
    seraphv3   6 天前
        10
    xmoiduts   6 天前
    觉得判定最小数字位置的方案可行;另外,那个黑色大兴机场型指针敏感度应该最高,如果能拍到视频,也可以间接测出水流量吧。
        11
    msmmbl   6 天前
    @xmoiduts 拍视频应该问题不大。可是这个黑色的东西有时候转的很快,快到只有阴影的那种。可能是这种弱光情况下帧率上不去……我得再看看。
        12
    msmmbl   6 天前
    @seraphv3 谢谢
        13
    CloudnuY   6 天前
    @xmoiduts #10 大兴机场指针绝了🤣
        14
    shintendo   6 天前   ♥ 1
    原来是真的水表
        15
    cshlxm   6 天前
    这个查水表的方式 硬核~ 楼主行动力真 nb~ 6666
        16
    koala9527   6 天前
    有这个动手能力,在家再接一个流量传感器就行了。。。
        17
    qping   5 天前
    3d 打印是自己买设备么
        18
    ty89   5 天前
    把你家的总表换成智能的就行了,费这劲
        19
    sorasyl   5 天前
    你这头像,怪不得要查水表
        20
    hahaayaoyaoyao   5 天前 via Android
    自己写代码,我可惜帮你。
        21
    ziding   5 天前   ♥ 1
    我说个我们原来水表上用过的方案,在最小的指针上嵌入一小块磁铁,然后外面用霍尔进而感应计数。
        22
    deorth   5 天前
    楼主这头像让我以为是要防查水表
        23
    piaochen0   5 天前
    我只知道有一个朋友的公司做这套算法,让一个程序员什么事情都没干,专研了半年搞出来了...
        24
    classyk   5 天前
    是否可以考虑加一点光源,在拍摄的时候打开光源,以提升图像质量
        25
    msmmbl   4 天前
    @koala9527 @ty89 我们这边水表以及附近的设备的物权属于自来水公司,而且管路都预埋在墙里了,我做不了什么,下次装修回考虑。
    @qping 3d 打印机现在基本从硬件到软件都开源了,我参考了这个贴子 https://post.smzdm.com/p/332896/组了台,外观丑了点但是效果还行。整个过程还是很有意思的,考虑组个?
    ![未标题-1.jpg]( https://i.loli.net/2019/09/11/maGrN9ROiUuHL52.jpg)
    @ziding 霍尔是个挺不错的方案,可以做到很低的功耗。用霍尔传感器检测磁性唤醒 MCU 计数就行。然而我这水表全塑料的,一点磁性都没。
    @piaochen0 原来这东西这么难啊
    @classyk 嗯,后期实在不行有个计划,在表盘附近按一个用电池驱动的绿光 led,和摄像头无线联动拍摄时候同步照亮指针区域,因为区域小可以用很小的 led,应该不会太高调。
        26
    qping   4 天前
    @msmmbl #25 我仿佛看到了一个很深的坑。。。而且我还想跳进去。。。。
        27
    msmmbl   4 天前
    @qping 干起来干起来
        28
    ziding   4 天前
    @piaochen0 太长了吧,基础的图形学应用啊
        29
    webshe11   4 天前
    头像 + 标题 = cha 水表
        30
    tmsdy0404   3 天前 via iPhone
    执行力 max!!

    也想入 3D 打印的坑。。。。
        31
    zomco   2 天前 via Android
    就用 OCR,不要用 tensorflow
        32
    msmmbl   1 天前
    @tmsdy0404 支持入坑,可以用了做一些 DIY,很不错的。
    @zomco ok,记住啦,我试试。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4054 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 28ms · UTC 02:24 · PVG 10:24 · LAX 19:24 · JFK 22:24
    ♥ Do have faith in what you're doing.