当前位置:   article > 正文

基于卷积神经网络的水果成熟度识别(tensorflow框架)【python源码+UI界面+前端界面+功能源码详解】_荔枝成熟度识别系统,python

荔枝成熟度识别系统,python

服饰识别功能展示:

(一)简介

 基于卷积神经网络的水果成熟度识别系统是在tensorflow框架下实现的,系统中有两个模型可选--cnn模型和VGG16模型,这两个模型可用于模型效果对比。该系统涉及的技术栈有,UI界面:python + pyqt5,前端界面:python flask + vue

该项目是在pycharm和anaconda搭建的虚拟环境执行,pycharm和anaconda安装和配置可观看教程:

超详细的pycharm+anaconda搭建python虚拟环境-CSDN博客

pycharm+anaconda搭建python虚拟环境_哔哩哔哩_bilibili

(二)项目介绍

1. pycharm打开项目界面如下

2. 数据集

3. 项目的核心代码 

(1)模型训练
  1. class Vgg16Model:
  2. def __init__(self, train_path, test_path, model_name):
  3. self.train_path = train_path
  4. self.test_path = test_path
  5. self.model_name = model_name
  6. # 模型训练主入口
  7. def train(self, epochs):
  8. # 记录训练过程
  9. log_file_name = './results/cnn训练过程.txt'
  10. # 记录正常的 print 信息
  11. sys.stdout = Logger(log_file_name)
  12. # 开始训练,记录开始时间
  13. begin_time = time()
  14. train_ds, val_ds, class_names = self.data_load(224, 224, 16)
  15. print(class_names)
  16. # 加载模型
  17. model = self.model_load(class_num=len(class_names))
  18. # 指明训练的轮数epoch,开始训练
  19. history = model.fit(train_ds, validation_data=val_ds, epochs=epochs)
  20. # 保存模型
  21. model.save(self.model_name)
  22. # 记录结束时间
  23. end_time = time()
  24. run_time = end_time - begin_time
  25. print('该循环程序运行时间:', run_time, "s")
  26. # 绘制模型训练过程图
  27. self.show_loss_acc(history)
  28. if __name__ == '__main__':
  29. # todo 加载数据集, 修改数据集的路径
  30. train_dir = r"D:\A-Project\MangoRec_Project\mango_maturity_datasets\train"
  31. test_dir = r"D:\A-Project\MangoRec_Project\mango_maturity_datasets\test"
  32. # todo 修改模型名称
  33. model_name0 = r"models/vgg16.h5"
  34. my_cnn = Vgg16Model(train_dir, test_dir, model_name0)
  35. # todo 指定模型训练轮数
  36. my_cnn.train(epochs=10)
  37. # todo 模型验证 跑此函数前先把上面的 my_cnn.train(epochs=10) 注释掉
  38. # my_cnn.test()

该系统可以训练自己的数据集,训练过程也比较简单,只需指定自己数据集中训练集和测试集的路径,训练后模型名称和指定训练的轮数即可

训练结束后可输出以下结果:

a. 训练过程的损失曲线

b. 模型训练过程记录,模型每一轮训练的损失和精度数值记录

c. 模型结构

(2)模型评估
  1. class Vgg16Model:
  2. def __init__(self, train_path, test_path, model_name):
  3. self.train_path = train_path
  4. self.test_path = test_path
  5. self.model_name = model_name
  6. # 测试模型准确率
  7. def test(self):
  8. # 记录测试过程
  9. log_file_name = './results/vgg16测试过程.txt'
  10. # 记录正常的 print 信息
  11. sys.stdout = Logger(log_file_name)
  12. _, test_ds, class_names = self.data_load(224, 224, 16)
  13. # 加载已训练好的模型
  14. model = tf.keras.models.load_model(self.model_name)
  15. # 测试
  16. loss, accuracy = model.evaluate(test_ds)
  17. # 输出结果
  18. print('VGG16 test accuracy :', accuracy)
  19. # 对模型分开进行推理
  20. test_real_labels = []
  21. test_pre_labels = []
  22. for test_batch_images, test_batch_labels in test_ds:
  23. test_batch_labels = test_batch_labels.numpy()
  24. test_batch_pres = model.predict(test_batch_images)
  25. # print(test_batch_pres)
  26. test_batch_labels_max = np.argmax(test_batch_labels, axis=1)
  27. test_batch_pres_max = np.argmax(test_batch_pres, axis=1)
  28. # print(test_batch_labels_max)
  29. # print(test_batch_pres_max)
  30. # 将推理对应的标签取出
  31. for i in test_batch_labels_max:
  32. test_real_labels.append(i)
  33. for i in test_batch_pres_max:
  34. test_pre_labels.append(i)
  35. # break
  36. # print(test_real_labels)
  37. # print(test_pre_labels)
  38. class_names_length = len(class_names)
  39. heat_maps = np.zeros((class_names_length, class_names_length))
  40. for test_real_label, test_pre_label in zip(test_real_labels, test_pre_labels):
  41. heat_maps[test_real_label][test_pre_label] = heat_maps[test_real_label][test_pre_label] + 1
  42. print(heat_maps)
  43. heat_maps_sum = np.sum(heat_maps, axis=1).reshape(-1, 1)
  44. # print(heat_maps_sum)
  45. print()
  46. heat_maps_float = heat_maps / heat_maps_sum
  47. print(heat_maps_float)
  48. # title, x_labels, y_labels, harvest
  49. self.show_heatmaps(title="heatmap", x_labels=class_names, y_labels=class_names,
  50. harvest=heat_maps_float, save_name="results/heatmap_vgg16.png")
  51. if __name__ == '__main__':
  52. # todo 加载数据集, 修改数据集的路径
  53. train_dir = r"D:\A-Project\MangoRec_Project\mango_maturity_datasets\train"
  54. test_dir = r"D:\A-Project\MangoRec_Project\mango_maturity_datasets\test"
  55. # todo 修改模型名称
  56. model_name0 = r"models/vgg16.h5"
  57. my_cnn = Vgg16Model(train_dir, test_dir, model_name0)
  58. # todo 指定模型训练轮数
  59. # my_cnn.train(epochs=10)
  60. # todo 模型验证 跑此函数前先把上面的 my_cnn.train(epochs=10) 注释掉
  61. my_cnn.test()

模型评估和模型训练在同一程序,模型评估时只需将模型评估入口函数放开,同时注释掉模型训练入口函数即可

模型评估可输出:

a. 测试精度热力图

b. 测试过程和精度数值

(三)资源获取方式

资源主要包括以下内容:完整的程序代码文件、训练好的模型、数据集、UI界面、前端界面。欢迎大家咨询!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/140253
推荐阅读
相关标签
  

闽ICP备14008679号