当前位置:首页 期刊杂志

入侵昆虫识别微信小程序设计与实现

时间:2024-05-22

黄亦其,沈 豪,,王福宽,,钱万强,董双玉,乔 曦,,3*

(1.广西大学机械工程学院,广西南宁530004;2.中国农业科学院(深圳)农业基因组研究所,广东深圳 518120;3.仲恺农业工程学院智慧农业创新研究院,广东广州 510225)

生物多样性在世界范围内严重衰退,外来入侵物种(IAS)已成为全球生物多样性面临的主要威胁之一[1-2]。近年来我国入侵生物中昆虫入侵种类显著增长,每年因入侵昆虫导致的疫情也出现爆发性增长,因此在防治入侵生物中,针对入侵昆虫的防治就显得尤为重要[3]。

防治入侵昆虫首先的任务就是要对其进行识别,判断入侵昆虫物种。现在对于昆虫的识别系统也已经十分成熟,部分软件识别准确率达到98%,但识别数据库较小,识别的昆虫种类单一,部分软件功能冗杂缺少针对昆虫的查询功能或者后端的联系反馈[4]。相比针对入侵植物和大型入侵动物的识别应用程序的广泛应用地理信息的报告、数据集的收集和识别功能,针对入侵昆虫的识别软件市场至今鲜见报道。

相比于Android和iOS的移动应用,微信小程序设备适配性好、对系统要求低,具有“轻、简、精、快”的轻量化特征,具备现代移动互联网的显著特点[5-6]。为了完善入侵昆虫的管理防治体系,加强公众的生态防护意识,拓宽相关科研数据收集渠道,笔者基于成熟的开发平台与设计实现流程,设计开发了一个针对入侵昆虫的微信小程序,旨在提高公众生态保护意识,有助于科研数据的收集,完善入侵昆虫数据库,为入侵昆虫的防治打下良好基础。

1 需求分析

1.1 需求概述外来物种已经对世界范围内的生物多样性造成严重影响,成功管理这些物种需要公民意识到并参与防止新物种的引入和支持控制干预措施[2]。针对入侵昆虫的防治,帮助扩大民众对入侵昆虫的了解,首先的任务就是要对其进行识别,判断入侵昆虫物种种类。

虽然有效利用公民科学的优点已经在广泛传播,但它在农业领域的应用并不像其他行业那样广泛[7]。对于生物农业领域,学科专业性较强,民众接受相关知识渠道往往受限于书籍和传统媒体,对于昆虫的鉴别也只能局限于难以科学记录的经验描述以及无法大范围推广的专家指导。与入侵植物与大型入侵动物相比,在野外的入侵昆虫受到季节性的影响较大,而且由于易转移和体型小难以发现的特点,非相关从业人员对于入侵昆虫的检测识别难度很大。

在信息化时代,大数据、云计算、人工智能的全面发展为入侵生物数据库的建立提供了强有力的技术支撑,外来有害生物的数据和信息在防控外来生物进入、定殖、扩散成灾中均发挥着举足轻重的作用,大量的基础数据还能对入侵物种的影响进行评估,这也是入侵科学研究的一项重要任务,而图像在农业信息化过程中是十分重要的信息载体[1,8-9]。近年来,配备高质量摄像头的智能手机越来越多。这意味着,使用智能手机可以很容易地捕捉到大型动植物群的高质量图像。此外,进行复杂数学计算的软件(如Matlab)也可用于高精度的图像处理,这对开发图片处理应用提供了一个方便的后端计算处理平台。

随着目前移动互联网的高速发展,越来越多的研究者在探索将计算机系统与的生物农业管理联系起来。现行几种植物识别APP应用流行的识别网络数据库虽庞大,但由此导致的训练效果粗放,识别准确率有待提高[10]。针对入侵植物和大型入侵动物的识别应用程序已广泛应用到地理信息的报告、数据集的收集和识别功能,而对于昆虫应用程序的开发较少,而且对于专门针对入侵昆虫的识别应用至今鲜见报道。

为了更好促进知识服务的扩大和深化,推动学科服务继续向用户延伸,建立科研与用户之间的有效链接[11],系统基于微信小程序的开发优势[5-6],在面向入侵昆虫识别的问题上,应用现存的技术框架、设备发展优势以及推广优势,设计开发一个针对入侵昆虫的微信小程序。系统集成图片拍照识别,信息库功能和报告上传功能的综合可提供用户多方位的使用需求。

