OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5309|回复: 19

图片识别方法求助

[复制链接]

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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


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

111_看图王.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-12-13 02:40:06 | 显示全部楼层
回复

使用道具 举报

16

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
818
金钱
818
注册时间
2014-10-22
在线时间
589 小时
发表于 2018-12-13 08:09:19 | 显示全部楼层
1:你说的精度偏离了范围,究竟到了多少?
2:对于摄像头处理的信号误差大于1%,你怎么知道不是表盘本身转速引起的误差呢?
回复

使用道具 举报

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1244
金钱
1244
注册时间
2017-3-18
在线时间
312 小时
 楼主| 发表于 2018-12-13 08:30:06 | 显示全部楼层
dfbb123 发表于 2018-12-13 08:09
1:你说的精度偏离了范围,究竟到了多少?
2:对于摄像头处理的信号误差大于1%,你怎么知道不是表盘本身转 ...

谢谢坛友提出严谨的疑问
1.精度最高偏离到了2%这样的范围
2.表盘本身确实有误差,但是使用光电头检测铁片时,发出的脉冲信号是稳定的,所以原因归根到了处理方式上面。
回复

使用道具 举报

16

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
818
金钱
818
注册时间
2014-10-22
在线时间
589 小时
发表于 2018-12-13 08:51:52 | 显示全部楼层
表盘转速多少?就是刻度5到6的时间间隔?如果太短的话这个误差就有理由了。
回复

使用道具 举报

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1244
金钱
1244
注册时间
2017-3-18
在线时间
312 小时
 楼主| 发表于 2018-12-13 09:48:08 | 显示全部楼层
dfbb123 发表于 2018-12-13 08:51
表盘转速多少?就是刻度5到6的时间间隔?如果太短的话这个误差就有理由了。

表盘转数快的情况下还好的,转一整圈10个数字5秒钟的情况下数据很好,因为是算整个过程的,中间有点误差按照平均算起来就不算什么了。
头疼是转动慢的情况下,100s钟转一个数字(不是一圈),满打满算给5分钟时间也就转动3个数字,如果提前297s或者超时303s检测完成,就在误差范围外了。
这点时间,就是判定区域方法不合适引起的。
回复

使用道具 举报

16

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
818
金钱
818
注册时间
2014-10-22
在线时间
589 小时
发表于 2018-12-13 14:17:46 | 显示全部楼层
这转速,估计连蚂蚁都比它快、
我分析你可能需要更高分辨率的摄像头,或者离物体近些,让摄像头能捕捉到微小的移动,这个微小的距离就是每相邻2个像素反应在实物上的距离,这是可调的,我怀疑你的太大了。
回复

使用道具 举报

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1244
金钱
1244
注册时间
2017-3-18
在线时间
312 小时
 楼主| 发表于 2018-12-13 14:40:49 | 显示全部楼层
dfbb123 发表于 2018-12-13 14:17
这转速,估计连蚂蚁都比它快、
我分析你可能需要更高分辨率的摄像头,或者离物体近些,让摄像头能捕捉到微 ...

已经很近了,都快贴紧了。再靠近点也是治标不治本的。靠的太近不好操作,产线员工也不一定会的。
回复

使用道具 举报

16

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
818
金钱
818
注册时间
2014-10-22
在线时间
589 小时
发表于 2018-12-13 15:06:38 | 显示全部楼层
可以考虑加放大镜啊,我觉得你这种情况肯定是分辨率越高越好,刻度线占屏幕的比重越大越好。
回复

使用道具 举报

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1244
金钱
1244
注册时间
2017-3-18
在线时间
312 小时
 楼主| 发表于 2018-12-13 15:25:51 | 显示全部楼层
dfbb123 发表于 2018-12-13 15:06
可以考虑加放大镜啊,我觉得你这种情况肯定是分辨率越高越好,刻度线占屏幕的比重越大越好。

理论上是可行的,实际肯定也会改善。
但是实际安装是个麻烦啊,每个摄像头前面都得加一个放大镜,感觉有点难度啊。
另外我想寻求的方法是不检测这个刻度线,有没有其他更好的思路呢?
之前一开始检测的是数字之间的间隙,可惜其中有一个是反光贴片,就识别不出是覆盖在数字上了,而且RGB很不稳定,所以只能检测刻度。
回复

使用道具 举报

16

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
818
金钱
818
注册时间
2014-10-22
在线时间
589 小时
发表于 2018-12-13 16:12:21 | 显示全部楼层
编码器
回复

