基于深度学习的鸟类识别系统的设计与开发

摘要:对于鸟类种类的分类一直都是一个棘手的问题,他对人类和计算机视觉能力都有更高的要求。本课题基于Tensorflow平台的InceptionV3模型实现了鸟类识别系统的设计和实现。用Google大神开发好的神经网络模型对包含200中鸟类1788张图片的CUB_200_2011图像库进行训练。将训练好的鸟类特征模型封装成鸟类分类器,将结果通过ajax返回给用户界面,再由数据库完成与安卓系统的对接,实现在移动端多用户访问的鸟类图形分类器。系统经测试,可以完成对200中鸟类的识别率达到90%左右的精确度。

  关键词:Tensorflow;inception v3;图像识别;迁移学习;鸟类识别;安卓软件

  1绪论

  1.1选题背景

由于网络的持续发展和存储技术的日益强大,可以提供给人们使用的各个种类的信息量也在极速的增长当中。在图像领域中,很多图像数据集的出现,能否在面对巨大图像库的时候,都能够提取出当下图片的信息,并根据提取出的特征进行分类[1],成为人们关注与研究的方向。

传统的图像识别技术是基于特征的检测与分类,它需要大量的人工对图像进行注解,然后再进行图像的识别工作。迁移学习[1]就是将训练模型的参数转移到新模型,以帮助新模型的训练。我们认为大多数的数据或任务都是相关的,因此通过迁移学习,我们可以以某种方式共享我们与新模型学习的模型参数,以提高和优化模型的学习效率,而不是像大部分网络那样从零学习。迁移学习是机器学习领域的一个非常重要的组成部分,它可以用于文本的分类、定位处理、视频的监控等等领域。基于深度学习的发展,大部分研究人员都开始使用深度神经网络来实现迁移学习。

我选用的Inception v3[2]模型是通过大量的图像训练与深度学习从而达到精确识别图片的类型等信息的。由于我们样本的不同、训练方式的不同,最后生成的训练模型也是不一样的。

在鸟类分类方面,地球上鸟的种类繁多、分布广泛,目前全世界已知鸟的种类将近1万多种,分布在我国的已知鸟类也有1300多种。传统的分类方法不但工作强度大、时间周期长,而且很难在各位鸟类研究者之间进行数据共享,极大地阻碍了鸟类分类学的发展。

鸟类种类的分类是一个难题,使人类和计算机的视觉能力受到限制。鸟类分类和系统发育宏观领域的研究 , 主要集中在鸟体外部及内部解剖形态特征上的研究。随着生物数学的发展及计算机的广泛应用 , 传统分类完成了向数值分类及支序分类的过渡。在分类细则方面,尽管不同的鸟类具有相同的基本组成部分,但不同的鸟类在形状和外观上可能会发生巨大变化(例如,考虑鹈鹕vs.麻雀)。同时,即使是专业的观鸟者,其他鸟类对几乎在视觉上也无法区分(例如许多麻雀在视觉上是相似的)。由于光照和背景的变化以及姿势的极端变化(例如,被树枝部分遮挡的飞鸟,游泳鸟和栖息的鸟),类内差异很大。[3]

到目前为止,我希望培养一定水平的研究深度,以供行人和人脸等少数特定类别使用。从后勤和计算的角度来看,专注于鸟类将有助于使研究更易于处理。同时,我认为许多经验教训(就注释程序,定位模型,特征表示和学习算法而言)将推广到其他领域,例如不同类型的动物,植物或物体。

 1.2选题意义