1.2 总体功能需求分析对于开发入侵昆虫小程序而言,其主体功能中应包括图片识别、昆虫信息库的应用和昆虫信息在线报告三大模块。对平台用户来说,可登录小程序的使用界面,使用昆虫信息库查找功能,在线昆虫识别查看以及对入侵昆虫的位置图片信息的上传报告功能,其中具体包含七大具体的使用功能。用户功能需求用例如图1所示。

图1 用户功能需求用例图Fig.1 Use case diagram of user functional requirements

2 系统设计

2.1 系统框架在小程序进行需求分析的基础上,对系统的架构进行设计。首先对系统的各个结构组成进行分析设计。系统整体结构如图2所示。

图2 系统体系结构设计Fig.2 System architecture design

可以看到该系统采用的是一个经典的前后端交互设计,移动终端通过数据网络访问系统服务器,服务器进而对数据库和识别网络文件路径进行访问。通过分层设计降低系统各部分的耦合度,让系统具有一定的独立性和良好的扩展性。

根据对系统的需求分析和概要设计,整个识别系统基于C/S架构,采用前后端分离的开发模式,由2部分组成,包括用户小程序端和服务端,其中服务端又包括数据库模块,识别算法模块以及由Java语言进行编码的系统后端。该研究总体采用MVC(Model-View-Controller)软件架构模式,其模块间的低耦合使得项目开发效率更高。考虑到后续的继续开发研究任务,后台基于SSM(Spring-Spring MVC-MyBatis)框架进行设计,由于其也是目前主流的Java EE框架,由Spring和MyBatis开源框架组合而成(其中Spring MVC属于Spring的部分内容)[7-8]。Spring是一个基于J2EE环境下的轻量级开源框架,利用容器对各组件进行选择调用,降低了组件间的耦合,通过注入机制在运行时为组件配置资源,实现组件的即插即用,此外组件无需指定数据接口,因此也可以对组件进行分离[9]。Spring MVC属于Spring提供的一个构建web端的MVC框架,将模型层(Model)分为业务层(Service)和持久层(Dao),在Service层可以访问持久层也可以访问非数据库层,大大提高系统开发效率。MyBatis作为后端的数据持久层框架,使得JDBC操作数据库的过程更加轻量化,通过Xml或注解的方式将Java对象和Sql语句结合映射为最后要执行的Sql语句,其中JDBC为Java提供专门用于数据库连接的接口。整体架构如图3所示。

图3 Spring MVC架构Fig.3 Spring MVC architecture

2.2 系统结构设计根据用户的总体需求,对系统的总体功能分模块进行设计。依据模块化和层次化的设计规范,对系统功能进行模块划分,将总体功能模块划分为多个子模块。根据需求分析,系统包括几大功能模块:登录注册模块、识别模块、信息报告模块、信息库功能模块,具体如图4所示。

图4 系统总功能模块设计Fig.4 Design diagram of the system’s general functional modules

2.3 系统各功能模块设计

2.3.1识别模块。由图5可知,用户在进入识别模块时当前页面会检测是否有用户信息登录,没有的话开始上传图片就会提示登录,选定图片成功后上传会检测是否授权位置信息,获取位置信息后会上传到服务器获取后台的识别结果。其中位置信息在每次进入小程序均会清空,需要重新授权以保证位置信息的准确性。

图5 识别模块流程Fig.5 Flow chart of recognition module

2.3.2信息报告模块。由图6可知,用户进入昆虫信息上传页面上传后,需要填写完善相关信息,如昆虫的图片和相关地址信息,否则提交会提示将信息补充完整,上传成功后会出现上传成功的提示。

图6 信息报告模块流程图Fig.6 Flow chart of information report module

2.3.3信息库功能模块。由图7可知,信息库功能模块主要分为两大功能,对后置昆虫信息库根据关键字进行模糊查询获得昆虫的名称和常见宿主等关键信息,另外根据昆虫的科对昆虫进行分类展示,点击后获得该昆虫的其他详细信息。

2.4 数据库设计数据库设计就是以数据库模型的方式表现出系统整体的关系。该研究采用E-R 图来表现数据库间的逻辑关系。E-R 图就是实体联系图,它提供了实体、实体属性以及联系的方法,是用来描述现实世界的概念模型。系统的E-R图如图8所示。

