搜索
bottom↓
回复: 25

图像识别机械表头位置的方法不够完善,恳请坛友给点建议

[复制链接]

出0入0汤圆

发表于 2018-12-12 16:17:14 | 显示全部楼层 |阅读模式
本帖最后由 Malo 于 2018-12-13 09:13 编辑

关于机械式表头的刻度位置识别
机械式表头一直在转动,边上有刻度,如图所示。借用正点原子的做法稍作改动,主控使用STM32F4,使用豪威的OV2640摄像头去读取影像信息,通过DMA的传输方式将摄像头图像信息搬运到屏幕上,最后识别显示屏上的颜色判断刻度线是否在屏幕指定位置。
目前功能已经实现,每次出现刻度时候即发出一个脉冲信号给外部接受设备。比如刻度5的时候发出一个脉冲,6的时候发出一个。。以此类推。。
不过有个小麻烦,两次发出脉冲的时间间隔不一样,要求达到的精度是1%以内。例如转动到标准的两个刻度之间间隔为100s,故每间隔发出的脉冲信号必须落在99s到101s之间,现在做到的精度有时候会偏离范围。
分析原因:
1.由于表头转动速度太慢,所以可能会导致每次刻度出现的时间会有误差
2.摄像头数据采集只要30帧,加上处理应该只有25帧,处理过慢。
请教各位坛友,从软件处理方式上出发,有没有更好的识别思路呢?改良精度的问题。


检测位置为图片中小红框区域,转动到中间位置的时候被检测到。
之前的测试方法为使用光电头采集上面的反光片,出来的脉冲信号是在精度要求范围内的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2018-12-12 17:22:56 | 显示全部楼层
刻度盘边上附加个编码器,搞定

出0入0汤圆

发表于 2018-12-12 20:40:38 | 显示全部楼层
没看懂第2条,究竟一秒处理多少帧?
只处理红框区域应该花不了多少时间吧。

出0入0汤圆

发表于 2018-12-12 22:02:43 | 显示全部楼层
有意思的应用,不过1s内的精度识别应该可以做到吧,ROI的相对位置是不是固定的?

出0入0汤圆

 楼主| 发表于 2018-12-13 08:34:26 | 显示全部楼层
yuangaoping 发表于 2018-12-12 17:22
刻度盘边上附加个编码器,搞定

是的,那肯定可以 ,不过这边的需求是使用屏显的呢,然后加编码器的成本也太高了呢

出0入0汤圆

 楼主| 发表于 2018-12-13 08:38:55 | 显示全部楼层
lcw_swust 发表于 2018-12-12 20:40
没看懂第2条,究竟一秒处理多少帧?
只处理红框区域应该花不了多少时间吧。 ...

处理30帧是摄像头1秒只能传输30帧数据到MCU,这个是官方数据,靠DMA完成的。
处理红色小框内的数据是花不了多少时间的,不过处理红色小框内数据时是不进行DMA搬运传输,所以满打满算1秒钟给算传输25帧数据。

出0入0汤圆

 楼主| 发表于 2018-12-13 08:50:51 | 显示全部楼层
hexenzhou 发表于 2018-12-12 22:02
有意思的应用,不过1s内的精度识别应该可以做到吧,ROI的相对位置是不是固定的? ...

相对位置是固定的,正常工作时候,表头和摄像头都是固定死的。
1秒钟内的精度也不太敢保证的,我的处理方法本身有缺陷,最后我才想明白的。
缺陷在于,在表头转动很慢的情况下,就例如前面说的100s转动了一位数字,这种情况下,在刻度条到达检测区域边缘时,若有若有,我是判定还没检测到的。直到真正被我判定为检测到的时间差距能有好多秒,究其原因一方面是处理思路的缺陷,另一方面表头转动为机械式,有误差在所难免。

既然表头和软件处理本身有问题,但是基于使用光电情况下数据是好的,所以我主要想把软件处理方面的误差给弥补掉。

出16170入6148汤圆

发表于 2018-12-13 08:59:40 来自手机 | 显示全部楼层
“图片识别方法求助 ”不是合格标题,违反版规11。

如不修正将被封锁ID。