当今世界,科技发展日新月异,科技和人们的生活紧密结合,人们也越来越依赖科技。图像识别已日渐成为研究热点,随着科研人员的不断努力,该技术已广泛应用到我们生活中的各个方面。图像识别这个概念简而言之就是我们利用计算机中的相关技术提取图像的某些特征,然后再进行数据的处理和分析,去识别用户所提供的目标图像的技术。近些年以来,图像识别的技术走向成熟,关于它的相关技术也开始在很大的领域里面盛行。我们可以通过计算机高速的计算能力来解决这些领域中的技术难题。在鸟类研究方面,经常需要对一些鸟类的品种进行识别,分类,然后再进行相应的处理。[5]其中单独分类这一项工作就需要在专业技术人员的指导下才能够完成,这种传统的方式不仅浪费人力,财力,而且效率也十分不理想,因此开发出一套能够自动识别出鸟类种类的系统,就能解决上述问题,提高工作效率。

系统整体结构设计本系统的主要目标为了让系统的使用者能轻松地利用本系统对我国的鸟类进行分类显示、分类检索和分类鉴定,并能不断地根据最新研究成果对系统中的我国鸟类数据进行及时更新和修定。用户可直接访问专家数据库[6]以判定个体从属的种类。此鉴别系统在为用户提供方便准确的物种鉴别手段的同时,也为分类学家提供了一个获取大量信息的平台。

本设计基于谷歌开发的inceptionv3[7]模型,利用卷积深度学习[8]的概念开发了一个关于特征检测达到鸟类识别的系统,是一个实用型的设计。学生通过本设计过程,可以对卷积神经网络有更加全面的理解,对特征检测与提取有了一定的掌握,所学的Python[9]、java、安卓等知识进行整理及实际运用;通过对设计文档的撰写,可提高文档整理及编辑能力;在完成设计的过程中,可提高学生的信息检索能力。

1.3主要工作

本系统是实现基于Inception v3的鸟类识别系统的设计与实现,主要工作内容如下:

(1) 前期的相关的准备工作,根据这次我们要一步步探索的课题,制定了论文所需要的知识的结构。对于这个课题,我们要深入的探索目前机器学习的原理以及它发展的现状等多个方面。研究机器学习在移动开发中当中的应用。

(2) 中期的设计工作,详细的整理以及充分的阅读与分析论文和技术资料,再加上自己的观点,去设计系统所合适的方案,再去分析设计的方案是否是具有可行性的。依据我们设计的方法去制作系统,系统中有PC端、移动端两大部分。第一个部分是PC端,主要是通过Python语言借助Inception v3模型进行图片训练,获得训练结果文件,安装小型网页服务器将训练文件封装成鸟类分类器,同时城建mysql数据库对用户的行为进行记录;第二个部分是移动端,安卓端调用网络接口,使安卓端可直接调用结果文件进行鸟类的识别并返回行为记录给mysql数据库。

(3) PC端工作:PC端包括训练图片的整理与标注、Python和Keras的安装和使用、编写神经网络、进行数据的训练、tornado网站服务器的使用、编写go.py文件进行测试、训练结果文件的适配性修改、Mysql数据库的创建与使用。

(4)移动端工作:APP的基本架构设计、对Mysql数据库的整合等。PC端编写model.py脚本文件,移动端用Java[4]语言编写移动端APP。

(5) 测试系统。相关功能实现之后,对整个系统进行测试,如果所有的功能都能够正常的运行与使用,同时达到了用户的要求,就算作成功的完成了;如果有问题出现或者相应的功能不满足实际的话,就应该及时的修改并且改良系统。

(6) 撰写系统相关文档。文档应该包括这个系统的功能以及对应的技术,必须做到最大程度的让用户了解整个系统。

 1.4 论文结构

该文档一共有七个部分的内容。

第一章是绪论,其中有选题的背景、选题的意义、主要的工作实施和论文的结构四个小部分;

第二章是用到的技术的简介,其中有Inception v3模型的介绍,Python、Java语言的介绍以及Tensorflow、Python 3.6、Mysql与Android studio四个软件的相应介绍。

第三章是系统的设计,其中有系统的训练流程与系统的相关功能模块。

第四章是训练模型的实现,包括环境搭建、训练样本准备、模型搭建、训练模型、测试模型。