图7 信息库功能模块流程图Fig.7 Flow chart of database function module

2.5 识别算法随着DL在其他领域的快速发展和大量成功应用,特别是国家的重视和企业巨头的加入,DL在现代农业中获得越来越广泛的应用[10]。现如今,卷积神经网络在图像识别领域已经得到了充分的应用与研究,特别是在农业信息化的应用中对生物农业动植物的检测识别[11]。

该研究用到训练后的GoogLeNet神经网络,该网络于2014年提出,近年来应用在许多实际领域的分类任务中,并且都具有优良的表现。GoogLeNet网络共有22层,利用Inception结构模型堆积作为GoogLeNet网络的主体架构,在保持网络的稀疏性的同时提高了识别性能[12-14]。

该研究采用的Inception模块作为GoogLeNet网络模型的实现如图9所示。与传统的多通道卷积不同的是,Inception模块使用多个卷积(1×1,3×3,5×5)结合max-pooling层,然后将卷积和pooling结果关联起来[15-16],这样使得网络的层数更深,网络性能及精度提高的同时节省了计算资源。

3 系统实现

系统前端以微信小程序的开发工具为基础,后端项目通过eclipse进行开发,根据各功能模块的设计思路在开发工具上进行实现,主要通过小程序的开发工具进行系统的效果展示。

3.1 开发工具及技术准备微信小程序前端基于微信开发者工具进行开发,后端基于经典Java代码编译工具eclipse配置SSM框架,通过Java提供的JDBC服务对数据库进行配置连接,其次对tomcat服务器进行配置。考虑到该项目的开发成本、数据库之间的相关交互功能实现的完整性和接口的通用性,选择已经非常成熟的分布式数据库MySQL数据库管理系统[17]。通过数据库可视化管理工具navicat对数据库进行简单增删查改等管理。识别算法以python语言架构实现,并对运行基础环境有较高要求,pycharm以其全面性和操作适变性能够完全满足该要求。

3.2 通信方法实现微信小程序与后台的实现方式为:用户在微信小程序前端对后台发起Ajax请求,通过微信小程序自带的request函数对后台发起Https网络请求,请求包括post和get共2种方式,传入服务器数据会转化为String格式,返回Json格式数据后通过前端页面对返回数据进行调用展示。

Ajax是“异步Javascript和XML”的缩写,是一种用于创建交互式的应用程序的开发技术,核心技术为XMLHttpRequest,主要处理对服务器或脚本的请求和来自服务器的返回数据[18-19]。相比经典的应用程序模型响应时间更短,避免了频繁访问服务器导致用户等待时间过长,无需刷新页面即可提供动态异步的交互方式[20]。

JSON是一种基于JavaScript语言的网络中用来交换的数据格式,在Ajax应用中便于服务器传送数据至服务端,此外客户端可以更方便地对数据进行使用,而不需要额外的解析工作[21]。相比于传统的XML文档、HTML片段,JSON数据格式调用更灵活高效,在Ajax应用程序中应用广泛,但在非Ajax程序中传输相比于String字符串不够安全稳定[22]。

3.3 信息库功能实现

3.3.1查询功能实现。对用户搜索框内的值先进行变量定义,之后将输入字符对变量赋值,将该带值变量在请求中传入后台,在控制层中分发启动Dao层,应用Sql语言中的模糊搜索关键字对指定数据库表进行搜索,将得到的list数据传入后端并利用fastjson包对数据进行Json序列化,之后将结果传至用户端并进行分行展示。

3.3.2分类查看功能实现。用户打开分类界面后,微信小程序立即向后台发送一个请求对指定数据库表的指定字段进行分类,并将分类结果传回后台处理后再发送至前端并展示。之后在上一请求里再对分类的第一类进行请求,将上述类别下的所有具体信息传回前端并展示在当前页面,之后用户每点击一大类按钮即对后台发送此类似请求。

3.4 上传功能实现上传信息包括文字信息以及多图片信息,利用小程序前端的表单功能先信息进行统一的打包上传,此外2类信息分别储存在不同的数据库表中,文字信息表与图片信息表建立一对多的关系。先将文字信息进行上传保存,同时将保存id传回,与多图片一起上传至图片表,微信小程序还无法实现多图片上传,因此对其建立1个for循环,以支持多张图片进行依次上传。

图8 数据库逻辑设计图(E-R图)Fig.8 Database logic design diagram(E-R diagram)

