程序开发文档
目 录
农作物病虫害是我国的主要农业灾害之一,它具有种类多、影响大、并时常暴发成灾的特点,对我国国民经济、特别是农业生产常造成重大损失。
随着人工智能的发展,利用机器视觉进行农作物病虫害检测与识别可以提高识别的准确率,具有高效客观的特点;随着计算机、手机等移动设备的普及,利用病虫害专家系统可跨越时间、空间的限制为农民提供病虫害防治策略。本系统利用深度学习算法、前后端开发技术、数据库技术进行开发,深度学习算法解决农作物病虫害的识别与检测困难的问题,前后端技术主要用于开发web应用,数据库SQLite用于存储数据信息,最终,开发出一款集农作物病虫害检测、识别、防治和决策的web应,本系统具有以下功能:
- 导入图片并识别病虫害类别;
- 实时显示识别结果与识别准确率;
- 分析识别结果、给出已识别病虫害的发病特征、预防措施、治理方案。
系统特点:
- 界面有友好,操作方便;
- 识别准确率高;
- 识别结果可视显示、提供治理方案。
一、技术栈
开发语言 | python |
前端 | layui,jinjia2 |
后端 | flask |
数据库 | SQLite, 连接使用的flask_sqlalchemy |
深度学习 | pytorch,使用resNet34训练 |
API | 识农API、百度识虫API |
服务器 | 阿里云轻量服务器(Ubuntu20.04)+Apache |
农作物病虫害识别与治理系统是基于前后端分离的Web应用:
(一)前端技术采用:
1.layui作为一款国产开源的前端UI,简单易上手,并且UI简洁美观。本身目标对象是不怎么懂前端的后端开发人员,也适合后端人员使用。
(1)layui属于轻量级框架,简单美观。适用于开发后端模式,它在服务端页面上有非常好的效果。
(2)layui是提供给后端开发人员最好的ui框架,基于DOM驱动。
2.jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持,由于其灵活,快速和安全等优点被广泛使用。
(1)相对于Template,jinja2更加灵活,它提供了控制结构,表达式和继承等;
(2)相对于Mako,jinja2仅有控制结构,不允许在模板中编写太多的业务逻辑;
(3)相对于Django模板,jinja2性能更好;
(4)jinja2模板的可读性很棒。
(二)后端技术采用:
flask主要特点小而轻,原生组件几乎为0,非常全面,属于短小精悍型框架
优点:
a.简单,Flask的路由以及路由函数由修饰器设定,开发人员不需要借助其他文件匹配;
b.配置灵活,有多种方法配置,不同环境的配置也非常方便;环境部署简单,Flask运行不需要借助其他任何软件,只需要安装了Python的IDE,在命令行运行即可。只需要在Python中导入相应包即可满足所有需求;
c.入门简单,通过官方指南便可以清楚的了解Flask的运行流程;
d.低耦合,Flask可以兼容多种数据库、模板。
(三)数据库技术:
SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB、MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事务、数据表和索引等。事实上,尽管SQLite拥有诸多关系型数据库的基本特征,然而由于应用场景的不同,它们之间并没有更多的可比性。下面我们将列举一下SQLite的主要特征:
a.管理简单,甚至可以认为无需管理;
b.操作方便,SQLite生成的数据库文件可以在各个平台无缝移植;
c.可以非常方便的以多种形式嵌入到其他应用程序中,如静态库、动态库等;
d.易于维护。
(四)数据库设计:
用户表
虫害百科表
历史记录表
二、功能介绍及界面设计
1.病虫害图片识别
上传后给出识别结果
点击图片跳转百科详情页
2.用户登录
注册页面
登录页面
后台主页信息显示
普通用户个人信息修改
管理员管理用户
需要先进行查询
- 百科查询
点击
进入到对应的百科页面
若是管理员账号,还可以添加记录
点击对应图片,可查看详情
若是管理员账号,还可以编辑、删除
- 客服咨询
一般用户可留言
留言后可查看内容,也可查看其它留言
如果为管理员,可以删除留言
- 图片识别历史记录
上传图片后,会将本次查询记录保存,用户可以查看历次查询记录,有日期搜索功能,点击即可查看详情
运行速度 | 通过127.0.0.1:5000访问web应用 |
安全性 | 用户在使用账号登录时加入验证 |
扩展性 | 加入更多功能,如作物生长情况预测等 |
部署方便性 | 可部署于阿里云Ubuntu、Windows系统中 |
可用性 | 可用于农户防止农作物病虫害,适用范围较广 |
1、安装相应的python包
(1)pip install flask
pip install flask_sqlalchemy
pip install torch==1.8.0+cpu torchvision==0.9.0+cpu torchaudio===0.8.0 -f https://download.pytorch.org/whl/torch_stable.html
pip install matplotlib
这里安装的是cpu版本的pytorch,你也可以根据需要安装其他版本的,安装过程最好换用国内源,快很多
注:如果你用的不是pycharm,建议安装gevent
pip install gevent
(2)pip install -r requirements.txt -i
Simple Index进行运行环境的安装
2、运行app.py
3、访问 127.0.0.1:5000
注:如果是将项目部署到服务器端,最好检查一下自己的SQLAlchemy版本,如果不是1.3.23会报错,这时将其卸载重装即可
- 项目协调
对于该项目,我们将其分为搭建网站与分类算法实现部分。最开始我们就实现了项目大概分工,考虑到网站部分较为困难,最后是一个人负责分类算法,两个人负责搭建网站。
- 任务分解
1.算法部分
分类算法是使用ResNet34模型,运用torch框架进行训练,最终得到了比较好的训练结果,但由于神经网络模型训练的数据集比较小,且训练的种类仅有6种,在这6种图片的测试下准确率很高,但对于其它病虫害无法识别,因此引入了识农的API,经过测试,该识农API准确率很高,可以达到87%以上的结果。
2.搭建网站部分
网站我们考虑到torch分类算法(使用python语言)在其他程序语言平台还需要进行转换,故而考虑直接用python作为开发语言,其强大的第三方库也为我们节省了大量的开发时间。这部分可以分为三个小部分——前端界面美化、后端资源调控以及前后端交互。
- 困难与提升
在开发时主要困难来自于搭建网站部分,前后端交互不断出现bug,比如页面资源显示问题,要在数据库中调取用户保存的图片显示在前端,格式的转换也消耗了很多时间,所幸经过团队的不断努力,最终还算是搭建出了一个比较可以的网站。
- 系统完善
对于这个系统来说,最终由于时间等因素的影响,没有将客服回复问题的功能制作出来,后续我们会考虑完善该功能。页面的设计界面也不是很好看,可以继续美化。