项目说明
中药识别系统主要采用APP端拍照上传的方式,构建卷积神经网络(CNN)对图像进行识别,具有识别效率高,准确度高的特点。APP端的功能包括但不限于拍照识别、中药问答(付费咨询)、检索查询、中药性状以及功效查看、方剂智能推荐【开发中】等;本系统包含APP端以及服务器端。
版本说明 3.x
- APP端使用Flutter重写界面,使用体验得到提升。
- 深度学习运行时框架采用ONNX Runtime。计算速度得到明显加快,同时深度学习框架依赖部署文件减小到40M。
项目介绍
本项目包含六个模块:
- medicine-app:APP端
- medicine-server:服务器端
- medicine-crawler:爬虫工程
- medicine-model:卷积神经网络
- medicine-util:公用工具类
- medicine-dataset:数据集
项目预览
- 项目运行展示


开发文档
技术简介
- medicine-app APP端
- Flutter开发
- medicine-server服务器端工程Gradle构建SpringBoot框架,一键启动与部署文档数据库:MongoDB全文检索:Elasticsearch + IK分词器数据库:MySQL深度学习运行时架构:ONNX Runtime(ONNX Runtime is a cross-platform inference and training machine-learning accelerator)
- medicine-crawler爬虫工程爬虫主要用来爬取训练集以及中药的详细信息,包含但不限于:中药名称、中药形态、图片、 别名、英文名、配伍药方、功效与作用、临床应用、产地分布、药用部位、 性味归经、药理研究、主要成分、使用禁忌、采收加工、药材性状等信息。爬虫框架:WebMagic(参考代码)数据持久化:MongoDB数据结构(简略展示)
- 中药一级分类信息

- 中药详细信息