第五章是移动端界面设计与功能实现。

第六章是实现结果及测试,主要包括训练模型的结果、移动端的登陆与注册功能的测试结果、识别功能的测试结果、查询功能的测试结果、显示功能的测试结果、设置功能的测试结果。

第七章是总结与展望。

 2 相关技术介绍

在本系统中,主要使用了Inception v3模型,Python3.6软件、Mysql数据库、Androidstudio软件与Tensorflow软件,Python、Java语言。其中,Inceptionv3模型主要是进行图像的训练,而相关控制代码语言为Python,其编写是由Python3.6软件完成的。移动端主要由Java编写。具体介绍如下所述。

 2.1Inception v3模型

Inceptionv3是由谷歌开发的一个相对比较深的卷积网络,卷积[5]的意思就是神经网络要对图片上的每一个小块的像素区要进行加权,这样我们就不用去处理每一个像素的输入信息了。其中的小面积称为局部的感受野,面积的权值称为卷积核。对图像进行卷积的运算之后,再在上面加上偏置值之后,再用相应的激励函数处理就可以得出图像的特征图。这样我们就可以轻易的提取出了图像的特征值。卷积大大的加强了图片所具有信息的连续性,进一步加深了神经网络对于图片的理解。在这种情况下,主要的一些网络结构都是使网络的层数更深从而达到突破的效果,但是这样做的话势必会出现参数太多的情况,计算的复杂度也进一步增大,导致其应用很困难。同时网络越深的话,它会出现随着梯度往后穿越也会越来越容易消失,模型就会得不到更好的优化。这个时候Inceptionv3就完成了在其有限的内存与计算能力的情况下用相对合理的成本来处理较大的数据的任务,它是基于大型的图像数据库imageNet中的数据训练而成的结果,可代替人工确定卷积层中的过滤器类型或者确定是否需要创建卷积层和池化层。因此,我们可以直接利用Google的Inception模型来实现图像分类。其网络结构如表2-1所示。

表2-1 Inception v3模型的网络结构表

Type path size/stride or remarks input size
Conv

conv

conv padded

pool

conv

conv

conv

3×Inception

5×Inception

2×Inception

pool

linear

softmax

3×3/2

3×3/1

3×3/1

3×3/2

3×3/1

3×3/2

3×3/1

As in figure 5

As in figure 6

As in figure7

8×8

Logits

classifier

299×299×3

149×149×32

147×177×32

147×147×64

73×73×64

71×71×80

35×35×192

35×35×288

17×17×768

8×8×1280

8×8×2048

1×1×2048

1×1×1000

 2.2 PyCharm软件

PyCharm是一款Python IDE,具有一般IDE具备的功能,包括语法的高亮、Project的管理、代码的跳转、提示功能、测试功能……它还具有一部分的功能用于Django的开发,并且支持Google App Engine与IronPython。IDE主要作用在于对项目依赖的集成,程序编写的良好体验,更有优势的BUG调试,直观的项目感受。

2.3 Android studio软件

Android Studio是由谷歌开发的用于安卓开发的工具,它提供了所需要的开发与调试功能。其主要功能包括项目的运行调试、虚拟设备的管理;工程文件目录的显示;代码的编写以及系统的布局设计功能。其功能模块如图2-2所示。

基于深度学习的鸟类识别系统的设计与开发

图2-2功能模块图

 2.4Keras软件

Keras是用Python编写的高级神经网络API,能够在TensorFlow,CNTK或Theano之上运行。它的开发着眼于实现快速实验。能够以最小的延迟将想法付诸实践是进行良好研究的关键。

  2.5Mysql数据库

Mysql数据库相较与Android自带的Sqlite数据库,它的优势在于独立于程序存在,用户通过数据库的守护进程同数据库进行交互,可以满足我们需要的同时多用户登陆设计,而只能存在于本地的Sqlite无法胜任这样的职责。

 2.6Python语言

