莫嘉嗣:活体鳗鱼机器视觉测重技术研究与装备

莫嘉嗣博士“活体鳗鱼机器视觉测重技术研究与装备”直播回放

中国鳗鱼看广东,广东鳗鱼看台山。中国鳗鱼养殖总产量居世界第一,约占世界总产量的70%,鳗鱼主要出口地为日本和韩国,国内消费量很少,是世界最大的鳗鱼养殖生产国和鳗产品原料供应国,已经形成了集鳗苗培育、成鳗养殖、饲料生产、烤鳗及鳗鱼副产品加工、出口一条龙的外向型产业。在良好经济效益的加持下,如何利用新一代技术为鳗鱼养殖来提质增效呢?

本次是“AI·农业智汇云讲堂”的第三十五期,主题是“活体鳗鱼机器视觉测重技术研究与装备”。为此,本期我们非常高兴的请到了华南农业大学工程学院莫嘉嗣博士。‍

鳗鱼产业简介

“世界鳗鱼看中国,中国鳗鱼看广东,广东鳗鱼看台山。”我们熟知的鳗鱼通常就是在日料店看到的烤鳗鱼(右图),而鳗鱼的活体,则如左图所示。

鳗鱼味道鲜美,营养价值丰富,有优质的蛋白和脂肪,华南农业大学教授团队研究发现,鳗鱼的脂肪有助于人体健康,和一般脂肪不一样。

鳗鱼通常通过捕捞,而后养殖至合适大小,以活鱼或者烤鳗副产品的形势出口。在这之间还需要一个鳗鱼分拣的环节,因为活鱼出口是按重量进行交易的。

研究意义与市场转化过程

从视频中能看到,鳗鱼的分级,目前还是靠纯手工掂量,不靠秤,而靠目测和经验,就会出现一些问题,首先需要经验丰富的工人才能实施;二是精度得不到保证。

针对这个环节,我们希望能够通过机械化、自动化的方式代替人工,研发半自动的活体鳗鱼称重分级分选装备,因为上料还需人工辅助,需后续研发解决。鳗鱼的分类主要分为3-5级,每一级重量的偏差在50-80g,所以目前用人工分拣还能满足分级需求。

但当出口的要求越来越高的时候,这时候的分级就不能满足,要满足这个要求,研究之前需调研市场现有的装备。

SPRING

市场上现有的装备针对的都是非活鱼,比如冰鲜或切块分选;此外也都是机械称重,如右边的设备这样会导致另一个问题,活体鳗鱼以为自己在逆流而上,就会往回跑,导致称重具有局限性。

左边的设备,由一个个的框组成,除了分拣鳗鱼外,还可以分拣瓜果,将要分拣的东西放入框中,用链条带动框做环形运动,带着框一起称重,称重之后再落入相应的空位,解决了夹鱼的损耗,但是框还是比较小,用于鳗鱼仍不可行。

因为现有装备都有局限性,所以考虑能否采用非接触式测算鳗鱼体重。然后在装备开发上,要考虑如何固定鳗鱼,不让其活性影响装备运行。

思路的产生

从鳗鱼近似均匀、长条(尾部扁平)的形态分析,可以想到一个密度均匀的物体,其重量和投影是否有相关性?;因此联想到投影面积与重量的关系,因为鳗鱼是黑白的,所以只需要一个黑白相机即可处理。

预实验

直接拍摄

背光拍摄

通过两种不同拍摄方式,得出直接拍照因为鳗鱼粘液的缘故,会对结果有影响,增加图像处理算法的效率,所以改为背光拍摄。

思路验证

我们总共选取了不同重量的9条鳗鱼,取了20张图片的平均投影面积,然后拟合了投影面积和重量的函数,线性度比较好。

但是我们却忽略了单条鱼的投影不确定性,鱼的姿态等会增加误差,使得单条鱼的误差太大。

误差分析

同一条鱼像素面积偏差大,可达39.58g,原因在于鳗鱼尾部稍偏扁,所以引入鳗鱼体长作为另一分析特征,分析体长与重量的关系。

