基于深度学习DenseNet121模型中药智能识别系统(源代码+lw+环境配置+说明文档+数据集)
(2)在没有人为的干预下,传统的识别算法往往不能自动地从原始图像中提取有用的识别特征,而且当面对大数据的情况下,传统方法往往展现出自身存在的不足和困难。本功能是开放式的,无需登录注册,方便让更多的人去操作和使用,网页前端页面也很简洁易懂,在运行主程序后,在浏览器中输入运行程序生成的网页网址,进入智能中药识别Web应用,在点击选择文件后,可以选择本地的相关图片,在选择图片后,可以在网页看到选择的图片
!!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!!
💕💕作者:优创学社
💕💕个人简介:本人在读博士研究生,拥有多年程序开发经验,辅导过上万人毕业设计,支持各类专业;如果需要论文、毕设辅导,程序定制可以联系作者
💕💕各类成品java系统 。javaweb,ssh,ssm,springboot等等项目框架,源码丰富,欢迎咨询交流。学习资料、程序开发、技术解答、代码讲解、源码部署,需要请看文末联系方式。
中药智能识别系统
目录
1.研究现状与创新点
1.1研究现状
随着智能信息时代的来临,深度学习应运而生。深度学习作为机器学习的一个分支,旨在模拟人类的神经网络系统构建深度人工神经网络;对输入的数据进行分析和解释,将数据的底层特征组合成抽象的高层特征,其在计算机视觉、自然语言处理等人工智能领域发挥了不可替代的作用。作为深度学习的典型代表,深度卷积神经网络在计算机视觉任务中大放异彩,与人工提取特征的传统图像分类算法相比,卷积神经网络使用卷积操作对输入图像进行特征提取,有效地从大量样本中学习特征表达,模型泛化能力更强。
随着深度学习的发展,VGG、GoogLeNet、ResNet、MobileNet、SENet、CBAM、EfficientNet优秀卷积神经网络模型相继问世,此类深度学习方法使得中药饮片识别有了更为重大的突破。
如2017年,孙鑫等人基于 VGG16网络对中药饮片图像进行识别。他们通过对比传统的中药饮片图像识别方法,发现传统方法在背景较为复杂,或有遮挡的情况下时,测试结果不尽人意。于是他们采用了VGG16网络进行测试,测试了由50种中药饮片制作成的数据集,该数据集图像总数2554张,最终实现70%的平均精度。
2021年,王健庆等人提出了基于GoogLeNet深度学习的中药饮片识别方法。由于中药饮片的生成和调剂过程靠人工监督为主,人眼很难一直劳作,需要通过智能的方法代替人眼。于是他们尝试深度学习的方法对中药饮片进行识别,在100种常见的中药饮片数据集上进行训练,该数据集图像总数8886张,最终实现92%的平均识别精度。
但是传统的中药饮片在实际应用时,对其识别大多依靠专业人员的感官评估和经验判断,该方法效率不高且有误判风险。孙鑫在基于深度卷积网络的中药饮片图像识别中也提出了相似的观点。此外,他认为目前中药饮片识别的研究存在着两个局限性:(1)研究使用的中药饮片均为无背景、单饮片的图像,过于理想化与事实不符(2)在复杂的现实场景和背景下,底层特征是直接取自图片像素而不具有高层语义的特征信息,不能作为可靠的识别特征。此外,中药的种类繁多,且同一类别的中药还有很多子属品种,例如川贝母有炉贝、青贝以及松贝之分,山楂有生山楂、炒山楂、焦山楂以及山楂炭之分。张波等人6提出采用酶联免疫检测法等相关技术对三七、大黄、人参等中药的质量进行快速检测,为中药野生与栽培品的质量检测提供了新方法。倪力军等人7提出通过(近红外)光谱技术与互联网平台,构建一种共享中药样品光谱以及质量检测数据的相关数据库,并通过结合KNN保形映射方法预测了样品的成分含量。但是这些方法存在着准确性欠缺和实际应用较少的问题。
1.2创新点
通过对软件市场中药图像识别类App与智能Web应用的调查,市场上图像识别类APP,包括动物识别、植物识别、人脸识别、商标识别功能的APP很多,发现对中药进行识别以及获得相关的中药信息的App极其稀缺,而仅有的几款中药类识别App需要收费来进行识别功能,目前没有一款公开免费、专门用于中草药识别的App来满足用户日益增长的需求。随着人工智能和图像识别技术的发展,图像识别技术已在类型上被细分,已能满足人们日常的生活需求,但在图像识别类应用的领域,对于中草药进行识别并查询中医药信息的应用程序依旧处于起步阶段。
传统的中药图像的应用中,对其识别大多依靠专业人员的感官评估和经验判断,该方法效率不高且有误判风险。孙鑫在基于深度卷积网络的中药饮片图像识别中也提出了相似的观点。此外,他认为目前中药饮片识别的研究存在着两个局限性:(1)研究使用的中药饮片均为无背景、单饮片的图像,过于理想化与事实不符(2)在复杂的现实场景和背景下,底层特征是直接取自图片像素而不具有高层语义的特征信息,不能作为可靠的识别特征。
除此之外,在目前的图像识别研究中大多是基于传统的机器视觉算法,传统的机器视觉算法存在如下几个问题:(1)传统视觉算法所产生并且使用的特征可以被认为属于浅层特征,而且不能从原始图像中获取更加深入的高语义特征以及其深度特征。(2)在没有人为的干预下,传统的识别算法往往不能自动地从原始图像中提取有用的识别特征,而且当面对大数据的情况下,传统方法往往展现出自身存在的不足和困难。(3)此外传统方法中特征提取主要依赖人工设计的提取器,需要有专业知识及复杂的调参过程,同时每个方法都是针对具体应用,泛化能力及鲁棒性较差。通过使用传统的方法进行图像识别,识别的结果的准确率较低,真实结果与预测结果偏差较大。而深度学习主要是数据驱动进行特征提取,根据大量样本的学习能够得到深层的、数据集特定的特征表示,其对数据集的表达更高效和准确,所提取的抽象特征鲁棒性更强,泛化能力更好,并且可以是端到端的。本系统基于深度学习中的预测准确率极高的DenseNet121模型。它有着以下的优点:①省参数:在ImageNet分类数据集上达到同样的准确率,DenseNet所需的参数量不到ResNet的一半。②省计算:达到ResNet的精度,DenseNet所需的计算量也只有ResNet的一半左右。计算效率在深度学习实际应用中的需求非常强烈,从本次 CVPR 会上大家对模型压缩以及 MobileNet 和 ShuffleNet 这些工作的关注就可以看得出来。③:泛化性能更强,如果没有data augmention,CIFAR-100下,ResNet表现下降很多,DenseNet下降不多,说明DenseNet泛化性能更强。
1.3设计思想
中药智能识别系统将以中药的分类预测为主要实现目标,通过的TensorFlow算法以及Densenet121模型去解决相关的图像问题,运用所学过的一些基础框架开发一个中药智能识别系统。该系统使用了SQLite数据库,可以通过Postman实现用户登录、注册、删、加、改等操作。将训练出来的模型部署在Web端中,用户可以通过Web界面选取并预测中药,并将Web端部署到本地。最后设计了Android端APP,通过访问本地的服务器,可以通过实时拍照或者上传图库中的中药图像,实现随时随地的对中药进行识别以及相关信息的获取。
用户可以通过浏览器向服务器提交待识别的图像,服务器端将预测结返回给用户。实现用户随时随地利用手机APP识别药用植物、药材种类、名称、来源、产地、药用功效和标准图片等信息,这样不仅仅能够弥补中药识别类App在应用市场的空缺,更极大的提高的用户的使用体验,让用户能够便捷、随时随地的对未知中药进行识别并且获取相关的中药信息。
2.系统设计
2.1算法与模型
2.1.1简介
本次设计采用的是TensorFlow算法以及Densenet121模型。首先介绍一下卷积的相关概念。卷积的定义:一个 功能(如刻画你的承受能力)和另一个功能(比如说描述你女友的打脸)在时间的功能(比如说描述你女友的打脸)在时间的维度上的 “叠加”作用。卷积一般分为:一般卷积、扩张卷积、 转置卷积和可分离卷积。卷积的作用是来提取图像特征,生成最后的特征图。这些就是高级的语义信息。
通过比较深度的区分,可以将卷积与常规卷积进行比较,结果表明,当输出的信道是一样的。在普通的卷积中,实际有更多的独立的卷积运算。为改善可分离的深度卷积特性,需要增加通道数量,而增加通道数量则会增大内存。为了平衡两者,采取了一种分类的方式。随着时间的流逝,信道的性能对信道性能的影响会逐渐减弱。另外一个好主意是,先做点 wise卷积,增加信道数量,再进行 Depthwise卷积,这就是所谓的空间可分离卷积。
由于硬件条件限制,综合考虑模型的准确率、大小以及复杂度等因素,采用了Densenet121模型,该模型是121层(包含激活层,批标准化层等)拓扑深度的卷积网络模型。
Densenet121模型包含两个关键结构:一是被称为Densen Block(密集连接模块)的结构;二是被称为Transition Laye的结构。Transition Layer跟在Densen Block结构的后面向前迭代。Transition Layer的目的是避免随着网络层数的增加,特征维度增长过快,故在每个密集连接模块之后,Transition Layer会将特征图的通道数、高度、宽度降维减半。Densenet121结构解析图如图2-1所示。