使用道具 举报

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1244
金钱
1244
注册时间
2017-3-18
在线时间
312 小时
 楼主| 发表于 2018-12-13 16:28:07 | 显示全部楼层

同类型的产品能用编码器的早上编码器了,这个没法安装,只能通过人工起始拍照对比数字粗略计算。所以现在要做摄像头的替代人工拍照。
回复

使用道具 举报

12

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2018-7-11
在线时间
31 小时
发表于 2018-12-13 22:46:55 | 显示全部楼层
本帖最后由 huayuguo 于 2018-12-13 22:51 编辑

楼主这个是是固定摄像头,固定区域 检查?  不知道我理解的对不对!
  方案 1            摄像头是否支持YUV格式 如果支持      只取Y 降低计算量。注意环境亮度阈值去抖
  方案 2            计算好 行信号时间  让 DMA 只取相关行数据 然后计算。   然后综合下1 2
另外:楼主知道为啥千分尺会做到千分吗 也就是游标卡尺  琢磨下
回复

使用道具 举报

12

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2018-7-11
在线时间
31 小时
发表于 2018-12-13 22:53:40 | 显示全部楼层
将摄像头 远点降低计算量 标线越细计算量越低。 1/30/行数      时间也要算
回复

使用道具 举报

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1244
金钱
1244
注册时间
2017-3-18
在线时间
312 小时
 楼主| 发表于 2018-12-14 08:19:03 | 显示全部楼层
huayuguo 发表于 2018-12-13 22:46
楼主这个是是固定摄像头,固定区域 检查?  不知道我理解的对不对!
  方案 1            摄像头是否支持Y ...

你好,非常感谢你的回答。
1.摄像头是OV2640,抄的原子输出格式为RGB565,官方好像是支持YUV422输出的。因为都用上了摄像头,屏幕上要求显示当前的画面信息。那个去抖的话,我在摄像头边上加了强光照射,光线亮度大于环境亮度,环境光线不起影响。
2.和1一样,那就没有的显示了。我也是极力的缩小图片尺寸,2.8寸的屏幕都没给填满。而且发现小到一定程度的话,整个输出就不正常了,所以也不能过度缩小。
千分尺的比喻我会好好考虑一下的,暂时没有太多的了解,谢谢你。
然后看到你在下面给的补充解答,标线越细,有好也有坏的。简单的话,100个像素点的话,允许有一两个误差,但是只要10个像素点的话,出现一个误差也可能直接影响计算的。

再次感谢耐心给出的方案和思路
回复

使用道具 举报

12

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2018-7-11
在线时间
31 小时
发表于 2018-12-14 10:00:42 | 显示全部楼层
本帖最后由 huayuguo 于 2018-12-14 10:02 编辑

屏幕显示对这个系统来说就是鸡肋,还拖总线资源,客户要求那就没办法。不过F4 没看手册,

F6,F7 要我的做法就是  DMA  连接  摄像头和显示 把CPU空闲出来,找准时序,特定时间去内存读取 红框内的行数据,数据处理 去掉无关列 得到红框数据 ,数据拿到了 什么 色域转换 二值化  算法看着来,最简单的就是进行数组计算得到白线数据( 亮度Y白线比黑区域要高的多多的多),去抖,得到白线的列号 Yx+n 就是你要的 精度 至于脉冲 触发时机 看你的细节处理和系统要求。

摄像头数据输出也是按照行(一次N行)来输出,你这个摄像头是不是需要看手册。按整帧输出的似乎很少
回复

使用道具 举报

12

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2018-7-11
在线时间
31 小时
发表于 2018-12-14 10:01:27 | 显示全部楼层
F7 H7 说错了 更正下
回复

使用道具 举报

12

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2018-7-11
在线时间
31 小时
发表于 2018-12-14 10:05:34 | 显示全部楼层
游标卡尺  尺就是红框,游就是你这刻度白线  不够这个是精度问题(刻度到底走了多少)    和你需要的脉冲无毛关系
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-3-2
在线时间
3 小时
发表于 2019-3-2 16:04:52 | 显示全部楼层
群主,解决了吗?你是如何识别上面的颜色的呢?
回复

使用道具 举报

16

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1244
金钱
1244
注册时间
2017-3-18
在线时间
312 小时
 楼主| 发表于 2019-3-4 08:20:38 | 显示全部楼层
食验室学徒 发表于 2019-3-2 16:04
群主,解决了吗?你是如何识别上面的颜色的呢?

这个方便,直接改动原子的ILI93XX文件下的LCD_ReadPoint函数,直接就得到屏幕点的RGB了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 22:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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