Python是属于面向对象的编程语言。Python 的源代码也在GNU通用公共许可证下获得了认可。Python 的设计可读性很强,而且它的句法结构比其他使用英文关键字更频繁的语言和其他语言中的一些标点符号更为独特。Python 是一个高级脚本语言,它结合了可解释性、交互性和面向对象性。Python的关键字是相对而言比较少的,简单的结构和定义明确的语法,使学习更加的容易。Python代码的定义更加清楚明白。Python丰富的库是它最大的一个优势,具有很好的兼容性。我们可以通过从终端输入执行代码然后并得到语言的结果。互动模式的支持,可以从终端输入执行代码并获得结果的语言。 Python可以被移植到不同的平台在于它的代码是开放的。

 2.7 Java语言

Java是一个广泛使用的网络编程语言 ,它是一种新的计算概念。首先 ,作为一种程序设计语言 ,它简单、面向对象、不依赖于机器的结构、具有可移植性、鲁棒性、安全性、并且提供了并发的机制、具有很高的性能。其次 ,它最大限度地利用了网络 ,Java的小应用程序 (applet)可在网络上传输而不受 CPU和环境的限制。另外 ,Java还提供了丰富的类库 ,使程序设计者可以很方便地建立自己的系统。

3系统设计

系统设计分为两部分,系统训练流程和系统功能模块,系统功能模块主要介绍该系统所具有的功能,系统训练流程主要介绍实现该系统识别功能所进行的操作。

 3.1系统功能模块

该安卓系统可以分为5个模块,分别为主界面模块,登录、注册模块,拍照识别模块,查询记录模块,显示数据模块。主界面模块主要是功能模块划分,包括鸟类的识别、当前用户识别信息记录的查询、所有用户识别记录的显示、密码的设置、测试与查询记录和数据的清空,主界面由5个Button与1个Text构成,5个Button分别对应着5个相应的功能模块界面,即单击识别按钮即可跳转到识别界面,单击查询按钮即可跳转到查询界面。系统功能结构如下图3-1所示。

基于深度学习的鸟类识别系统的设计与开发

图3-1系统功能模块图

 3.2 模型训练流程

系统训练实现方法:编写model.py脚本文件,对收集的图集进行清洗,标记已整理好的图片,放入模型神经网络中进行训练,可得到结果模型文件,评估模型文件的准确度,再将训练精准后的结果文件分装在在一个小型服务器,由安卓用户端调用,再进行系统的界面设计与功能实现,即可完成系统的设计与开发。系统训练流程图如图3-2所示。

基于深度学习的鸟类识别系统的设计与开发

图 3-2系统的流程图

 4 图片分类器实现

分类器的实现一共分为五个部分,分别为环境搭建,训练样本的采集,训练模型的搭建,训练模型,评估模型五部分组成。我们在下载好相应软件与配置好所需环境之后,就可以开始对Inceptionv3模型进行训练,通过对模型的相应训练,可以满足我们所需的图像识别功能。该过程我们需要准备我们所需要的训练数据集,即为图像库,然后搭建我们所需要使用的Inceptionv3模型,编写代码调用InceptionV3模型,用此模型去训练数据集,最后去评估该模型性能准确度。具体的实现过程如下所述。

 4.1环境搭建

由于实现图片分类器,我们开始开发和设计系统前,需安装搭建好我们需要的开发环境。该部分内容包括Python、Tensorflow的安装以及Androidstudio、Pycharm软件的安装。下面主要介绍相应的环境搭建步骤。

4.1.1安装Python环境

从官网下载与系统位数相同的Python3.6版本并进行安装

基于深度学习的鸟类识别系统的设计与开发

图4-1安装python软件图

4.1.2 Keras的安装

创建好Python3.6的环境,用来安装Keras,在命令行启动刚刚配置好的Keras环境:activate Keras接下来就在这个环境中安装Keras,使用命令pip3install –upgrade keras,如图4-4所示。等安装过程完成后测试一下:打开命令行编辑器,输入import keras,没有报错信息,则安装完成,安装成功如图4-5所示。