出0入0汤圆

 楼主| 发表于 2018-12-13 09:04:41 | 显示全部楼层
armok 发表于 2018-12-13 08:59
“图片识别方法求助 ”不是合格标题,违反版规11。

如不修正将被封锁ID。 ...

收到,及时修改完。

出0入442汤圆

发表于 2018-12-13 09:13:26 | 显示全部楼层
你这定点区域直接二值化不就成了。当1的个数大于2/3最大值认为是1,小于1/3时认为是0,消除潜在干扰。

出0入0汤圆

发表于 2018-12-13 09:16:40 | 显示全部楼层
那就是若有若无的状态判断问题了,这种边缘状态要多试试调整状态机的判断方法,比如连续多少次“有”才判断为有效,连续多少次“无”才判断为无效,很像一般信号的毛刺处理问题,就是要想方法去抖。

出0入0汤圆

 楼主| 发表于 2018-12-13 09:36:48 | 显示全部楼层
wye11083 发表于 2018-12-13 09:13
你这定点区域直接二值化不就成了。当1的个数大于2/3最大值认为是1,小于1/3时认为是0,消除潜在干扰。 ...

你好,谢谢提出宝贵建议。
二值化是判定在不在范围内之前就做好的工作,不然也没有办法进行识别了。后面说的,我们假定总像素只有90个,当1的个数正好在临界点,也就是60个时候,多次二值化在59个到61个之间跳变很好理解的,这样就发出多个脉冲信号了。

针对这个情况,我用了小聪明去变通。当检测到大于60个点时,改变条件只要检测到40个点即在当前区域内;当检测到数量小于40个时,表明区域离开,发出一个脉冲信号,开始下一轮的刻度检测。

我发的这个求助帖子,归根结底,是每次最后检测到小于40个点的时间出现了误差,这个时候不知道怎么改善好。

出0入0汤圆

 楼主| 发表于 2018-12-13 09:41:31 | 显示全部楼层
hexenzhou 发表于 2018-12-13 09:16
那就是若有若无的状态判断问题了,这种边缘状态要多试试调整状态机的判断方法,比如连续多少次“有”才判断 ...

根本原因是一样的,只能判定相对的区域已经到达,划清界限哪个算在区域哪个算不在,很难做到。
我的检测方法在理论上是绝对没有问题的,实际上就会产生这样的问题呢。

出0入0汤圆

发表于 2018-12-13 09:52:13 | 显示全部楼层
了解过一个项目Pixy,颜色识别的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入264汤圆

发表于 2018-12-13 10:01:32 | 显示全部楼层
原图滤波后当成背景图,原图-背景图,得到差分图,对差分图二值化,算BOLB像素个数大小,满足就发信号1。当BLOB不存在时候就发送信号0

出0入0汤圆

发表于 2018-12-13 10:09:31 | 显示全部楼层
你的边缘判定条件不仅要有二值化后的个数,还可以加入时序判定条件,小于40阈值条件后还要连续小于多少时间,比如连续1秒内小于40才算无效。

出0入0汤圆

 楼主| 发表于 2018-12-13 10:22:40 | 显示全部楼层
styleno1 发表于 2018-12-13 09:52
了解过一个项目Pixy,颜色识别的。

这个项目查看留言后去搜索了一下,是个很不错的设备,不过没有办法借鉴。我这个项目太苛刻了,总的来说只能要单片机来处理,能配上电脑这个早就完事了。我也想用FPGA处理会不会好点,后来想想处理方式不改变掉,换什么处理器都一样的。

出0入0汤圆

 楼主| 发表于 2018-12-13 10:31:43 | 显示全部楼层
hexenzhou 发表于 2018-12-13 10:09
你的边缘判定条件不仅要有二值化后的个数,还可以加入时序判定条件,小于40阈值条件后还要连续小于多少时间 ...

这个和原先的做法应该没有区别,并不是普通的按键消抖这样简单的。
需要严格控制输出脉冲的时间,像连续1s钟内没有得到40个像素点的做法,不够严谨的。
谢谢你给提出方案

出0入0汤圆

 楼主| 发表于 2018-12-13 10:37:26 | 显示全部楼层
