被测一维码
上面的被测一维码是料带上的标签。里面有多个不同类型的一维条形码,有些质量要好一点,有些质量则比较差。
本NI视觉和Halcon一维码读取性能对比评测共使用了8幅一维码图像。通过对比发现Halcon的性能要远强于NI VISION。首先是Halcon对于提供的图片,基本上都可以正常的解码,遇到一些比较差的条码,调整一些参数也是可以解码的,各种类型的条码解码也相对准确。而NI视觉则很多图片无法解码,就算能解码,条码类型也是错误的,解码出来的数据都是不正确的,性能差了一截。另一个就是解码耗时,Halcon基本上是几十毫秒级的。而NI视觉能解码则是几百毫秒级别的。二者在耗时上可能存在几倍的性能差异。下面来先来看一下NI视觉和Halcon在耗时上的差异:
NI视觉读一维码耗时
因为VBAI中的读一维码函数并没有返回耗时,所以这里使用了VBAI中的处理时间来评估。切换到运行界面可以看到处理时间是334ms,整个连续运行时速度也不是太快,一秒钟也就三幅图像的样子,所以这个处理时间是可信的。当然,这里的处理时间其实还包含了读图、后期的覆盖等过程。真实的时间读码耗时应该是会小一些的,但是也不会短太多。再来看一下Halcon的耗时:
Halcon处理耗时是72ms
从上面的效果来看,先不管解码的数量以及是否正确,且看耗时,NI视觉是334ms,Halcon则是72ms,NI视觉的耗时比Halcon长了四五倍。可见速度上差了不少。下面再来看一下解码性能,主要是看解码数量以及是否正确解码。
01解码9个
这里将条码类型设置为code 93和code 128两种类型。如果设置成自动,那么可能会有很多错误的条码类型:
自动
可以看到上面的自动,有些位置的条码框选是不对的,只有条码的局部,有些条码则没有正常识别。更无语的是最左边的那个框选在一个字符串上,也当成了一个条码。而从自动判断出来的条码类型来看还有codebar,实际上并不存在这种类型的条码。所以NI视觉在全图中识别条码时,最好还是指定具体的类型为佳,自动的性能真的不是太好。后面的几个测试图,全使用指定Code 93和Code 128,不使用自动。
01解码的结果都是正确的(最小条宽1,最小边缘强度40,最小条数5)
02解码12个
03解码10个
上面的三幅图像是一个产品的三种不同亮度下的对比,共有13个有效条码,但是最多只识别了12个,少的则只有10个,差别比较大。
04解码3个
05解码10个
使用同样的参数,04中只解码了3个。而调整最小边缘强度为30:
04解码11个
05解码11个
04、05和01~03还是同一产品,只是位置不同,不同亮度对比,仍然只解码了部分条码。而且可以看到,最小边缘强度对于解码有很大的影响。
06解码3个全错
06开始是另一个产品,共有7个有效一维条码,条码类型是code 39和code 128。这里将条码类型code93改成code39。06在NI视觉中只有4个结果,结果都是错误的。
07解码1个错误
08解码2个全错
第二个产品的中,NI视觉解码的数据全是错的。还有将字符、二维码等当成一维条码来解码的情况。
下面再来看一下Halcon的解码效果:
01解码13个
02解码13个
03解码11个,一个错误
03中图像太亮,有三个条码被当成一个条码了,识别错误。
04解码11个
05解码12个
04和05中,则少解码了一两个。看样子是倾斜时分辨率不太够引起的。
04设置较小的ROI仍然无法解码两个分辨率不够的条码
06解码7个-一个错误
07解码8个-2个错误
07中也出现了一个将字符识别成了条码的问题,判断的条码类型是UPC-E。这种问题应该是可以避免的,因为HALCON中的读取条码类型是auto,可以指定只读取code 39和code128(需要修改程序,这里没有再做验证)。
08解码10个-3个错误
总体来看,Halcon的要比NI视觉的读码性能强不少,虽然些因为图像质量实在太差,在Halcon中也确实读不出来。
NI视觉和Halcon一维码读取性能对比评测视频号解说