图2-1 Densenet121的结构解析
Densenet121模型增强了特征传播,鼓励了特征重用,从而减轻了梯度消失的问题。正是由于大量特征被复用,使得卷积核数量降低,大大减少了模型的参数的数量。Densen Block内部包含了6个层级模块,Transition Layer内部包含了1×1卷积和步长为2×2平均池化。
Densenet121模型一共合计共121层。但是的121层只统计卷积层和全连接层,池化层不作为独立层参与计数。Dense Block结构解析图,如图2-2所示。

图2-2 Dense Block结构解析
迁移模型采用了Densenet121基于ImageNet的预训练权重参数,不包含Densenet121的顶层,取而代之的是添加了一个全局平均池化层,在池化层之后连接一个根数据集标签数量定义的Softmax全连接层,实现分类逻辑。本设计采用的自定义的Densenet121模型结构如图2-3所示。模型结构摘要显示,需要学习和训练的参数数量为7016381个。

图2-3 自定义Densenet121模型结构
2.1.2模型概要设计
建模的基本逻辑与子模块划分如图,数据处理与Densenet121模型为主模块之下的两个二级子模块。数据处理包括数据集观察、分类观察、类别分布、数据增强和划分数据集五个三级子模块,Densenet121模型包括模型定义、模型训练、模型评估和模型预测四个三级子模块。模型总设计见图2-4所示。