mcu_lover 发表于 2018-12-13 10:01
原图滤波后当成背景图,原图-背景图,得到差分图,对差分图二值化,算BOLB像素个数大小,满足就发信号1。当 ...

大神说的非常专业啊,这些名词我从网上搜索了才有粗略了解。
我这个设备说白了根本算不上图像处理或者识别,因为识别的一整套过程都没有,只是单纯的做了一个区域的颜色像素点统计而已。
如果加上这些过程,处理器会花费很大时间和资源,而且我只用了SMT32F4处理,可能都处理不了。这样一来,原本的传输30帧,就会大幅度下降,都没有空余时间更新摄像头数据了。
不过这个提出的方法,我会多多找资料,尽量做到让整个处理过程得到改善。
非常感谢

出0入442汤圆

发表于 2018-12-13 11:21:28 来自手机 | 显示全部楼层
Malo 发表于 2018-12-13 09:36
你好,谢谢提出宝贵建议。
二值化是判定在不在范围内之前就做好的工作,不然也没有办法进行识别了。后面 ...

那你就调大阈值呗。90个像素,>=80个判1,<=60个判0。这就是典型的fir滤波器了吧,我猜的,因为fir也是只看有没有。注意太阳光会不会造成影响,如果有影响你要计算白天夜晚白色区域的亮度差,然后做差滤波,毕竟你这条件太单一了。

出0入0汤圆

发表于 2018-12-13 15:24:58 | 显示全部楼层
燃气表抄表吧,这么做功耗能控制的住么。

出0入0汤圆

 楼主| 发表于 2018-12-13 16:41:43 | 显示全部楼层
scsdwxj2005_5 发表于 2018-12-13 15:24
燃气表抄表吧,这么做功耗能控制的住么。

一眼就被看穿了哈,是燃气抄表没错的,之前这种机械的表头都是看起始拍照做对比呢。
后面因为市场需求,出现了光电头检测铁片,一圈一个脉冲解放人工记录。
现在因为转动慢的时候实在太慢了,一圈转下来要个把小时,计量时间就打打增加了。
所以目前要转动一个数字就一个脉冲的,不需要转动一圈只需要转动过几个数字就能计量。
然后我就妥妥的出现问题求助广大坛友提供好的方案支持啦

出0入0汤圆

 楼主| 发表于 2018-12-13 16:43:17 | 显示全部楼层
本帖最后由 Malo 于 2018-12-13 16:45 编辑
scsdwxj2005_5 发表于 2018-12-13 15:24
燃气表抄表吧,这么做功耗能控制的住么。


功耗方面的话,直接使用的外部稳压电源供电,没有低功耗的需求。实际测量情况下,整个设备功耗也就100ma多点。
你所说到的功耗,在表头内部是有要求的,使用自带电池供电。我做的这个是外部检测的,不需要管功耗方面。

出0入0汤圆

发表于 2018-12-13 17:30:16 | 显示全部楼层
Malo 发表于 2018-12-13 08:38
处理30帧是摄像头1秒只能传输30帧数据到MCU,这个是官方数据,靠DMA完成的。
处理红色小框内的数据是花不 ...

每秒25帧的速度还是不慢的,建议二值化后作一个重心或中心检测。

出0入0汤圆

发表于 2018-12-13 20:51:24 | 显示全部楼层
本帖最后由 hexenzhou 于 2018-12-13 20:53 编辑

搞得这么麻烦,直接在抄表的时候拍整张图片识别就好了,只在需要抄表的时候拍照,平时休眠,识别这个图片难度不高。单片机玩这个不合适,树莓派+摄像头最适合了,树莓派上运行python + opencv。

出0入0汤圆

 楼主| 发表于 2018-12-14 08:23:05 | 显示全部楼层
hexenzhou 发表于 2018-12-13 20:51
搞得这么麻烦,直接在抄表的时候拍整张图片识别就好了,只在需要抄表的时候拍照,平时休眠,识别这个图片难 ...

以前人工的时候是这样操作的。下面用摄像头检测整个过程,首位总共的脉冲数量(转过的数字个数)要准确,所以不能休眠。当前没有解决方案的话,树莓派会重点考虑的,之前就知道可以使用这个处理,只是个人对这个零基础,所以一直没有实施。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 11:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表