王瀚 洪蕾
摘 要: 随着新技术的快速发展,人们对于未知世界的探索也越来越深入。普通人对昆虫繁多的种类没有细致的研究,缺少相关知识,同时昆虫类科普知识的传播方式比较单一。笔者通过图像识别等相关技术开发了昆虫智能识别APP,其中各类服务的部署应用了Docker容器来实现微服务。APP运行速度较快,满足大部分的昆虫识别效率。并通过APP的动态化配置提升客户端的灵活性。
关键词: 图像识别;微服务;昆虫
中图分类号: TP3 文献标识码: A DOI:10.3969/j.issn.1003-6970.2020.01.025
本文著录格式:王瀚,洪蕾. 基于图像识别的智能昆虫识别APP设计和实现[J]. 软件,2020,41(01):118120
【Abstract】: With fast development of new technologies, people have been exploring the unknown world more and more deeply. Common people have little detailed study of insect species, lacking relevant knowledge, at the same time, popular science knowledge of insects has simple broadcasting method. Through image recognition and other related technologies, the author developed an intelligent insect recognition APP, in which deployment of various services achieves micro-services with Docker container. APP runs fast and can meet most of insect recognition efficiency. And APP client flexibility can be enhanced through dynamic configuration.
【Key words】: Image recognition; Micro-service; Insects
0 引言
隨着大数据技术AI技术的不断发展,人们的生活也因技术的发展而不断改变着,生活中小孩子常会问大人一些他所好奇,不认识的事物,如昆虫。而目前网络上关于昆虫的资料多而杂,而且没有一个方便的渠道可以让人们快速便捷的得到自己想要的知识。
目前这种集合昆虫数据与智能识别昆虫的APP很少。而随着新技术的不断发展以及中国越来越庞大的青年及少儿群体,人们对于特定知识获取的需求会愈加强烈。本APP旨在为对昆虫感兴趣的群体提供一个实用方便的知识获取窗口。
1 智能昆虫识别APP设计
1.1 总体设计
APP实现对用户所拍摄的昆虫图片进行识别,并能够提供昆虫相关的趣闻知识,以及形象生动的解说视频,让用户不用麻烦的外出寻找昆虫,或查找昆虫相关资料,使得用户便捷快速的获取昆虫相关的知识。
总体分为六个模块,具体如图1所示。
地图定位模块包括定位用户位置,记录拍摄的昆虫。发现模块包括昆虫相关趣闻推广。识别模块包括拍摄照片,并识别昆虫。视频模块包括昆虫相关介绍视频,视频下方可以发表评论进行相关讨论。图鉴模块包括为用户提供诸多昆虫的图像信息。昆虫数据模块包括查询具体的知识与昆虫图集下载。
三层开发架构通常都具备比较好的系统性能和效率,它通过中间件实现对数据的访问,中间件则是一个独立的组件,可以根据需求选择合适的中间件组件。
架构设计所有的业务流程都是在系统上层中实现,这就降低了另外两个层次对于数据的处理压力,可以更好的专注在当前层功能实现上。APP架构的交互图如图2所示。
图像识别部分,在基于机器学习的智能昆虫分目识别算法应用的文章中已做过论证与说明,在此不再赘述。
1.2 动态配置设计
设计过程中发现客户端大量的硬编码导致其灵活性大大降低,例如一些细小的改动只能通过发布版本解决。就用户升级更新迭代速度慢,时效性差等原因,需要考虑APP的动态化配置设计。
实际中客户端和服务端保持一个长链的连接,当在后台操作配置时,会把这个配置以K/V形式存储,随后通知Processor,后者拿到K/V之后把它推给客户端,整个过程完毕。长链只能保证客户端在线时能第一时间拿到配置中心的值,处于离线状态(例如:用户未打开APP)时就无效了,因此需要想办法使得用户下一次打开APP时可以拿到最新的值,于是设计在保存K/V时,额外存一个flag字段,用来表示这个K/V是否已经成功发送给客户端。
至此就要考虑三个问题:存储、流量和同步策略。
通常一个设备的K/V对不会超过100项,每对Size不超过1 K,也就是一台设备对应的大小上限为100 K左右,假如设备数为100万,就需要100 G的磁盘空间,所占存储空间是巨大的。考虑到一些配置项会在多个设备共存,便可以把这些配置单独存储,将hash值作为Value。假设Key的size为30字节,Value为10字节,这样就减少到40M的K/V存储空间。然而这样的设计又暴露出新问题,Value的组合会很多,例如原来K1的Value为V1,更新之后变成V2,显然需要新建一组Value,将其中的V1变为V2,而因为不知道之前的一组Value是否还有其他设备在引用就只能保存,这样就会使得Value逐渐累积下去,要降低这种累积就需要设计清除算法。为了能够降低复杂度,故引入索引,当某个Key如果有新的Value,只需在对应的Key后面append即可。此时需要同步更新设备的索引,持久化可以异步进行。
模拟单个设备的量可以达到100 K,如果每次配置有更新就发送100 K的数据这对到达率会有一定影响,尤其在设备网络情况不佳的情况下。因此这里的目标是如何减少数据传输量,同时尽量避免提升复杂度。直接的方法是对数据进行压缩,实际结果证实这是比较简单同时效果也不错的方法。
2 智能昆虫识别APP实现
为实现低维护成本,服务可快速迁移的设计要求开发选用微服务技术。在服务构件过程中应用微服务来构建整体的业务领域组件。其基本思想在于考虑围绕着业务领域组件来创建应用,这些应用可独立地进行开发、管理和加速。因为微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。通过这一点系统就可以将服务公开与微服务架构区分开来。因为在服务公开中,许多服务都可以被内部独立进程所限制,若其中一个服务需要增加某种功能,那么就必须缩小进程范围。而在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程。
APP中各类服务的部署应用了Docker容器来实现,它整合了框架中各个部分功能。根据整个功能的划分,系统主要包含了三个模块:数据生成模塊、识别模块、存储模块[4-9]。
各个模块之间会存在服务的抢占,这就会使得各个功能并发能力存在较大的问题,由此分离了主、备数据库、缓存服务等。在具体服务生成中在采用Docker容器和Spring Boot来实现算法框架并将其整合,这样可以达到轻量级单元部署,易于维护。
在完成智能识别服务后,将识别出来的昆虫图像结果传递给用户。结果生成中运用JSON格式来进行,其中JSON格式来使用服务模型服务的来回调用,并将其展示在客户端中。由于JSON格式具备非常好的拓展性,可以在后期修改需求时实现属性的快速增加。即使是较为复杂的格式形式或色彩较为复杂的图像,JSON格式也能压缩图像像素,这就可以节约接口的回调时间。具体的功能实现如图3图4所示。
3 结论
软件实现对用户所拍摄的昆虫图片进行识别,并让用户便捷快速的获取昆虫相关的知识。应用Docker容器来实现微服务,不仅可以提升识别效率,还可以提升APP访问后台服务器的速度。通过APP的动态化配置中心,它可以将配置,功能,界面,数据等各种配置数据统一进行管理下发,实时生效,极大地提升了客户端的灵活性。
参考文献
[1] 穆文秀, 洪蕾, 王瀚. 基于机器学习的智能昆虫分目识别算法应用[J]. 数字技术与应用, 2018, 36(11): 118-119.
[2] 罗桂兰, 杨自忠, 张梅, 等. 洱海湿地昆虫智能识别与实时监测系统[J]. 大理大学学报, 2018, 3(6): 6-12.
[3] 李小林, 周蓬勃, 周明全, 等. 基于可区分二进制局部模式特征的蛾类昆虫识别[J]. 计算机应用与软件, 2016, 33(3): 172-175.
[4] 黄世国. 基于图像的昆虫识别关键技术研究[D]. 西北大学, 2008.
[5] 姚青, 吕军, 杨保军, 等. 基于图像的昆虫自动识别与计数研究进展[J]. 中国农业科学, 2011, 44(14): 2886-2899.
[6] 周红, 王宏坡, ZHOUHong, 等. 基于VisualC++.NET的昆虫图像自动识别系统的研究[J]. 天津农学院学报, 2005, 12(2): 39-41.
[7] 杨光. 国内首款昆虫识别软件研发成功[J]. 农药市场信息, 641(2): 16.
[8] 张永玲, 姜梦洲, 俞佩仕, 等. 基于多特征融合和稀疏表示的农业害虫图像识别方法[J]. 中国农业科学, v.51(11): 67-76.
[9] 韩瑞珍. 基于机器视觉的农田害虫快速检测与识别研究[D]. 浙江大学, 2014.