包晓敏 杨迪焕
摘要:为实现农业害虫测报系统移动端测报工作,更便捷地获取农田害虫情况,基于Android移动平台害虫测报APP,将树莓派终端作为数据采集端,以云平台作为数据存储和信息交互桥梁,完成害虫图像与环境值数据采集,并将计数结果和害虫图像一并展示在移动端上,供用户查看。实验表明,该移动端可实时控制树莓派数据采集并展示结果。基于Android移动平台的害虫测报APP投入到实际测报工作中后,运行稳定,数据精准,可实现各项功能。
关键词:移动端;手机APP;远程控制;害虫测报
DOI: 10. 11907/rjdk.191996
开放科学(资源服务)标识码(OSID):
中图分类号:TP319
文献标识码:A
文章编号:1672-7800(2020)004-0139-04
Mobile Terminal Design of Pest Forecasting System
BAO Xiao-min . YANG Di-huan
(College of Infornzation , Zh.ejiang Sci- Tech Univer.sity , Hangzhou 3100 18.China )Abstract: In order to realise monitoring and f'orecasting of agricultural pests in the mobile terminal of the system so as to obtain f'arm-land pests more conveniently, tliis article is based on the Android mobile platform ' s pest monitoring and reporting App, using a Rasp-berry Pi terminal as a data acquisition terminal. and takes a cloud platform as a bridge for data storage and information interaction,,-hich are displayed on the mobile terminal f'or users to view. The results show that the mobile terminal can control raspberry pie to col-lect data and display results in real time. The App for pest prediction based on Android mobile platform runs steadih and accuratelv af-ter it is put into the actual forecasting work . and can run various f'unctions.Key Words : terminal; phone APP; remote control; monitoring and forecasting of agriculture pests
O 引言
我國耕地面积广大且农业人口众多,虫害对我国粮食生产构成直接威胁,影响粮食产量…。防止虫害是保证粮食产量的前提[2-2]。传统测报方式采用人工下田、人计数的方式[4],人力成本高且不够及时、便捷。因此,及时获悉田间害虫种类及数量不仅是制定防治害虫方案的基础,更可为后期预测预报害虫爆发期提供原始数据。目前,我国农业智能化发展迅速,已有较为突出的研究成果,如使用传感器采集各项影响农业生产的重要因素数据[5-8]等应用。近年来,智能手机等智能可移动终端的普及应用使多个行业步入远程遥控的发展阶段[9]。基于Android平台的手机APP在生活中的应用越来越广泛,但在农业中的应用还不多见[10]
为改进现有虫害测报方法,针对其虫害报警不及时的问题,设计一套可实时获取害虫图像和害虫数量的移动端系统。该设计针对环境值、地理位置、害虫图像与害虫数量进行监测控制,主要实现3个功能:①开发可用于An-droid智能移动设备的害虫测报APP,包括数据库、服务器及人机交互界面设计与开发等过程,实现界面简洁友好、操作简单的害虫测报系统;②选择监控区域的设备,远程操控树莓派的拍摄任务,获取最新害虫图像、害虫数量、环境数据及地理位置等信息;③根据年份和月份查询历史害虫图像及对应的历史数据。
1 系统架构与功能设计
1.1 系统架构
测报系统组成由数据采集端、测报云平台和Android移动客户端组成,如图l所示。数据采集端主要包括:环境数据采集、害虫图片采集、上传数据和图片;测报云平台包括:云数据库存储环境数据、云对象存储服务器存储害虫图片、云服务器图像处理;手机客户端APP为本文重点,包括:APP客户端、服务器端。系统架构如图1所示。
1.1.1 APP客户端
首先,在Windows系统下搭建JDKl.7开发环境并配置环境变量。使用And-oid SDK集成开发T具Eclipse进行源代码编写、编译等T作。代码实现主要考虑远程联网获取数据的操作及数据显示效果。为了更好地将数据显示在移动端,进行界面优化设计。同时为提高软件运行速度、改善用户体验,采用碎片技术进行代码编写[11-12]。从功能角度考虑主要是提供命名发送、最新图像与数据获取展示、历史图片与数据获取展示。本文使用的真机为Meizu4,系统版本Android6.0。
1.1.2服务器端
Tomcat服务器具有技术先进、性能稳定且扩展性好的优点[13-14],因此本文使用Servlet搭配Tomcat的方式构建服务器端。同时,HTTP作为应用最广的网络协议,是响应客户端请求、实现服务器端与客户端通信的基础[17]。
1.2功能设计
害虫测报APP主要监测的环境参数包括:温度、湿度、光照强度、下雨情况及害虫图像。首先,使用涂有昆虫性诱剂的害虫粘板捕获害虫,工作人员通过“拍摄”按钮,可实时获取田间害虫照片及环境数据。执行终端树莓派,将拍摄的照片及环境值上传并保存至云服务器,通过“最新图像”按钮显示最新图像,并显示当前设备、地理位置、图像名字、温湿度、光照强度、害虫数量等信息。其中图像名字采用拍摄时间命名,精确到秒。APP可直接区分当前图片拍摄时间,如“2019-06-20-10-30-Ol.jpg”,云服务器在接收图片后,根据设备编号将图片名字单独存入对应编号的数据库表中。为避免在同一个界面显示过多历史数据,设计按月为单位展示历史数据,即T作人员通过年份和月份查看害虫图像及相关数据信息,这样可有效提升用户体验。
2 移动端实现
2.1登陆界面实现
登陆界面主要实现工作人员登陆系统时的校验功能,工作人员在输入正确的用户名和密码后将跳转至APP主界面。登陆界面如图2所示。
安卓开发中,界面展示效果主要通过编写AndroidXML文件实现。登陆界面采用四大布局中的线性布局。主要使用TextView控件提供用户输入项,使用CheckBox控件勾选“记住用户名和密码”,使用Button控件提交用户名和密码。
Java文件实现过程为:给Button按钮设置点击事件,用户点击“登陆”后,开启一个线程访问远程服务器。在该线程中,APP使用HTTP协议以POST的方式将从界面中获取到的用户名和密码发送给服务器端[19-21],并且没置请求超时时间为5s,在5s内接收到服务器响应,即说明移动端请求成功,此时服务器返回200状态码给客户端,则客户端接收服务器返回的数据流,实现页面跳转并给出“登陆成功”的提示。本次请求中的URL为:http://lll .231. 105 .41/CH ai/And roidLoginServlet。另外,如果用户在点击“登陆”按钮前勾选“记住用户名和密码”且后台校验成功,则在/data/data/cn.yangdh.chai T程包下创建一个Userlnfo.txt文本记录文件,并把当前输入的用户名和密码保存进该文件,等到下次再次使用APP时,就无需再输入用户名和密码。
2.2主界面实现
主界面主要包括以下功能:首先,可以根据地理位置的不同,选择地区目标设备。地理位置与设备的选择均采用下拉菜单的形式呈现。由于目前该测报系统仅部署在浙江省杭州市和宁波市两个地区,所以在目标设备的选择中,城市对应的下拉菜单中只有杭州市和宁波市两个选项。在选定城市后,随后选择城市对应的区,再选择待查看的设备编号。采用三级联动的方式获取对应地区、对应设备的害虫测报数据。主界面如图3所示。
其次,在选择对应设备后,如选择:杭州市、江干区、设备l,即可点击“拍照”按钮,实现远程控制树莓派拍摄当前粘板上害虫照片。由于树莓派在接收拍照指令并执行拍照动作上传、生成对应的XML文件等一系列过程约需花费20-30s,所以在点击“拍摄”按钮后,需等待片刻,然后再点击“最新照片”按钮,即可查询刚分拍摄的照片。
用户在完成上述拍照及照片、数据查看后进行历史数据查询,依然采用下拉列表的形式,选择目标年月后,即可点击“历史照片”按钮查询历史数据。该设计不仅可降低下滑篇幅、提升用戶体验,而且可对该月害虫情况进行周期性了解。
主界面设计采用线性布局,方向为垂直排布。城市、区、设备、年份、月份,5个下拉列表的实现采用Android白带的Spinner控件,并将城市、区、设备对应的3个下拉控件单独放置在一个LinearLavout中,年份、月份对应的两个下拉控件单独放置在一个LinearLavout中,设置权重为1。使用Button按钮提交“拍照”、“最新照片”、“历史照片”3个操作。其中下拉效果如图4所示。
Java文件实现过程为:首先,对Spinner控件进行初始操作,由于城市、区、设备、年份及月份的下拉列表中填充的数据均为字符串,所以使用ArrayAdapter适配器进行数据填充,并把城市、区、设备、年份及月份数据源一一封装成对应的List集合。其中,下拉样式采用Android白带的android.R.lavout.simple_spinner_item样式。此外,给每个下拉菜单设置选中事件,并将选中的列表记录到日志文件中,使每一次操作均有记录。在选定目标设备后,即可点击“拍摄”按钮,根据选中的设备,APP使用HTTP协议以GET的方式将拍照请求发送给服务器中对应的处理类,同时设置请求的超时时间为Ss,若在Ss内接收到服务器响应,即说明移动端请求成功,此时服务器返回200状态码给客户端,客户端接收服务器返回的数据流提示“拍照成功”,如图5所示。
同理,在点击“最新照片”、“历史照片”按钮后,同样向服务器端发起请求,结合Intent意图对象实现页面跳转,并利用意图对象把用户选择的城市、区、设备编号数据流转到下一个界面,供下一个界面使用。
2.3最新图片界面实现
最新图片界面主要用于呈现对应地区树莓派拍摄的最新照片和数据。害虫具有趋黄性,在田间设置黄色粘板诱杀害虫是广为使用的方法[15-17]。将粘板图片直观呈现在手机终端上,并将经后台处理后的害虫计数结果、温度、湿度、光照、下雨情况及拍摄设备所处的地理位置等信息一并呈现,界面显示一目了然。最新测报数据如图6所示。
该界面整体布局采用线性布局,并设置方向为垂直排布。在界面最上端设置显示当前设备所处的地理位置、设备编号与图片拍摄时间,即在Android XML布局文件中设置3个TextView控件,设置其宽和高均为包裹内容,字体大小为22sp。另外,使用SmartImageView控件展示最新图像的显示,图片下方显示当前图中害虫数量。使用4个TextView结合drawahleLeft属性实现环境数据的图文显示,将对应图标放置在文字左边,方便用户浏览信息。
Java文件实现过程为:首先拿到Intent意图对象从上页流转过来的数据,分别是设备编号和地理位置;然后根据设备编号、地理位置开启线程访问远程URL资源。同理,在该线程中APP使用HTTP协议,以GET方式请求服务器端,并且设置请求的超时时间为Ss,在Ss内接收到服务器响应,即说明移动端请求成功,此时服务器返回200状态码给客户端,则客户端接收服务器返回的数据流。
设计采用XML方式进行数据传输。APP端在获得数据库返回的数据后,进行有效数据解析。解析过程为:编写一个Photo实体类代表一张图片涵盖的所有数据,它具有6个静态属性,分别为id、linage、temp、humi、lux和raln;编写一个解析XML的T具类,使用XmIPuIIParser解析器,其原理是基于事件进行解析,通过从开始节点到结束节点一行一行实现解析目的;解析XML中的标签,当遇到pho-tos标签时,创建一个List集合,遇到photo标签时创建一个Photo实体类对象,遇到lrnage标签时把图片地址取出来,遇到temp时把温度值取出来,同理,将所有值都取完成后,将所有数据封装进List集合中;最后,遍历整个集合,将有效数据取出,用于更新UI控件中的值,包括拍摄时间与4个环境数据。
同样在XML文件中设置一个节点photo,代表当前图片所有信息。在它内部有6个子标签:id、lrnage、temp、hu-mi、lux、raln,它们分别代表图片编号、图片地址、温度、湿度、光照强度、下雨情况的信息。其中lnlage标签中封装的是图片URL数据,如http://111.231.105.41/example s/photo/2019-05-20-10-OO-Ol.jpg,该数据主要在SmartImageView控件上呈现图片时使用。
此外,移动端APP使用独立设计的SmartImageView框架替代Android标准的ImageView,以此获取远程服务器图像。该框架支持URL地址加载图片和图片缓存。
2.4历史图片界面实现
历史图片界面主要呈现历史图像与数据。采用滑动列表的形式进行呈现。首先显示图片名字;与此同时,给每一个列表项添加点击事件监听,将远程图片与数据一并加载并显示出来,即先根据月份展示该月所有图片名字,再根据图片名字展示对应的图片内容与数据。其中历史图片名称列表界面如图7所示。
该界面主要通过ListView控件实现。此外,在界面底部的“主页”按钮可实现从该页到主页的跳转。
Java文件实现过程为:首先获取Intent意图对象从上页流转过来的数据,分别是设备编号、地理位置、年份和月份;接着初始化ListView控件,即联网获取远程服务器端的数据,拿到数据流后进行XML解析,封装进List集合;然后遍历集合,将用户选择的年份、月份与集合中所有Photo对象进行比较,取出对应月份的所有图片数据;最后使用runOnUiThread方法更新UI控件,实现数据展示。编写一个内部类实现BaseAdapter类,重写getCount()方法和getView()方法。其中getCount()方法中返回的整型值为完成封装的List集合的元素个数。getView()方法中返回ListView待显示的每个项。
2.5服务器端与手机APP間通信实现
服务器端主要完成两个任务:服务器端环境搭建、接收手机APP远程访问并作出处理。
服务器端环境搭建内容为:云服务器采用腾讯云公司推出的云服务器ECS,搭载CentOS 7.2 64位操作系统,结合Tomcat软件服务器及Java Socket网络编程,实现对数据采集终端上传数据的接收与保存。此外,数据库管理系统采用关系型数据库MvSQL。在Windows平台上使用Navi-cat数据库客户端远程设计该数据库。主要包含两种类型的表,一个为树莓派终端上传数据后存储使用,其中表的字段包括:编号、图像名字、光照强度、温度、湿度和下雨情况;另一张表为害虫数量的存储使用,其中表的字段包括:编号、图像名字、害虫数量。利用OpenCV图像库对图像进行处理,完成害虫计数。
接收手机APP远程访问并作出处理,具体指在Eclipse集成开发T具中编写Java代码。编写Java类,使其继承HttpSe-vlet类,使用HttpServletRequest对象接收手机App发过来的请求数据。此外,在每次接收树莓派上传的图像后,自动编辑生成对应的XML文件内容,并作为XML文件输出到Tomcat服务器的特定目录下,该文件将作为“最新图像”与“历史图像”的访问数据源,供远程APP访问。将整个丁程打包成war包并导出,使用FileZilla文件传输工具将其上传至Tomcat的wehapps目录下,并使用Linux客户端T具XShell 6开启Tomcat容器,Tomcat自动将war包解压并运行。此时,即可对服务器进行访问。另外,从功能角度出发,设计固定时间点发送拍摄命令给树莓派,具体设置的时间点为:上午8点、8点30、9点、9点30、10点、10点30与11点,下午2点、2点30、3点、3点30、4点与4点30。工作人员可在这些时间点获取最新的害虫图片及数据,无需再进行拍摄。
3 结语
本文害虫测报系统移动端设计将Androici技术、JAVA技术、移动互联网技术与传统农业相结合,使计数结果与原始图像一并呈现在移动端平台上,实现了害虫图像采集、上传、计数、展示、测报等功能。通过传统微信公众号,只能获取害虫计数数据,无法提供直观的原始图像。相比之下,移动端害虫测报更加便捷、高效、直观。本文系统功能主要有:移动端APP远程控制拍照、移动端APP实时获取害虫图像和害虫数量、移动端APP远程获取历史图像和历史数据。实验证明,本文系统可以稳定、有效地T作,实现各项功能。未来将进一步完善移动端用户界面、提升用户体验度。