用体长来测量重量,发现还是原来的问题,平均体长确实可以反映总体趋势,但是单条鱼还是误差大,而且误差比用面积的更大,这个好理解,就好比身高一样的人也有肥瘦,所以单一特征确实不能很好的反映鳗鱼的重量,所以我们想到了把特征进行融合。

特征融合

鳗鱼前半段,相对均匀的圆柱体,可以用面积;后半段,由于会有尾巴姿态的影响,但是影响的是面积,不是长度,因此后半段用长度表征,关键是,怎么确定比例呢?为此我们开展了特征融合比例的实验。

识别头尾——深度学习

使用机器学习,通过上千幅图片,训练识别头尾的模型,识别率达95%。

建立数学模型并验证

根据该模型,大部分的鳗鱼测重误差在10g以内,最大误差已经不超过30g,基本能满足鳗鱼分选的需求。接下来要考虑的是技术落地的问题。

活体鳗鱼分选机

上面是设计图,下面是目前的加工进度,一直在完善方案并加工,原理是通过一个桶来约束活鱼的运动,然后到称重位称到重量了,就运动到相应的位置打开分选门掉下去,称重部分可以采用传统的电子称,也可以采用视觉的方法,就是替换掉这个蓝色的部分即可,视觉测重部分的硬件也已经调试完了,采用一个嵌入式arm板连接工业相机,然后当鱼经过下面的背光板的时候,通过软硬件触发的方式拍照,然后算法分析后得出鱼的分级。

行业展望

当然,我们目前只是简单的实现了功能,后续还有很多需要改进的地方,尤其是测重模型算法的改进,可以看到鳗鱼头部有腮部和鱼鳍,腮部呼吸状态和鱼鳍会影响面积特征,需要进行建模识别,而鳗鱼的体型也有高矮胖瘦,因此分割比例不是一个静态值,应该是一个动态值,可以考虑通过算法识别出合适的动态比例进行分割。

莫嘉嗣博士“活体鳗鱼机器视觉测重技术研究与装备”直播

——观众提问集中回答

莫老师,头尾识别对测量影响较大,如何提高头尾识别的准确率?

这也是比较大的问题,大部分情况下,活鳗鱼的尾部是竖直状态,但有时也会有平坦状态,就会影响准确率。对此,使用多种方法,有用过头尾的曲面半径大小识别,也用过投影面积大小识别。总归有些特殊的状态不好识别,所以后面才会用到深度学习的方法,但由于样本数还是偏少,需要更多样本量,不同重量鳗鱼的范围,来提高识别率。

老师,我也有个问题:视觉方法测重跟传统测重方法比优势在哪里呢?

主要体现在两点:一是非接触,运作过程就不会产生运动的影响,因为现有的电子秤,如果用的不是活鱼就不会有太大的抖动,最多只有传送带的抖动,但活鱼本身会活蹦乱跳,会产生影响。而拍照则是静态照片,消除了影响。二是成本问题,现有的电子秤,如果选用精度高、耐用性好的还是比较昂贵,目前使用的都是几千块一个,而换成机器视觉的话,摄像头只需要几百一两千即可满足需求。成本可以降低下来,有利于技术的推广使用。

深度学习用的是哪个算法?yolo?哪个框架,用哪种语言框架运行的模型?

目前使用的开源图像处理库,进行初步特征提取,用的也是开源的框架,yolo也是常用的框架。其实不管用哪个框架,我们的重点还是在后面模型的建立,如何将特征与重量建立数学模型的关系。

下位机用的是哪种单片机?上下位机是如何交流的?需要多线程吗?触发传感器用的哪种?

提问者很专业,应该是做过这方面的工作。首先控制器不用单片机,因为单片机处理图像的速度是不够的,除非用STM32H7这些高性能的单片机,但还是在交互上不太方便。目前我们用基于ARM的嵌入式开发板或者树莓派等可以跑Linux系统的控制器,就可以把算法方便集成上去,图像算法处理完之后,要跟我们的分拣机的主控进行通信。目前用的是485总线交互,因为图像算法在开发板运算,通信只是给出决策,传输量不大,只需要判断重量的大小,进行门的可控制。所以485总线速率是够的,也不需要多线程。因为图像处理和下位机控制是两个不同的主控,下位机用的是stm32F103单片机,图像用的是arm的开发板。触发这一块目前用的是两种触发方式,一种是光电开关触发,就是桶经过测重位的时候,相机是带触发功能的相机,另外也可以在图像处理的软件里采用图像触发+硬件触发,双触发保证拍照出来刚好是那个鱼。实验显示单个触发都不是很好,所以目前有两种触发方法。

