大二下半学期的软件杯比赛

**

成果:A4-林业害虫识别组 国家二等奖

**

大二下半学期的软件杯比赛

一、简单介绍本人参赛前景:
我参加这个比赛有点突兀,因为是后期加入负责后台实现的。当时自己恰好完成了前段时间的项目,老师让我们三个人组合一下,所以我进入比赛组的时候app的简单搭建和算法基本成型了,但是后台和app获取后台数据部分没有搞定。

二、分工情况:
该赛题要求做出app在线和离线,害虫信息管理系统三个部分。
队长负责了app离线部分
我负责了管理系统实现+app在线部分
另一个队员负责了目标检测算法yolov5s部分

三、功能简单描述:

  1. app在线部分功能:登陆注册、拍照或相册选取图片、识别反馈信息、害虫详细信息、个人识别历史、个人信息
  2. app离线部分功能:拍照或相册选取图片、视频检测、识别反馈信息、害虫详细信息
  3. 害虫库管理系统:害虫信息增删改查导出、用户信息增删改查导出、害虫种类树增删改查

四、开发过程:
1. 心态:
我接手这个的时候,完全不会安卓开发,零基础,但是我负责的部分任务又不轻松,也是很勇当时也没想能不能完成,就接下来了,当然也感谢老师当初的信任自己的勇敢
2. 实现结果
因为下面只说我实现的结果,算法和离线部分还在向队友请教,等学习的差不多了,我在进行总结。
(1)管理系统部分
简单说一下,因为官方没有硬性要求必须实现什么功能,当时也没有太多时间细致地去创新太多功能,就简单的实现了三个主要功能模块。
害虫管理系统依托于ruoyi-fast架构,该框架基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf),不做过多的技术介绍(本人也是小白阶级没有太深入的去了解这些架构的实现),贴一下若依官网,大家感兴趣可以去官方下载来了解学习。
若依官网
小创新点:
a. 实现了对害虫信息进行目科属分类,创建了分类树,可以进行种类的增删改查。
b. 在害虫信息查询时,也提供了分类树查询功能。
c. 害虫信息添加的录入害虫种类通过分类树获取路径名称

因时间不允许导致没有实现的功能
a. 多图片存储:已实现的是存储一个图片,因为数据表中的图片地址只存了一个,应该可以实现多图片存储,现有的实现思路是仿照树表里面的节点路径,通过“,”来排列图片地址,这样提取图片地址就简单一下了。之后可以去实现一下。

(2)app在线部分
从小白做起,但是因为队长对app基础配置部分已经搭好了,所以我上手也比较快速。
简单说一下在线部分的技术流程

害虫识别功能
a. 安卓——>服务器:安卓将图片进行base64转码,将base64转码和用户id两个信息传送至服务器(管理系统服务层),服务器对信息提起将base64转码解码创建本地图片文件,并规定命名格式根据用户id命名,这样便于获取识别反馈图。
b. 服务器——>python——>服务器:服务器将图片地址传送至python算法部分,算法采用了yolov5s算法进行目标检测,检测完成后形成本地识别反馈图(命名格式也按照用户id命名),并将识别害虫名称和个数信息返回给服务器。
c. 服务器——>安卓:服务器调取需要的数据库信息传送回安卓,同时根据图片地址将识别反馈图进行base64转码也传送给安卓。

过程中的难点:

  1. intent页面跳转携带信息不能过大,因此为了使跳转页面拿到相应数据,我只能把原来页面带有的id传给跳转页面,然后在本页面将id传送至服务器端获得数据,在获取成功后,再显示信息,逻辑上来讲有点绕,但是实现起来不是很复杂。
  2. 图片传送困难,图片传送我们选择了base64转码,但是在获取识别图时,由于当时思维没转过来,(当时可能安卓端没有传送用户id数据,识别图片名是根据用户id命名的,这样导致服务器端不知道哪个图是该用户识别的,因此没法在服务器获得图片,还有一点是,安卓和服务器之间传送数据没有量的限制,当时以为有限制。),不过还是解决了。我采用的方法其实不难,识别图是由python算法端存储到了本地,并且可以获得图片的名字,我们硬性规定了识别图名字的格式,所以服务器可以获得图片名,然后对其进行base64编码然后传送至安卓端即可,安卓端根据base64编码可以实现图片显示。
  3. 再者就是安卓编程不熟悉,导致一些页面做不出来,比如说查询历史的页面listView、轮播图Banner的运用等,都算是安卓基础编程需要学习的知识。

五、yolov5s算法学习

六、教训:
(1)组会要经常开!
刚在一起打比赛,彼此擅长的地方不是很了解,加上我们的队长擅长“单打独斗”,以至于他经常熬夜,我们回寝室睡大觉,这样很不好。开组会不仅是分布任务的途径,而且是了解彼此想法,在交流中慢慢学会合作的重要途经。同时,组会也是锻炼自己语言表达的能力,如何把自己的想法给别人讲清楚、如何把自己会的和别人讲清楚等等,这些都是让自己提升的必要。
(2)基础框架要提前打好!
基础框架我暂时把它定义为:在实现比赛要求的基本功能下,我们还能做出那些别的创新点,也就是把我们能做的和尽力能做的规整出来,不要做一点,想一点,这样永远都实现不了“完善”。基础框架提前打好后,对你后面的答辩演讲有很大的帮助,起码你的大框有了。举几个这方面因为基础框架没有提前打好,导致某些基础配置部分频繁修改的情况:

a.数据表频繁修改:因为数据表是交给别人做的当时也没注重这个,我当时也没在,所以数据表做的很“坑坑洼洼”,然后官方需求没有限制,为了体现我们实现的完整性和创新性,后期又加上了一些要求,所以数据表重新创建了好几次,差点被整没脾气了。

b.app的demo不停的被驳回:app页面的demo修改了好几次,基本每次给老师呈现阶段性结果的时候,app页面都会被嫌弃,页面被驳回也就意味之我们的代码要重写,最后老师不得已找了美工来帮助我们完善demo的美观性和简洁性。
(3)及时和老师请教,别害羞!
这个方面身为答辩演讲的我深有感触,虽然我们采用了录视频的方式来预防答辩过程中的网络故障,但是这并不比现场轻松很多。因为答辩演讲思路是我们自己定的,没有提前请教老师,导致最后几天我们给老师演示的时候,被驳回了。很无奈我们要重新整理思路,重新录制,重新制作ppt等等。所以,我们连着熬了几天夜一直到比赛前一天晚上。有自己的想法这个是基础,但是如果你有老师的指点和帮助,这会让你事半功倍,而你缺乏的往往是勇敢和老师请教的这一步,别怕你做出来的成果不怎么ok,正是因为不ok,所以老师才能帮助到你,比赛是如此,其他方面也是如此。敢向威严的老师请教,和他们形似朋友,这也是我们成长必不可少的需要。

补充:算法部分我了解太浅,没什么资格谈论,等我学的有底气了,再来补充完整。

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览210101 人正在系统学习中

来源:YLYLND

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年8月12日
下一篇 2021年8月12日

相关推荐