随着科技的进步,农牧业在一定程度上向着智能化、信息化、自动化方向发展。其中农业方面的发展尤其突出,相对而言畜牧业的智能化发展较为不平衡、不充分。目前对于牲畜饮水行为还停留在半自动化、半智能化阶段,传统的牲畜饮水多采用手动抽水方式,存在费时、费力、缺乏智能化管理等问题
[1] 。刘欢等
[2]开发了一款APP对水槽进行远程供电控制,需要人为操作,并不能实现自动控制。张嫔英等
[3]通过红外传感器感知移动的物体进行自动放水,对供水对象的针对性较弱。在牲畜个体识别方面,何钦等
[4]采用了深度学习方法识别牲畜个体身份,由于一些牲畜个体之间的差异较小,识别困难,所以此方法也具有一定的局限性。综上所述,目前的牲畜饮水系统还存在许多不足,急需一套系统能够解决以上问题。
本研究设计了牲畜智能饮水系统,利用计算机视觉技术对水槽周围环境进行目标检测并对牲畜进行供水,依据目标检测的结果,结合轻量级方法进行牲畜密度检测,利用RFID技术进行牲畜信息统计,利用传感器技术进行智能控制,最后利用全栈开发技术开发了客户端和服务端软件,并在阿里云服务器上部署云平台,进行人机交互。实现了无人情况下对牲畜饮水行为的智能化管理。
1 系统结构和功能
系统功能框图如
图1所示。系统包括目标检测、牲畜密度检测、牲畜信息统计、智能控制和云平台等部分。
目标检测以视频作为输入,对水槽周围环境中的牲畜和人等目标进行识别
[5]。牲畜密度检测在进行目标检测的基础上进一步结合轻量级方法识别目标牲畜的密集情况,进而判断是否增加水槽来避免拥挤情况的产生。牲畜信息统计除了读取电子标签
[6]信息,还需要根据这些信息推断牲畜是否饮水、饮水次数及总饮水时间
[7]等关键信息。智能控制
[8]部分包括水位、水温的检测及阀门的控制。当检测到牛或羊等目标时供水阀打开,对水槽供水,此时若液位检测模块检测到满水位
[9],则控制供水阀关闭,停止供水。同时水温检测模块实时检测水槽水温
[10],当水结冰前控制放水阀放水,解决冬季水槽除冰困难
[11]的问题。云平台包括服务端程序开发和客户端程序开发,其中服务端程序运行在服务器上,主要负责为客户端提供API接口
[12],客户端运行在本地,为客户提供良好的交互界面
[13],同时服务端和客户端协同完成边缘端和云端的数据传送和接收任务
[14]。
2 系统的实现
系统的总体结构如
图2所示,由目标检测、牲畜密度检测、牲畜信息统计、智能控制和云平台5部分组成
[15]。系统采用Jetson Nano
[16](以下简称Nano)嵌入式设备作为主控制器,它能够运行多种算法和AI框架,如TensorFlow、Keras、PyTorch、Caffe等,支持多个神经网络并行运行实现图像分类、人脸识别、语音处理、目标检测及物体识别追踪等。
系统利用摄像头采集水槽周围的环境信息,通过目标检测方法检测到牲畜(牛、羊)时,Nano触发继电器,从而导通供水阀回路进行供水,同时,水位开关实时检测水位,当水位到达水位开关水平线时Nano控制继电器,从而断开供水回路停止供水。水温传感器实时检测水温,当水温小于0.5 ℃时Nano导通继电器从而导通排水阀,进行排水。RFID
[17]读卡器检测牲畜佩戴的电子耳标信息,Nano及时将这些数据发送到云端进行存储和分析。服务端通过分析这些数据,判断牲畜是否饮水、饮水次数及总饮水时间等关键信息。系统在目标检测的基础上经过轻量级密度检测方法分析牲畜的拥挤情况,生成是否需要增加水槽的标志位。
系统的边缘端产生的相关数据通过云端与边缘端之间建立的TCP_Socket连接进行数据传送和接收,云端在接收到数据后首先存储到数据库中,再经过数据处理通过API接口与客户端APP进行通信。
用户在客户端查看历史数据、进行视频监控的同时还可以通过客户端界面绑定牲畜个体的生日、描述及图片等附加信息。
2.1 目标检测
YOLO-V5
[18]是一种单阶段目标检测算法,该算法在YOLO-V4的基础上添加了一些新的改进思路,使其速度与精度均得到了极大的提升,是常用的目标检测算法之一,因此本系统采用YOLO-V5算法和较流行的AI框架-PyTorch
[19]进行目标检测。
首先在本地计算机配置训练YOLO-V5模型的环境,将10 248张图片作为数据集,经过239轮训练得到识别牛、羊和人的模型,再用3 000张图片对模型进行测试。模型的mAP(mean Average Precision)随着训练轮次的变化如
图3所示。其中IoU(Intersection over Union)等于0.5时,模型的mAP随着训练轮次的变化如
图3-A所示。在0到129轮训练中 mAP_0.5明显上升,在130到163轮训练中mAP_0.5基本在0.75附近变化,在164到239轮训练中mAP_0.5有下降的趋势,最终模型的mAP_0.5在0.75附近。模型在不同IoU阈值(从0.5到0.95,步长0.05)下,模型的mAP随着训练轮次的变化如
图3-B所示。在0到139轮训练中模型的mAP_0.5:0.95明显上升,在140到239轮训练中随着训练轮次的增加,模型的mAP_0.5:0.95有下降的趋势,最终模型的mAP_0.5:0.95在0.5附近,能够满足应用的需求。
经过上述训练后,将模型移植到Jetson Nano嵌入式设备。实际应用中
图2中的摄像头通过Motion和Cpolar工具生成访问摄像头的视频监控地址,进行远程视频监控,同时该地址作为YOLO-V5模型的输入即可对摄像头采集的内容进行目标检测,其识别结果作为牲畜密度检测和智能控制部分的重要参考因素。
2.2 牲畜密度检测
牲畜在饮水时,其分布密度直接影响着牲畜是否正常饮水。牲畜在饮水时如果在一定时间内连续出现拥挤的状态,说明水槽的尺寸或个数已经不满足当前数量牲畜的饮水需求,需考虑增大水槽尺寸或增加水槽数量。因此利用计算机视觉检测牲畜的密度
[20-23]具有一定的意义。
图2中的牲畜密度检测部分可识别目标牲畜是否处于密集状态,进而做出调整。
本系统在目标检测的基础上根据BoundingBox分布,利用轻量级方法进行密度检测,具体是:
1) 讨论分布密度时,目标个数直接决定分布密度的大小,因此,首先对BoundingBox进行计数,设定计数阈值,即设定当目标个数多于多少时才考虑是否处于拥挤状态。
2) 假定BoundingBox的左上角点和右下角点的坐标分别为(x1,y1) i,i=1,2,…,N和(x2,y2) i,i=1,2,…,N,从而计算出BoundingBox的中心点坐标为(x0,y0) i =((x1+x2)/2,(y1+y2)/2) i,i=1,2,…,N。
3) 目标检测得到的N个BoundingBox中依次计算相邻两个BoundingBox的中心点的距离,即:
,i=2,3,…,N
该距离是评价目标的密集程度的重要参数。
4) 单个的di 受个别BoundingBox对于整体的判定密度的影响较大,不利于判定整体情况,因此本研究引入数学期望和方差的概念来降低个别情况对整体的影响。
当di 的数学期望与方差即E(di )和D(di )小于一定阈值且在当前画面中的BoundingBox的数量大于计数阈值时即可判定出现目标分布密集的情况。
5) 根据分布密度推测是否需要增加水槽。在一定数量的视频帧中如果多于80%的画面中都出现拥挤的情况可判定需要扩大水槽尺寸或数量,并将此信息发送到APP前端页面,避免牲畜长时间拥挤影响其饮水行为。
2.3 牲畜信息统计
如
图2中的牲畜信息统计部分利用RFID读卡器读取牲畜身上佩戴的电子标签信息,根据如
图4中的协议格式对有源标签发出的标签数据利用Python语言进行解析,得到卡号、欠压状态、信号强度等信息。信号强度可根据换算公式得到标签离读卡器的距离,再根据数据的最后一次传输时间与第一次传输时间间隔得到标签的在线时间。当一定的数据量中,识别距离小于1 m的数据量多于某一个设定阈值时可判定该牲畜具有饮水特征,记饮水1次,并根据识别距离小于1 m的数据当中找出第一组数据与最后一组数据,该两组数据中的在线时间差值即是该牲畜的1次饮水时间。再遍历当天的所有数据量,根据饮水特征获得当天的饮水次数,每次饮水时间之和即为当天的总饮水时长。如果当天的数据中不具备饮水特征,则判定该牲畜在当天没饮水,最终得到如
图5中的信息。
将
图5中得到的数据通过网络通信传输到云服务器进行存储。套接字(Socket)是不同进程间通讯方式的一种,它可以使不同计算机上的进程通过网络连接进行通信。本系统使用传输控制协议(TCP,Transmission Control Protocol)的 Socket通信方式上传数据到云服务器,利用Python语言进行数据采集和传输,程序分为客户端和服务端两部分。其中TCP客户端程序部署在边缘端,负责将采集到的牲畜电子标签数据打包处理,并上传到远程服务器;TCP服务端程序部署在阿里云服务器,负责接收部署在边缘端的TCP 客户端上传的数据,进行解析,同由time、datetime模块获得的时间日期数据一并存储到阿里云服务器的MySQL 数据库中。要想实现数据的正常传输,需要对服务端和客户端程序做自动重连处理,这样在出现异常情况下,服务端和客户端能够自动进行连接,重新上传数据。
2.4 智能控制
如
图2中的智能控制部分采用继电器,电磁阀等设备,当目标检测算法检测到牛或羊时Nano的I/O触发继电器,供水阀导通往水槽注水。水位到达液位开关水平线时液位开关闭合,Nano控制继电器,闭合供水阀停止供水。同时水温传感器实时检测水温,使系统在水结冰前控制出水阀导通,将水排出水槽。
液位开关工作原理图如
图6所示。液位开关实质就是一个普通开关,只不过这种开关的断开和导通是由水位控制的。液位开关外部露出2个导线,一端是A,一端是B,当浮子没有浮起时A,B两端是断开的,当水位逐渐升高使浮子浮起时A,B两端导通,即A,B两端等电位。将Nano的PB6引脚通过4.7 K电阻上拉到3.3 V时PB6默认检测到的是高电平,当水位使浮子浮起时A,B导通,因此PB6检测到低电平时Nano判定满水位,进而做相应控制。
2.5 云平台
2.5.1 服务端
阿里云服务器是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务,本系统采用阿里云服务器为部署云平台的载体,进行服务端的研发。
在阿里云服务器中建立MySQL数据库进行数据存储,利用存储过程和定时器实现每日自动建表,将牲畜电子标签数据存储到数据库当天的表中,避免大量数据冗余。
采用Java语言、SpringBoot[24]框架开发API接口,使用集成开发环境IDEA创建服务端项目并且用Maven管理项目。服务端项目主要负责获取和保存数据、后台服务开发及与客户端APP页面的交互。此外,服务端根据牲畜标签信息进行饮水情况[25]的分析。服务端程序开发完成后需将程序打包成JAR包、上传至云服务器并后台运行,此时客户端能够正常调用服务端的API接口。
2.5.2 客户端
Uniapp是使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web响应式、以及各种小程序,比如微信、支付宝、百度、头条、QQ、钉钉、淘宝等多个平台。由于Uniapp独特的优势,本系统的客户端采用Uniapp框架进行开发。
客户端通过编写Vue、CSS、JavaScript进行组件的设计、调用和布局,并且通过调用服务端的API接口,将数据显示到APP页面上。包括电子标签信息、牲畜附加信息、硬件状态信息、报表信息及视频监控信息,必要时可将APP通过HBuilderX在线打包工具打包并下载到手机进行安装和使用。
2.6 系统软件流程
系统的流程图如
图7所示。系统开始工作后利用USB摄像头进行视频采集的同时读取RFID标签信息。将视频流作为目标检测的输入,当检测到牛或羊时Nano控制供水阀供水,水位开关检测水位状态,当满水位时供水阀停止供水,同时温度传感器检测水温,当水温小于0.5 ℃时控制放水阀进行放水。
当摄像头识别到牲畜的情况下检测牲畜拥挤情况,根据拥挤情况判断是否需要增加水槽,并将标志信息显示到页面。
将视频流映射到固定地址后实时监控视频画面。
RFID读卡器识别的标签信息同附加数据最终显示在APP页面。
3 系统测试
以内蒙古地区家庭养殖环境为试验环境,以个人家庭牛群为试验对象,首先指定5头牛各佩戴1套RFID电子耳标,再将摄像头指向牲畜饮水槽周围环境,在2023年1月1日到2月9日期间对系统进行了为期40 d的测试,如
图8所示。
系统测试包括对水槽周围环境的视频监控、目标检测、牲畜密度检测、牲畜信息统计及水槽的自动供水及停止供水。
系统在视频监控的基础上对视频流中的内容进行目标检测,当识别到牛或羊后主控通过导通继电器回路使水泵工作,从而实现牲畜的自动供水。当水槽的液位使液位开关浮起时主控再断开继电器实现停止供水。
在查看牲畜统计信息时,打开客户端软件,选择查询日期,可查看该日检测到的牲畜个体的电子标签号,如
图9-A、9-B所示。点击卡号可查看对应卡号的详细信息,如
图9-C所示。结果表明,在2月8日佩戴5个电子耳标的牛均被RFID读卡器检测到,其中2 166 430号牛在线时长3.2 min,饮水1次,饮水时长1.3 min。用户根据描述、生日及图片能够精确定位该卡号对应的牲畜个体,并且可以通过柱状图了解牲畜个体在一周内的饮水情况,其中柱状图的1代表饮水,0代表没饮水。该头牛一周内饮水5次,并且在2月3日和6日没有饮水。由于该牲畜个体在过去一周内不存在连续几天没有饮水的情况,因此可知该头牛的饮水规律正常。
系统的牲畜密度检测情况如
图10所示,通过目标检测及轻量级密度检测方法,系统能分析出当前画面中目标的拥挤情况,
图10-A表示非拥挤情况,
图10-B表示拥挤情况。
如
图11所示,由于系统在10 min内拥挤情况的占比少于80%,因此系统推测出当前不需要增加水槽。此外,系统将牲畜的总体饮水情况,包括卡号、在线时间、是否饮水、饮水次数及总饮水时间等信息以表格的形式展现。此外,系统以柱状图的形式提供牲畜在一周内的饮水牛只数情况,由图中得知,在查询的2月8日当天以及7日、5日、4日、2日内5头牛均饮水,剩下的2月3日和6日内有4头牛饮水。被测的5头牛作为一个被测群体,该群体在一周内没有出现集体没饮水或者多数没饮水的情况,符合正常饮水规律。
经过每周排查,在进行测试的40 d时间内,无论是被测个体还是群体,都符合正常的饮水规律,因此该5头牛在被测的40 d内从饮水情况来看是处于健康状态的。
4 结论
本文设计了一款基于计算机视觉的牲畜智能饮水系统,具有视频监控、目标检测、牲畜密度检测、牲畜信息统计、水槽的智能控制等功能,并且具有良好的图形化界面。经过现场测试,系统在进行视频监控的同时,可实现自动放水、停水,将牲畜标签信息、附加信息、饮水情况历史信息集中显示在APP页面。系统的运行情况稳定,该系统减少了养殖户的人力成本,为牧民提供了判断牲畜健康状态的重要依据。