基于深度学习的鸟类识别系统的设计与开发

 4.1.3Model.py的编写

完成环境搭建后,对于Model.py 的编写,首先是对训练样本进行训练,我们需要创建鸟类品种标签,编写迭代器读取图片数据集,建立样本模型,将数据集载入模型,对模型进行训练,生成训练后的模型,对模型进行评估,测出准确度。在编写图像分类方法接口,对载入到的图片进行分类并返回测出相似度最高的前几位结果供程序调用。核心代码如下:

# img.show()

img = misc.imresize(np.array(cropImg), (target_size[0], target_size[1], 3))

img = np.array([1 – img.astype(float) / 255])

predict = self.model.predict(img)

index = predict.argmax()

print(“CNN预测”,index)

target = target_name[index]

index2 = np.argsort(predict)[0][-2]

target2 = target_name[index2]

index3 = np.argsort(predict)[0][-3]

target3 = target_name[index3]

index4 = np.argsort(predict)[0][-4]

target4 = target_name[index4]

index5 = np.argsort(predict)[0][-5]

target5 = target_name[index5]

return {“target”: target, “predict”: “%.2f” % (float(list(predict)[0][index]/sum(list(predict)[0])) * 100),

“target2”: target2,

“predict2”: “%.2f” % (float(list(predict)[0][index2]/sum(list(predict)[0])) * 100),

“target3”: target3,

“predict3”: “%.2f” % (float(list(predict)[0][index3]/sum(list(predict)[0])) * 100),

“target4”: target4,

“predict4”: “%.2f” % (float(list(predict)[0][index4]/sum(list(predict)[0])) * 100),

“target5”: target5,

“predict5”: “%.2f” % (float(list(predict)[0][index5]/sum(list(predict)[0])) * 100),

}

4.2训练样本准备

本系统需要准备大量数据库文件作为样本进行训练,由于鸟类种类众多,我选用了有两百种鸟类,每种鸟类有60张左右图片的数据集进行训练,包含共计11788张鸟类图片。将图片分类标记好,同时包含来时世界各地的各种各样,形态各异的鸟类。

基于深度学习的鸟类识别系统的设计与开发

图4-6样例训练样本图

  4.3训练模型搭建

首先我们需要加载骨架模型,这里用的InceptionV3模型,其两个参数比较重要,一个是weights,如果是’imagenet’,Keras就会自动下载已经在ImageNet上训练好的参数,如果是None,系统会通过随机的方式初始化参数,目前该参数只有这两个选择。另一个参数是include_top,如果是True,输出是1000个节点的全连接层。如果是False,会去掉顶层,输出一个8 * 8 * 2048的张量。

一般我们做迁移训练,都是要去掉顶层,后面接上各种自定义的其它新层。这已经成为了训练新任务惯用的套路。最后是一个200个节点的输出层,用softmax激活函数。

代码如下:

def build(self):

“””建立模型 模型样式如下”””

img_size = (target_size[0], target_size[1],3) # 全体图片都resize成这个尺寸

input_image = Input(shape=img_size)

base_model = InceptionV3(input_tensor=input_image, weights=’imagenet’, include_top=False, pooling=’avg’ )

outputs = Dense(200, activation=’softmax’)(base_model.output)

self.model = Model(inputs=input_image, outputs=outputs)

self.model.compile(optimizer=’adam’, loss=’categorical_crossentropy’, metrics=[‘accuracy’])

return self.model

 4.4训练模型与测试模型

定义完模型后,我们需要对模型进行训练、评估及预测。对于模型训练,我们每次训练的批数为1,共迭代100次。当前迭代次数由初始化参数读取到。

核心代码如下:

def train(self):

print(“开始训练模型….”)