图9 Inception v3模型Fig.9 Inception v3 model

3.5 识别功能实现

3.5.1识别路线设计。由图10可知,小程序前端上传待识别图片包括图片文件和位置以及用户等文字信息,文字信息和图片文件以及图片识别结果都需要存至数据库,因此需要在后端将2类文件进行区分。首先在后端将图片文件传至识别算法读取的文件夹路径,算法运行后传出识别结果并将图片转移至存储图片的最终文件夹,在后端将该文件夹路径名后加上图片名保存为图片的最终绝对路径。最后再将以上的识别结果、图片路径及文字信息传回前端展示给用户,图片以文件路径的形式与相关文字信息保存在数据库以便之后的调用与编辑。

3.5.2算法环境搭建。系统利用后端编程语言python来构建GoogLeNet识别算法,通过谷歌公司提供的深度学习网络框架tensorflow 1.4来作为网络的运行环境,工作平台为pycharm,python 3.6环境和此版本tensorflow配套插件均在其上进行安装配置。

3.5.3待识别图片上传。待识别图片从前端上传到返回识别信息到前端经历如下过程:微信小程序前端通过内置uploadFile函数发起一个HTTPS POST请求,将本地图片资源上传到服务器,客户端的服务器后端对图片资源进行重命名,接收至临时文件夹,之后图片经过识别算法识别处理后转入储存文件夹。

图10 识别路线图Fig.10 Identification map

3.5.4识别算法的调用。对python环境和tensorflow框架配置好,在识别算法的py文件经过cmd运行测试成功后,可以通过Java内置的Runtime.getRuntime().exec()函数运行外部的程序或命令。Runtime.getRuntime().exec()的使用基于电脑系统的命令,通过调用服务器命令脚本执行命令。在Java程序即后端的业务层中通过该函数,指定运行环境对指定目录下的识别算法进行启动,进而在识别算法即python文件中对指定目录下的图片文件进行加载识别,得到结果之后将临时文件夹里的图片资源转移到存储文件夹以便后续的图片识别。

3.5.5Socket通信。由于服务器上的项目后端与识别算法采取不同语言的编码方式,在不同的代码运行平台上运行,因此在代码层面很难对二者进行数据交互。对于在python文件处理图片资源的识别结果,利用Runtime.getRuntime().exec()创建一个启动python文件的进程,再利用getInputStream()函数得到这个进程的结果,即图片的识别结果。但该方法不能保证大量数据的输出稳定,所以应当架设一个稳定的数据通道,可以在Java后端与python文件中起到稳定的数据传输的作用,能有效控制通道的开放关闭,因此采用Socket通信方法(图11)。

图11 Socket实现原理图Fig.11 Socket implementation schematic diagram

Socket俗称套接字,是在涉及网络的Java开发中,使用TCP/IP或者UDP协议在服务器与客户端之间进行传输的技术,是网络编程的基础[23]。Socket类可以跨语言跨平台,仅通过套接字和端口将网络中的2台主机进行数据交互[24]。将Java端作为客户端,python端作为服务端,首先客户端将图片资源发送至临时文件夹,创建套接字并绑定到特定的IP/端口上,新建BufferedInputStream对象来接受Socket对象接受的数据。同时注意,为方便识别结果数据成功响应至小程序端的Ajax请求接收,在python端将识别结果转化成JSON相关格式向Java客户端进行输出。

3.6 前端界面实现前端微信小程序采用规范的weui小程序官方框架,主要页面分为4种编码语言:wxml与wxss用作页面的排版与渲染,js文件用作页面事件的编写,json文件进行当前页面全局的声明与补充。由于前端开发已经非常成熟,对于开发简单功能界面,开发者已经无须对页面组件细节进行编辑,可以省下更多时间在界面设计上,市面上也已经有了功能完备的小程序开发框架,如iView、tina等前端框架。考虑到小程序在不同设备上的适容性以及配套的开发文档的学习难度,前端框架选用微信官方开发的weui前端框架。经过多方对比图标质量,应用方式的简易度以及相关版权的问题,该项目的图标选用阿里的iconfont图标库和部分flaticon图标。

3.6.1实现登录注册。用户首次登录后在个人页面点击登录注册按钮进行登录注册,通过微信小程序自带的请求身份的事件函数授予用户微信的身份信息,在全局中声明授权信息后之后可不用再继续请求信息授权,防止出现过多的无效请求浪费操作(图12)。