图2-4 系统模型的总设计
2.1.3Densenet121模型训练
模型结构、优化算法、学习率、训练参数初始化、网络层数、单层神经元数、正则化方法、数据集划分等式模型训练和优化过程中应该关注的重要变量。在模型基本结构参数确定的情况下,学习率往往对模型的训练质量有关键性影响。
在build_lrfn函数中,根据Epoch参数,在模型训练的刚开始会慢慢提升学习率,在模型训练的中期保持学习率,在模型训练的后期学习率逐步衰减。实践证明了,模型结构相对复杂时,学习率相对复杂时,学习率的动态调度策略往往比单纯的学习率衰减策略更为有效。
在的模型的训练过程中,我设置了三个模型调优策略,一是学习率的动态调度;二是模型的提前终止;三是保存最优模型。并且我本次模型一共训练了20代。模型训练过程图见图2-5所示。

图2-5模型训练的过程
模型的评估主要通过三种方式进行:一是根据模型训练过程中准确率曲线或损失函数下降曲线的变化规律对模型进行评价;二是对训练集做抽样观察,以样本实证的方式证明模型的有效性;三是在测试集观察模型预测表现。
在主程序中调用了函数model_estimate函数,从而测试出模型的准确率曲线,如下图2-6所示。
根据训练集和验证集准确率曲线的对比观察,对DenseNet121模型训练结果的初步评价如下:
(1)模型实用性评价。在现有数据集的支持下,训练集准确率超过99%,验证集超过94%,准确率较高,模型达到实用化的程度。
(2)型可靠性评价。从第10个Epoch开始到第20个Epoch结束,模型准确率一直维持在这一水平,准确率具备可靠性。
(3)模型稳定性评价。在第10个Epoch之前,模型准确率上升较快,验证集有波动,可能是因为数据集样本总量偏低,训练集上的统计特征,与验证集有较大差异,但是随着迭代次数增加,从第10个Epoch开始,模型表现趋于稳定。
(4)模型健壮性评价。第10个Epoch之后,DenseNet121模型在训练集与验证集上的趋势表现一致,训练集与验证集的误差在可接受范围内,模型健壮性较好,泛化能力强。

