案例一:实现对图片字符串的识别,以下是案例图,可以根据需要重新进行操作
方案一:首先导入图片源,然后用快速匹配工具先把有字符串的地方快速识别出来精准定位。第二个用字符训练工具,训练要识别的字符。完成这两步就可以实现对一张图片的完整识别字符。
方案二:其实上述步骤只需要导入图选源,再选一个字符识别就可以马上完成了,那么为什么要进行快速匹配呢?还有接下来的位置修正呢?
回答上述问题
假设我们用的是方案二,很好你识别一张图片当然没问题,但是图片多了,要识别的字符角度不一样,位置不一样,那你方案二的roi的区域是固定不变的。如何来应对这些多变的情况呢?所以我们就需要粗定位来实现,通过不同的定位工具来定位出我们想要识别的区域,这样无论这些角度怎么变或者位置怎么变都会被定位工具定位到,那么定位工具本身具有的识别模板可不管你怎么变只要你符合他的特征他就给你框出来。那么这就实现了我们要找的字符的精准定位的roi范围,那么我在选择字符训练的roi范围时有两种方法。第一个我自己想的就是通过继承快速匹配的roi范围。意思是就是我快速匹配不是会返回一个匹配框吗?这个框很精准的定位到了我想要的roi范围,那么我就顺其自然让字符识别的roi范围继承他的呗。如下所示:快速匹配直觉锁定了这个roi范围。直接继承好了
第二种方法是通过位置修正的方法来修正roi范围,这种方法我觉得过于标准。下面看一下整体的实现流程:
可以看见我们是添加了一个新的模块,也就是位置修正,并且字符识别也不是用继承roi的方式来达到roi随着角度和位置变化实现变化效果。而是通过自己绘制字符识别的roi区域,通过位置修正来达到我们绘制的roi范围会通过角度和位置的变化随着发生改变。
上面是具体思路,这里讲一下细节,为什么我们不能直接用快速匹配的方式直接连到字符识别,并且用快速匹配的信息来修正roi范围呢?其实我也想过,但是并不能实现,因为快速匹配的信息无法直接拿来当位置修正的信息来用,要通过添加一个位置修正信息模块接收快速匹配的信息,再通过快速匹配的信息传达给字符识别。这样字符识别才可以间接的用快速匹配的修正信息来达成位置修正的效果。虽然有点绕,但是很正规。
案例二:目的是为了通过边缘查找,检测一包纸巾的张数,如果不满足8张,则NG。即以下图片纸巾照片!以下是案例图,可以根据需要重新进行操作:
方案一:系统给出的方案很简单,通过边缘查找来实现,可以返回查找到的边缘个数并且显示线条,通过不断的调整边缘查找的运行参数拟合出最佳的效果。
再就是加一个条件检测并且把导入边缘查找的个数导入到条件检测,然后就可以设置条件,返回出的结果有ok和ng,只要达到我们设置的条件即ok反之相反返回ng。
再接着到一个分支字符接收条件检测的输出结果,因为条件检测的输出结果是字符,所以我们添加一个分支字符模块来实现ng的数据到那边ok的数据到那边,其实就是实现一个生产规范。最后把数据格式化输出。格式化数据可以对数据进行规范,可以在格式化规格里添加你想要的数据进行处理。
方案二:这是我在系统方案的基础上升级的一个方案,为什么呢?因为方案一有一个致命缺陷就是roi区域是固定的,如果没有按照固定的角度和位置,那么就有可能无法识别到,甚至纸巾都不在roi范围,所以我们需要一个粗定位来调整roi的范围,我这里用的轮廓匹配的工具来实现roi的位置修正的,因此尽管是纸巾正着还是斜着,位置变化,只要符合轮廓特征,就会被精准定位到,所以这个方案更兼容性更好。以下是流程图。
如果你想通过位置修正来实现对roi区域的变化,使得roi的角度发生倾斜 或者是位移,首先你要搞清楚
位置修正只是告诉你,你需要修正的roi发生什么样的偏转和位移,而这个偏转和位移是相当于快速匹配
来说的。
因此之前不是做了一个字符识别的吗?字符摆放位置不一样,你都是需要修改roi范围的。
你之前选择的是直接用特征模板识别这些字符,然后再通过这个这些字符的特征模板达成目的,
就是字符发生变化时候,特征模板识别到的字符也是会发生相应偏转,因此确实可以拿来当位置修正信息来使用,
但是用一些更为明显的容易观察出角度偏移的特征模板作为位置修正的信息显然是更好的,例如直条类型的长方形啊。
方式偏转很容易确认角度,因此用这些比较明显的东西作为修正信息,可以更准确的对我们的需要发生修正的roi范围进行修正
如何修正的呢?假设我创建了一个特征模板是长方形,那么就我的特征模板就会有一个中心点和角度。
选择长方形向左倾斜四十度,并且向上位移五厘米。那么我的位置修正信息就可以得到这个信息,所以对于使用这个位置修正信息的
roi就会跟着角度发生偏转四十度并且现上位移五cm,切记这是对于多个图片来进行位置修正的roi范围的,一张图片人为框定roi范围就可以了。