- medicine-model卷积神经网络工程
- Language: Python
- 使用TensorFlow 深度学习框架,使用Keras会大幅缩减代码量
- 数据集
- 常用的卷积网络模型及在ImageNet上的准确率模型大小Top-1准确率Top-5准确率参数数量深度Xception88 MB0.7900.94522,910,480126VGG16528 MB0.7130.901138,357,54423VGG19549 MB0.7130.900143,667,24026ResNet5098 MB0.7490.92125,636,712168ResNet101171 MB0.7640.92844,707,176-ResNet152232 MB0.7660.93160,419,944-ResNet50V298 MB0.7600.93025,613,800-ResNet101V2171 MB0.7720.93844,675,560-ResNet152V2232 MB0.7800.94260,380,648-ResNeXt5096 MB0.7770.93825,097,128-ResNeXt101170 MB0.7870.94344,315,560-InceptionV392 MB0.7790.93723,851,784159InceptionResNetV2215 MB0.8030.95355,873,736572MobileNet16 MB0.7040.8954,253,86488MobileNetV214 MB0.7130.9013,538,98488DenseNet12133 MB0.7500.9238,062,504121DenseNet16957 MB0.7620.93214,307,880169DenseNet20180 MB0.7730.93620,242,984201NASNetMobile23 MB0.7440.9195,326,716-NASNetLarge343 MB0.8250.96088,949,818-由于硬件条件限制,综合考虑模型的准确率、大小以及复杂度等因素,采用了Xception模型,该模型是134层(包含激活层,批标准化层等)拓扑深度的卷积网络模型。
- Xception函数定义:def Xception(include_top=True, weights=’imagenet’, input_tensor=None, input_shape=None, pooling=None, classes=1000, **kwargs) # 参数 # include_top:是否保留顶层的全连接网络 # weights:None代表随机初始化,即不加载预训练权重。’imagenet’代表加载预训练权重 # input_tensor:可填入Keras tensor作为模型的图像输入tensor # input_shape:可选,仅当include_top=False有效,应为长为3的tuple,指明输入图片的shape,图片的宽高必须大于71,如(150,150,3) # pooling:当include_top=False时,该参数指定了池化方式。None代表不池化,最后一个卷积层的输出为4D张量。‘avg’代表全局平均池化,‘max’代表全局最大值池化。 # classes:可选,图片分类的类别数,仅当include_top=True并且不加载预训练权重时可用
- 构建代码基于Xception的模型微调,详细请参考代码
- 设置Xception参数迁移学习参数权重加载:xception_weights# 设置输入图像的宽高以及通道数 img_size = (299, 299, 3) base_model = keras.applications.xception.Xception(include_top=False, weights=’..\\resources\\keras-model\\xception_weights_tf_dim_ordering_tf_kernels_notop.h5′, input_shape=img_size, pooling=’avg’) # 全连接层,使用softmax激活函数计算概率值,分类大小是628 model = keras.layers.Dense(628, activation=’softmax’, name=’predictions’)(base_model.output) model = keras.Model(base_model.input, model) # 锁定卷积层 for layer in base_model.layers: layer.trainable = False
- 全连接层训练(v1.0)from base_model import model # 设置训练集图片大小以及目录参数 img_size = (299, 299) dataset_dir = ‘..\\dataset\\dataset’ img_save_to_dir = ‘resources\\image-traing\\’ log_dir = ‘resources\\train-log’ model_dir = ‘resources\\keras-model\\’ # 使用数据增强 train_datagen = keras.preprocessing.image.ImageDataGenerator( rescale=1. / 255, shear_range=0.2, width_shift_range=0.4, height_shift_range=0.4, rotation_range=90, zoom_range=0.7, horizontal_flip=True, vertical_flip=True, preprocessing_function=keras.applications.xception.preprocess_input) test_datagen = keras.preprocessing.image.ImageDataGenerator( preprocessing_function=keras.applications.xception.preprocess_input) train_generator = train_datagen.flow_from_directory( dataset_dir, save_to_dir=img_save_to_dir, target_size=img_size, class_mode=’categorical’) validation_generator = test_datagen.flow_from_directory( dataset_dir, save_to_dir=img_save_to_dir, target_size=img_size, class_mode=’categorical’) # 早停法以及动态学习率设置 early_stop = EarlyStopping(monitor=’val_loss’, patience=13) reduce_lr = ReduceLROnPlateau(monitor=’val_loss’, patience=7, mode=’auto’, factor=0.2) tensorboard = keras.callbacks.tensorboard_v2.TensorBoard(log_dir=log_dir) for layer in model.layers: layer.trainable = False # 模型编译 model.compile(optimizer=’rmsprop’, loss=’categorical_crossentropy’, metrics=[‘accuracy’]) history = model.fit_generator(train_generator, steps_per_epoch=train_generator.samples // train_generator.batch_size, epochs=100, validation_data=validation_generator, validation_steps=validation_generator.samples // validation_generator.batch_size, callbacks=[early_stop, reduce_lr, tensorboard]) # 模型导出 model.save(model_dir + ‘chinese_medicine_model_v1.0.h5’)
- 对于顶部的6层卷积层,我们使用数据集对权重参数进行微调 # 加载模型 model=keras.models.load_model(‘resources\\keras-model\\chinese_medicine_model_v2.0.h5’) for layer in model.layers: layer.trainable = False for layer in model.layers[126:132]: layer.trainable = True history = model.fit_generator(train_generator, steps_per_epoch=train_generator.samples // train_generator.batch_size, epochs=100, validation_data=validation_generator, validation_steps=validation_generator.samples // validation_generator.batch_size, callbacks=[early_stop, reduce_lr, tensorboard]) model.save(model_dir + ‘chinese_medicine_model_v2.0.h5’)
- 服务器端,使用ONNX Runtime调用训练好的模型
- 模型概览模型详细结构
- 训练过程正确率以及损失函数可视化展示
- medicine-dataset数据集
- medicine-util公用工具类
- 关于MongoDbUtil说明
依赖环境说明
依赖 | 版本 |
---|---|
JDK | 11+ |
Python | 3.6 |
Gradle | 6.5 |
TensorFlow | 2.0 |
MongoDB | 4.2.2 |
MySQL | 8.0+ |
Spring Boot | 2.2.2 |
Elasticsearch | 7.4.2 |
IK分词器 | 7.4.2 |
ONNX Runtime | 1.8.1 |
开源软件使用须知
- 允许用于个人学习;
- 开源版不适合商用;
- 禁止将本项目的代码和资源进行任何形式的出售,产生的一切任何后果责任由侵权者自负;
阅读全文
资源下载
下载价格免费
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=12716,转载请注明出处。
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=12716,转载请注明出处。
评论0