图2-6模型的准确率曲线
测试集的前五个样本的预测结果,输出标签的概率值均超过97%。由于测试集没有标签可供参考,因此需要人工回到数据集Dataset/images目录,找到Test_0-Test_4这五个图像文件,经人工验证,图像与标签均正确匹配。
通过对61类样本预测结果的实证化剖析,结合模型准确率曲线,有理由相DenseNet121模型在当前数据集上展示了良好的预测性能。
考虑到上述抽样的四个样本均属于训练集,接下来用模型对测试集做预测。测试集包含的是模型从来没有“见过”的样本,测试结果的可信度更高。如图2-7所示,绘制了左侧中药艾叶图片的预测结果,从右侧图中可以看出,中药艾叶的预测概率最大,其它类别中药概率值很小,预测结果与真实结果吻合度极高,预测准确。
图2-7模型的预测结果


图2-10样本图像2的预览


创建Android项目
在Android Studio开发环境中,创建中药识别Android 项目,本项目的开发语言是Kotlin,是一种可以在Java虚拟机(JVM)上运行的开源静态编程语言。该语言可以在许多平台上运行。它是一种将面向对象编程 (OOP) 和函数式编程结合在一个不受限制、自给自足且与众不同的平台中的语言。
首先Kotlin的语法更加简洁,对于同样的功能,使用Kotlin开发代码量会比使用Java开发减少50%甚至更多,另外Kotlin的语法更加高级,相比于Java比较老旧的语法,Kotlin增加了很多现代高级语言的语法特性,使得Kotlin开发效率大大提高。Kotlin在语言安全性方面下了很多功夫,几乎杜绝了空指针这个全球奔溃率最高的异常。Kotlin和Java是100%兼容的。Kotlin可以直接调用使用Java编写的代码,也可以使用Java第三方的开源库。这使得Kotlin在加入诸多新特性的同时,还继承了Java全部的财富。注意要将API的版本限制为21,因为项目中调用了CameraX相关的API,CameraX 是一个 Jetpack 支持库,CameraX需要API21以上的版本支持。
项目的结构共分为五个子模块,分别由network(访问网络)、overview(主页预览)、recognition(图像识别)、notifications(新闻资讯)、detail(详情页面) 组成。
APP运行流程图如下图2-25所示。

图2-25APP运行流程图

用户模块实现
3.1.1用户登录
中药智能识别系统的登录注册和增删改查页面都是利用Postman工具进行测试的,在登录时,填写已有的邮箱或者进行注册,填写信息后,单击 send键,若填写的邮箱或者密码有误,则会提醒“登录失败”。如图3-1所示,当信息输入无误,提示成功的信息后,会更新登录许可验证码,如图3-2所示。

图3-1 用户登录失败界面

图3-2 用户登录成功界面
在登录时,使用者必须根据表格上的提示,填写所需的信息,如邮箱等,系统会核对是否有重复的内容,并且不能与所登记的邮箱相同,若有注册的邮箱已经存在,就会提示使用者所登录的邮箱已经存在!否则可以成功注册,如图3-3所示,用户注册成功界面见图3-4所示。

图3-3 用户注册失败界面

图3-4 用户注册成功界面
3.1.2查询记录功能
在登录成功之后,会实时更新查询记录功能可以根据name对medicine数据表进行查询,返回记录详细的信息。
可以单独查询某个药材的信息,若该数据存在于数据库中,则提示信息:“数据库存在请求的数据:name”如图3-5所示。
图3-5 查询单个药材成功界面
若该数据不存在于数据库中,则提示信息:“数据库不存在请求的数据:name”如图3-6所示。

