丘其章 匡珍春
摘要:针对越来越严重的农作物病虫害问题,开发了一款基于计算机视觉的Android病虫害识别系统。软件使用uniapp对客户端界面进行编写,通过云环境进行项目的部署,借助shiro作为权限管理进行授权和鉴权等操作。
关键词:计算机视觉;Android;web应用;病虫害识别;
0引言
随着机器学习和图像识别技术发展日益成熟,使得农作物病虫害的智能自动识别与诊断成为可能。为实现农作物病虫害智能识别,笔者建立了基于计算机视觉的Android农作物病虫害智能识别系统,采用C/S 模式,实现对农作物病虫害图像的采集、识别和快速诊断,移动端设备与云端服务器分工合作,移动端旨在实现信息采集及普通的预处理操作,服务器端旨在实现图像的准确识别,是一个实现基于移动终端图像识别系统的可行的、高效的方案。
众所周知,当今时代云计算技术快速发展,这让开发者进行部署的成本大大降低,借助云服务器的强大计算力以及Android操作系统的简便性可以让系统变得轻便和简单。
1病虫害识别系统的总体架构
1.1服务器端设计
病虫害识别系统主要分为前端界面以及后端数据接口API。后端主要包括用户信息与权限管理,一对一留言问答,病虫害识别,农业资讯以及病虫害知识库等功能。使用了流行后端语言Java以及核心的spring boot框架进行后端项目的构建。一对一聊天问答界面中,通过上传图片可以让用户更加方便地进行交流。
本系统选择了阿里云的轻量应用服务器以及短信的云服务,选择这两个产品是因为要让外界进行访问,以及我们开发者对于整个系统进行性能的调试。再者,随着云计算的快速发展,云产品的优势逐渐展现,使得开发者部署小项目时只需针对业务的开发,不需要对服务器的物理环境进行维护,诚然的成本要低于本地服务器。针对高峰期的繁忙业务,云产品可以通过弹性扩容的方式进行资源的增加,而不像本地服务器无法进行资源的扩容,只能使用服务器原有的资源。同样地,针对短信的服务,使用云产品可以减少所需的开发成本,因为云服务商会提供专门的API接口供用户使用,如果让开发者从0进行开发的,那开发成本以及开发难度就会特别高。
病虫害识别系统中,用户通过使用AndroidSDK摄像头拍照并上传到服务器,进行计算机视觉的识别,与数据库相关图片进行比对,可判断农作物是否有患病虫害,从而给予用户一定的反馈。
农业资讯模块通过将收集好的信息进行汇总保存在我们自己设计好的mysql关系型数据库当中,可以在用户需要的时候进行展示以及对资讯进行扩充,以保证资讯的同步更新以及修改。
病虫害知识库类似于农业资讯,但是它侧重的是关于病虫害相关的知识,该知识库能够给用户推荐相关病虫的知识以及实例图片,从而保证用户更加准确掌握农作物所患的病虫害情况。
1.2前端界面设计
因为该识别系统主要服务对象是农业用户,因此笔者开发的病虫害识别系统是基于Android可移动端运行的。虽然目前Android开发项目通常是靠Java借助AndroidSDK来实现,考虑到易用性,笔者采取了前端一个比较新颖的开发框架uniapp,使用的是html5、css3、js等技术,其优势有以下几点:
①可以通过一套代码来生成ios,Android,H5,微信小程序,支付宝小程序,百度小程序;
②对前端开发者比较友好,封装的组件和微信小程序类似,并且是基于vue.js这个大框架的,很适合前端开发者的技术栈。
③拓展能力强,可以把原有的app,h5改成uniapp项目。
1.3病虫害识别算法
该系统的算法使用了python的pytorch机器学习框架,使用了AI Challenger 2018病农作物虫害的数据集,使用了卷积神经网络(CNN)中的DenseNet网络来对模型进行训练。
DenseNet算法相比于ResNet算法可以用更少的参数来对模型进行训练并且减少梯度下降造成的影响。
2.服务器具体处理逻辑描述
其原理和现在的web项目相似,都是通过webAPI进行交互,采取了前后端分离的思想,在解决了耦合度问题的情况下可以让开发者同时进行开发,节省开发成本,只需要前后端共同规定一个json返回值便可以完成简单的webAPI交互。springboot框架正是为了这种前后端分离的思想封装好了springmvc来让后端开发者更方便地进行返回值格式的编写以及不用用户自己去使用其他的json工具库来对返回值进行封装,其返回值一般包括请求是否错误,状态码,响应的数据。
在某些需要权限设置的API上也借助了shiro进行了权限的管理,对于没有权限的用户给予拦截。其实现原理如下图:
我使用的部分有Subject,Security Manager,Authenticator,Authorizer。Subject为访问的主體,也就是访问的用户,Security Manager为集成好的一整个权限控制的架构,Authenticator为认证器,我们这边用了jwt来实现认证,通过访问所带的请求头中带有的token来进行认证,Authorizer为授权器,可以让开发者通过设计不同的角色来对权限进行分开,具体到某个用户可以访问到某个模块的API。
具体代码实现要定义一个拦截器类继承shiro框架中的AccessControlFilter类,AccessControlFilter里有对Subject,也就是访问主体的管理,只有通过了认证才能让主体正常访问。
3.总结
① 在设计一整个软件时,要考虑系统的可拓展性以及安全性,本系统使用的两大框架springboot,uniapp两个开源框架,因为这两个框架是开源的,所以安全性可以根据社区所提供的资源来进行完善。可拓展性也因为其开源可以让更多的开发者来拓展用法。
② 因为现在云计算的发展十分迅速,在项目的部署上,可以在云上直接进行项目的部署,所以很多东西都不需要开发者去兼顾,本系统则是利用了云服务器以及短信云服务等云产品,在节约了一定成本的同时,也更方便开发者进行部署了测试
4.参考文献
[1]田磊,李丽,王明绪. 基于Android的玉米病虫害机器视觉诊断系统研究[J]. 农机化研究, 2017, 39(4): 207-211.
[2]高雄,王海超. 甘蓝菜青虫害自动识别系统的开发与试验研究——基于机器视觉[J]. 农机化研究, 2015, 37(1): 205-208, 222.
[3]屈赟,吴玉洁,刘盼. 计算机视觉技术在农作物病虫草害防治中的研究进展[J]. 安徽农业科学, 2011, 39(9): 5570-5571.
[4] Gao Huang,Zhuang Liu,Geoff Pleiss,Laurens van Maaten and Kilian Q. Weinberger Convolutional Networks with Dense Connectivity IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE
3398501908273