触发这一块目前用的是两种触发方式,一种是光电开关触发,就是桶经过测重位的时候,相机是带触发功能的相机,另外也可以在图像处理的软件里采用图像触发+硬件触发,双触发保证拍照出来刚好是那个鱼。实验显示单个触发都不是很好,所以目前有两种触发方法。

最佳的分割比例是如何寻找到的?是通过算法寻找的还是人工择优选取的?

分割比例先是通过实验,然后通过算法逼近,比如刚刚看到的,将鱼切成一段一段的,将其不同比例下的重量,其实没有0.745这个比例的,只有0.7、0.8这样的。我们将重量和图像处理的结果,得到两个曲线,通过逼近的算法,然后找到0.7不是最好的,0.8也不是,找到0.745是这一批样本中比较好的比例。后面用的就是这个静态的比例,我们先通过实验,再通过算法找到这个比例之后,然后再去验证,这个比例可能这一批鱼合适,别的鱼可能不合适。所以后面我们希望有一个算法,通过判断鳗鱼的图像特征,自动的找到这个点进行分割,目前正在向这边前进。

鳗鱼如果向垂直于摄像头的方向弯曲的话,会不会也会引起较大的误差?

这个肯定会,但是这个也比较难。因为如果没有边缘给它支撑的话,它很难这样翘起来竖起来的。所以我们桶的设计就不让它有直角,避免鳗鱼往上窜。

莫老师你好,背光拍摄图片进行边缘检测,会因为鳗鱼的活动频繁造成大误差吗

活动肯定是频繁的,但是拍摄时,调好了曝光时间、快门等参数,虽然鳗鱼在动,但是拍的那一下获取的是静态的。其实还可以拍多张,取平均数,因为传送带的速度肯定没有摄像机快,也可以用这种方法。目前所做的实验,鳗鱼的活性也不是很强,另外真正在产业上做的话,工人们分拣时,鱼也不会动的非常厉害,我们有一些措施,当然不会用药。用冰水冷冰一下,可以降低鳗鱼的运动,也不会有太大的影响。

传送带运动基本原理可以说一下吗

这个就是机械上的传送方式,要么就是皮带轮传送,要么就是链条呀,或者环形的导轨,这些都无所谓,根据成本来设计,如果预计成本高,可以用精密的环形导轨,如果成本较低的话,就可以用链条等。

如何进一步提高测重的准确率?

这个最终落在数学模型的建立上,现在我们是对实验数据进行拟合,得到初步的经验模型,但实际上我们应该要对鳗鱼体表的变化趋势、曲线这些建立一个模型来描述。曲线不一样的时候,会影响重量的预测,所以鳗鱼体表进一步建模可以提高准确率。还有头尾识别、鱼鳍分割、腮部识别这些也是后续提高精确度的方向。做研究就是一步步,从无到有,再到好的过程,后面就往这一方向做。

提取的鳗鱼长度算法可以具体说一下吗?

长度用的是骨架提取,一般做过图像处理的人员都知道可以通过外部的轮廓取中点连线的方法。当然骨架提取也有很多的方式,如果感兴趣的话可以看一下图像处理的内容,里面都有讲到。这是常规的做法,虽然算法是常规的,但是我们是为了提取鳗鱼的特征,将特征和重量进行关联,中间的关联就是我们的核心问题。前面怎么处理就是不同的手段。

鳗鱼的估重模型需要采集多少样本?

这个和识别头尾不一样,如果是识别头尾,那么深度学习所需样本的量就比较大,如果只是把重量估算出来,需要几百条就差不多了,另外就是建立模型。深度学习那个是为了识别到局部,所以可能这个小伙伴把这两块混了。这方面的样本就不需要那么多。

如果有问题想继续与莫嘉嗣博士交流,欢迎在评论区下方留言或者发送邮件交流。

(0)

相关推荐