history = self.model.fit_generator(sequence_data, steps_per_epoch=steps, epochs=40, verbose=1,

max_queue_size=45, workers=2,

initial_epoch=31,

callbacks=[TensorBoard(log_dir=’.\\logs\\’)],# 设置日志存放目录

)

self.model.save_weights(“InceptionV3.model”) ## 保存模型权重

self.model.save(‘InceptionV3.h5’)

with open(‘InceptionV3.json’, ‘w’) as f:

f.write(self.model.to_json()) ## 保存模型网络

return history

我们将模型搭建与训练完成后,需要对模型进行测试。为了对模型有个评估,感知模型的表现,需要输出该DNN模型的损失函数的值以及在测试集上的准确率.其Python代码如下(接以上代码):

def evaluate(self): ##测试计算准确率

score = self.model.evaluate(sequence_test_data, verbose=0)

print(‘测试 正确率:’, score) ##正确率

 5系统实现

  5.1 服务端

服务端主要工作安排在PC端对前端用户界面提供数据支持或者程序控制。

 5.1.1创建Mysql数据库

我们进行系统设计时,需要建立属于自己的数据库,来存放相应的数据,由于需要满足多用户之间切换,且需要与web服务器交互的特点,介于Android自带的Sqlite数据库值可以在本地进行数据交互,无法满足我们的需求,这里我们采用Mysql数据库。新建数据库,库名bird_identification_app;创建表,我们需要存放账户信息、日期时间、用户与密码、识别结果与识别概率。所以我们创建了两张表,一张user表和一张data表;user表包含字段id、account、password与isonline;data表包含字段id、account、time、result_1_name、result_1_rate。

 5.1.2 创建web服务器

我们将图片分类器放置在web容器中,这样便可以满足多用户同时对服务器进行访问。在PC端编写一个web容器,以post的方式将图片上传到web服务器进行加载,实现图片分类。我们选用的是tornado轻便型的web服务器,足以满足我们的需求。在开始使用系统程序前,需要在pc端开启web服务器,手机连接至和pc同一局域网即可访问web服务。

核心代码如下:

class MainHandler(tornado.web.RequestHandler):

def get(self):

self.render(“index.html”)

def post(self):

img = Image.open(BytesIO(self.request.files[‘image’][0][‘body’]))

img = img

b_img = Image.new(‘RGB’, (500,500),(255,255,255))

size = img.size

if size[0]>=size[1]:

rate = 500/size[0]

new_size = (500,int(size[1]*rate))

img = img.resize(new_size, Image.ANTIALIAS).convert(“RGB”)

b_img.paste(img, (0,random.randint(0,500-new_size[1])))

else:

rate = 500 /size[1]

new_size = (int(size[0]*rate),500)

img = img.resize(new_size, Image.ANTIALIAS).convert(“RGB”)

b_img.paste(img, (random.randint(0,500-new_size[0]),0))

data = Model.orc_img(b_img)

self.write(json.dumps(

{“code”: 200, “data”: data

}))

def make_app():

template_path = “templates/”

static_path = “./static/”

return tornado.web.Application([

(r”/”, MainHandler),

], template_path=template_path, static_path=static_path, debug=True)

 5.2 用户端

用户端即用户界面,需要制作的主要包含两个重要组成部分:安卓软件用户界面和网页前端的用户界面 。

 5.2.1网页前端界面的编写

前端主要作用是给用户很好的使用体验,我选用bootstrap样式框架对界面进行编辑,包含使用ajax对图片分类器进行控制。

核心代码如下:

$(“button”).click(function () {

$(“.justify-content-center”).addClass(“d-flex”).show();

console.log($(“#predict-body>div”));

$(“#predict-body”).html(‘ ‘);

$.ajax({

type: “post”,

data: new FormData($(‘#predict’)[0]),

cache: false,

dataType:”json”,

processData: false,

contentType: false,

success: function (ret) {

$(“.justify-content-center”).removeClass(“d-flex”).hide();

$(“#predict-body”).html(

`<h3>${ret.data.predict}的可能性是:${ret.data.target} </h3>

<br>

<br>

<h3>${ret.data.predict2}的可能性是:${ret.data.target2} </h3>

<br>

<br>

<h3>${ret.data.predict3}的可能性是:${ret.data.target3} </h3>

<br>

<br>

<h3>${ret.data.predict4}的可能性是:${ret.data.target4} </h3>

<br>

<br>

<h3>${ret.data.predict5}的可能性是:${ret.data.target5} </h3>

<br>

<br>

)

console.log(ret)

},error:function (rel) {

alert(“请先选择图片”)

}

})

});

基于深度学习的鸟类识别系统的设计与开发

 

图5-1 前端页面图

 5.2.2 安卓客户端主界面的编写

主用户端界面:主用户端界面为用户主要功能界面,使用线性布局,包括1个TextView,5个Botton,主要功能是对每个模块的跳转。Botton包括开始识别、查询个人历史记录、查询所有人的历史记录、清除所有本人的查询记录与退出登录功能。点击按钮实现功能跳转,调用其他模块的功能。效果图如图5-1所示,核心代码:

/**

* 清除当前用户所有记录

*/

findViewById(R.id.clear).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// 创建一个线程来连接数据库并获取数据库中对应表的数据

new Thread(new Runnable() {

@Override

public void run() {

Boolean result = DBUtils.clean(account);

if (!result){

Looper.prepare();

Toast toast = Toast.makeText(context,”清除数据成功!”,Toast.LENGTH_SHORT);

toast.show();

Looper.loop();

}

}

}).start();

}

});

/**

* 退出当前用户返回登录界面

*/

findViewById(R.id.quit).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// 创建一个线程来连接数据库并获取数据库中对应表的数据

new Thread(new Runnable() {

@Override

public void run() {

DBUtils.quit(account);

Intent intent = new Intent(context, MainActivity.class);

startActivity(intent);

Looper.prepare();

Toast.makeText(context, “退出登录成功!”, Toast.LENGTH_SHORT).show();

Looper.loop();

}

}).start();

}

});

}

/**

* 跳转到识别网页

*/

public void recognition(View view) {

Uri uri = Uri.parse(“http://192.168.3.3:8000”);

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

}

/** 跳转到查询界面 **/

public void query(View view){

Intent intent = new Intent(this, Main3Activity.class);

intent.putExtra(“account”,account);

startActivity(intent);

}

/** 跳转到分析界面 **/

public void analyze(View view){

Intent intent = new Intent(this, Main4Activity.class);

startActivity(intent);

}

基于深度学习的鸟类识别系统的设计与开发

图5-1主界面图

5.2.3登录、注册功能模块

系统包括用户登录注册功能,整个界面含有2个TextView、2个Edittext和2个Botton。用户在账户后面的Edittext中输入想要进行登录或者注册的用户名,同时在密码后的Edittext中输入想要输入的密码,接着点击登录或者注册按钮,从而实现登录或者注册功能。介于用户比较小众,没有设置账户密码的格式。如果登录时,输入的账号密码与数据库中的比对不正确就会报出密码错误提示。注册、登录界面如图5-2所示,注册成功如图5-3所示。

基于深度学习的鸟类识别系统的设计与开发

 

图5-2 登录注册界面图 图5-3 注册成功图

 5.2.4 查询记录功能

为了用户可以查询到以前自己对鸟类图片识别的记录,该界面拥有一个TextView,主要是与数据库建立JDBC连接,从数据库中读取到当前用户查询的记录,这个页面主要显示当前用户查询鸟类名称,相似概率,和查询操作的时间。效果图如图5-4,核心代码如下

public static String record(String account) {

String str = “”;

Connection conn = getConn(“bird_identification_app”);

if (conn == null) {

Log.i(TAG, “register:conn is null”);

return null;

} else {

//进行数据库操作

String sql = “select * from data where account = ?”;

try {

PreparedStatement pre = conn.prepareStatement(sql);

pre.setString(1, account.trim());

ResultSet rs = pre.executeQuery();

while (rs.next()) {

String name = rs.getString(2);

String gender = rs.getString(3);

String result_name = rs.getString(4);

String result_rate = rs.getString(5);

str += (” 用户:” + name + ” 查询时间:” + gender + “查询结果:” + result_name + “相似概率:” + result_rate + “\n”);

}

return str;

} catch (Exception e) {

e.printStackTrace();

return “sss”;

} finally {

try {

conn.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

基于深度学习的鸟类识别系统的设计与开发

图5-4 查询界面图

5.2.5 显示所有用户数据

由于我们是多用户系统,该功能可以为我们显示所有用户进行鸟类识别的结果,供当前用户使用,可以知晓不同用户的查询记录进行分析。该界面有一个Textview组成,效果图如下图5-5所示。

基于深度学习的鸟类识别系统的设计与开发

图5-5 记录显示界面图

6实现结果与测试

测试结果主要是对鸟类分类识别器这一功能进行的测试。实现的结果如下图6-1。

基于深度学习的鸟类识别系统的设计与开发

图6-1 实现结果图

在我对大量的图片进行测试相似度的时候,我发现结果的精准度都高过百分之八十,相似度最高的结果均为正确的品种。

 7总结与展望

在经过千辛万苦以后,我终于完成了对于该项目的开发,由于本身有一定的Python开发基础,这次更是去了解了机器学习中深度学习的原理与知识,了解迁徙学习的用法,所以对选择的这样一个题目的设计还是很高兴的完成啦。这个题目有几个难点,一是在于Python深度学习神经网络的理解,我查阅了不少的资料,最终还在前辈的指导下搞定;二是想把keras的模型与安卓结合,还有一种可以转化成tensorflow的输出模型再与安卓结合,在在发中不断地创造与发现问题,从中不停汲取新的知识,是非常让人快乐的过程。介于时间紧迫,资源有限,最终我还是选择通过直接访问网页请求与安卓结合,其实可以做得更好。

该系统虽然很简单,我还有很多不完美的地方没有去完善,希望以后有更好的功能可以添加进去,使系统更加完善!

 参考文献

[1]张家伟,郑扬飞.基于迁移学习的人脸种群识别技术研究[J].信息技术,2019,43(04):77-81

[2]张皓洋. 基于Inception-v3模型的蛇类图像识别[J]. 电子技术与软件工程, 2019, 156(10):74-77.

[3]张淑霞, 杨岚, 杨君兴. 近代鸟类分类与系统发育研究进展[J]. 动物分类学报, 2004, 29(4):675-682.

[4]Wah C., Branson S., Welinder P., Perona P., Belongie S. “The Caltech-UCSD Birds-200-2011 Dataset.” Computation & Neural Systems Technical Report, CNS-TR-2011-001

  致谢

从去年选择不参加毕业论文答辩开始,又一年时间度过,这其中有很多自己做的选择,做了很多没有尝试过做的事情,现在完成了毕业设计这一大难题,但什么时候人会不困难呢,人就是在克服着困难前进的哇!一坡之后又是一条河,通过不断地努力,在指导老师的安排下克服解决设计中各种各样问题。从设计的选题到资料的搜集直至最后设计的修改的整个过程中,花费了老师很多的宝贵时间和精力,在此向老师表示衷心地感谢!

基于深度学习的鸟类识别系统的设计与开发

基于深度学习的鸟类识别系统的设计与开发

价格 ¥9.90 发布时间 2023年5月1日
已付费?登录刷新
下载提示:

1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。

2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。

3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。

原创文章,作者:1158,如若转载,请注明出处:https://www.447766.cn/chachong/133347.html,

Like (0)
1158的头像1158编辑
Previous 2023年5月1日
Next 2023年5月1日

相关推荐

My title page contents