3.6.2实现昆虫图片识别。昆虫图片识别功能作为微信小程序的主要功能,考虑到用户的使用习惯,应放在系统醒目位置。将该功能按钮放在进入小程序的主页页面。上传图片应保证页面跳转不过多,按钮醒目且作用易于理解。此外为方便不同的应用场景,图片同时支持拍照上传和手机相册上传。微信小程序自带选择二者来源图片的函数,但由于考虑到物体的照片效果,需要在相机中间加上取景框方便用户对准待识别的物体,于是用一个底部弹起的操作按钮组件对2个来源的图片进行分别选择(图13)。

在个人中心页面可查看上传识别的图片相册,点击图片后便得到当时反馈的识别结果,可在相册页面对图片信息进行编辑删除操作。

3.6.3实现信息报告功能。信息报告功能页面有2个进入方式:一是直接从下方导航栏直接进入;另外如果用户对上传图片识别结果不满意可在识别结果页面点击进入信息报告页。用户报告昆虫信息时也需要获得身份授权和位置信息,并根据提示完善相关提交表。通过对昆虫的信息报告完善后台的昆虫库,提高算法识别的昆虫种类和识别准确度。此外在信息报告的主页面还可查看信息上传历史(图14)。

图12 个人中心页面Fig.12 Personal Center page

图13 图片上传主页面Fig.13 Photos uploaded to the main page

3.6.4实现信息库相关功能。针对昆虫数据库设置了2个功能,包括昆虫的库内模糊搜索和昆虫按科名进行分类展示,主要在后端mapper层里利用SQL语言的相关功能实现对数据库的模糊搜索和对全库物种进行分类,再根据不同类别进行查找并展示(图15)。

3.7 识别结果实现返回识别结果如图16所示。对单一图片识别展示3种识别结果,分别以准确率的高低由大到小以表格形式进行展示,下方展示上传的时间和位置信息。此外如果用户对展示结果有疑问,可以对该结果信息进行质询报告,页面会跳转至信息报告页面,将相关数据传至后台服务器。

4 测试

系统测试主要为上机测试,包括系统的功能测试和性能测试,对系统的各模块进行测试,确保系统的可靠性和稳定性。

4.1 测试环境及测试准备该系统主要由微信小程序客户端和后端组成,为方便进行调试观测准确测试数据,测试前端为微信开发者工具,版本为1.05,模拟机型号为iPhone 5,IOS版本号为8。后端运行工具为eclipse 4.6,服务器为tomcat服务器,版本号为9.0.38,系统为Windows 10.0.17763,Java版本为Java 1.8,MySQL版本为MySQL 8.0.17。

4.2 系统功能测试对微信小程序进行功能测试,测试用例包含主要功能模块,包括识别功能模块、注册登录模块、信息报告模块、数据库功能模块,测试情况如表1所示。

4.3 系统性能测试性能测试主要利用微信开发者工具测试观察网络请求并返回数据的时间,测试情况如表2所示。

图14 信息报告页面Fig.14 Information report page

图15 数据库功能页面Fig.15 Database function page

图16 识别结果页面Fig.16 Recognition result page

5 结论

该研究的项目利用当前移动互联网的快速发展趋势,考虑微信小程序相比于其他移动应用的优点,基于入侵昆虫学以及相关生态知识,根据应用成熟的开发框架与技术路线,开发设计了一款针对入侵昆虫的识别微信小程序。经测试,该系统能满足系统设计需求,拥有完善的功能与性能,弥补了市面上入侵昆虫识别软件缺陷,推广前景巨大。与其他动植物识别软件相比,准确率表现优秀,能够较好满足用户的相关需求,极大方便针对入侵昆虫的识别与防治,并且对田间害虫的防治有相当帮助,在应用推广、知识科普以及科研数据收集方面具有巨大潜力。

接下来会对该系统后端设计搭建,对前端上传信息进行可视化展示,对关键数据进行分析,提供调整数据库的可视化页面,并考虑综合性强的应用场景应用监控检测系统,实时识别传回数据。另外基于用户上传的有效昆虫信息,考虑继续应用tensorflow平台对识别算法继续进行训练,以提高识别准确率和识别效率,完善用户的使用体验。

表1 系统功能测试结果Table 1 System function test results

表2 系统性能测试结果Table 2 System performance test results

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!