图3-6 查询单个药材失败界面
也可以查询药材数据集的所有记录。如图3-7所示。
图3-7 查询所有药材信息成功界面
3.1.3添加记录功能
如果需要限定只有users表中注册的用户才能对medicine表中的数据做增、删、改、查操作,则需要在服务器端定义验证用户登录的服务模块。
HTTP是一种无状态的协议,如果用户向服务器提供了用户名和密码做身份认证,那么在做下一次请求时,需要重新提交用户名和密码进行身份验证,常用的解决方案是在服务器端存储一份用户登录的信息,这就是传统的基于Session的认证机制。随着认证用户的增多,基于Session的认证在服务器端的开销会明显增大,在面对多服务器集群模式时用户的Session会被迫绑定到台服务器上,限制了集群服务器的负载均衡能力。
基于JSON Web令牌的认证机制不需要在服务器端保留用户的认证信息或会话信息,这就意味着基于令牌的认证机制不需要考虑用户在哪一台服务器登录,可扩展性明显优于Session机制。并且可以调用create_access_token()函数创建JSON Web令牌,调用jwt_required()函数保护Web服务,get_jwt_identity()返回用户的身份标识。
Header用Based64编码封装加密算法等信息,Payload用Based64编码封装传递的敏感数据信息,Signature封装基于Header、Payload以及密钥secret生成的签名。
JSON Web令牌的认证机制简述如下:
(1)用户通过用户名和密码来请求服务器,服务器验证用户的相关信息。
(2)验证通过后,服务器向用户发送一个令牌(Token)。
(3)客户端存储令牌,每次新请求时附加自己的令牌,服务器通过验证令牌,决定是否提供服务。
用户在登录成功之后,会实时更新登录许可验证码access_token,在发送添加记录请求的时候,需要填写实时的合法的验证码,才能访问,否则会发送失败,提示信息:“Token has expired”如图3-8所示。

图3-8 登录验证码过期提示界面
在成功填写登录许可验证码后,再填写相关的药材信息:药材名称、药材特征、药材食用禁忌、药材的功效以及药材相关图片的链接,填写完毕后,可以向系统发送添加记录功能的请求,若数据库中无该条记录,则能够成功添加新记录,如图3-9所示。

图3-9 添加新记录成功界面
若数据库中已存在该记录,则提示添加的记录已存在!如图4-10所示。

图3-10 添加新记录失败界面
3.1.4更新记录功能
在成功填写登录许可验证码后,再填写相关的需要更新的药材信息:药材名称、药材特征、药材食用禁忌、药材的功效以及药材相关图片的链接,填写完毕后,点击send向系统发送更新记录功能的请求,如图3-11所示。

图3-11 更新记录成功界面
若需要进行更新的记录不存在于数据库中,则会提示修改的记录不存在,如图3-12所示。

.图3-12 修改记录失败界面
3.1.5删除记录功能
从数据库中删除记录,一般有两种策略:一种策略是不做数据的物理删除,而是添加一个新字段,用以标记记录已被删除,删除的数据可被恢复;另一种策略是直接物理删除数据,为简单起见,此次删除记录采用的是直接物理删除medicine数据表中的记录。若要删除的记录存在于数据库中,则能成功删除该记录,如图3-13所示。

图3-13 删除记录成功界面
若要删除的记录不存在于数据库中,则提示“删除的记录不存在”的信息,如图3-14所示。

图3-14 删除记录失败界面
3.2 Web端分类预测功能实现
本功能是开放式的,无需登录注册,方便让更多的人去操作和使用,网页前端页面也很简洁易懂,在运行主程序后,在浏览器中输入运行程序生成的网页网址,进入智能中药识别Web应用,在点击选择文件后,可以选择本地的相关图片,在选择图片后,可以在网页看到选择的图片,点击预测按钮后,可以清晰地看到系统的预测值。如图3-15和3-16所示,从服务器的文件管理系统中选择图像文件,然后点击预测按钮,可以得到61种中药材的预测概率,从图中可以看出,艾叶的预测概率达到了0.99以上,其它中药材预测概率相对极低,可以得出该图像中的中药即为艾叶。

图3-15预测结果(1)
通过网络爬虫程序,获取的中药详情信息,存储在Web端的中药数据库中,如下图3-17所示,该图显示出Web端中药数据库的详细内容。Android端实现与中药数据库的连接,在App的首页模块显示出中药数据库中详细的中药信息。

图3-17中药数据库详细内容
3.3.2中药分类预测功能
该功能包含照相机即使拍照与从图库选择图片识别两种方式,下图3-20为APP的识别基础页面,3-21是手机中存储的中药材图像,图3-22是随机选取的第一种中药材的识别结果,图3-23是随机选取的第二种药材的识别结果。实验证明训练集准确率超过99%,验证集超过94%,准确率较高,模型达到实用化的程度,可为中药识别提供良好参考。

图3-20基础界面

图3-21图库界面

图3-22识别结果1

图3-23识别结果2

更多项目:
另有10000+份项目源码,项目有java(包含springboot,ssm,jsp等),小程序,python,php,net等语言项目。项目均包含完整前后端源码,可正常运行!
!!! 有需要的小伙伴可以点击下方链接咨询我哦!!!
更多推荐

所有评论(0)