【大作业-02】水果蔬菜识别系统-基于tensorflow2.3开发

AI摘要

本项目使用TensorFlow2.3构建了一个水果蔬菜识别系统,包括两层卷积两层池化的CNN及基于迁移学习的Mobilenet模型,准确率高达97%,支持12种果蔬的识别。

------------------------------------------------2021年6月18日重大更新--------------------------------------------------------------

目前已经退出bug修复之后的tensorflow2.3物体分类代码,大家可以训练自己的数据集,快来试试吧

csdn教程链接:手把手教你用tensorflow2.3训练自己的分类数据集_优快云博客

b站视频链接:手把手教你用tensorflow2训练自己的数据集

数据集链接:计算机视觉数据集清单-附赠tensorflow模型训练和使用教程_优快云博客

代码链接:vegetables_tf2.3: 基于tensorflow2.3开发的水果蔬菜识别系统 (gitee.com)

------------------------------------------------------------------dejahu---------------------------------------------------------------------

tensorflow是由google出品的深度学习框架,2.x版本的tensorflow对代码进行了重构,使用起来更加简洁方便。本系统使用tensorflow训练了一个两层卷积两层池化的卷积神经网络和一个基于迁移学习的mobilnet网络,其中mobilenet网络模型准确率高达97%,可识别[‘土豆’, ‘圣女果’, ‘大白菜’, ‘大葱’, ‘梨’, ‘胡萝卜’, ‘芒果’, ‘苹果’, ‘西红柿’, ‘韭菜’, ‘香蕉’, ‘黄瓜’]12种水果蔬菜,并借助pyqt5构建了图形化界面,用户可选择图片上传进行果蔬的识别。

配套视频

配套视频在这里:手把手教你用tensorflow2构建果蔬识别系统

环境配置请看:Python学习中Anaconda和Pycharm的正确打开方式_哔哩哔哩_bilibili

效果展示

首先来看看效果展示

启动系统,首先来到的是关于界面,作者的信息可以在window.py的84行进行修改。

image-20210524104017908

主页部分,一共是两个按钮,点击上传图片的按钮可从本地选择图片进行上传

image-20210524104702278

点击开始识别的按钮可以调用训练好的模型进行图片的识别,识别结果会显示在右侧

image-20210524104625086

模型训练

模型的训练包含两部分代码,train_mobilnet.py用来训练mobilnet模型,train_cnn.py用于训练cnn模型,模型训练分为3个步骤:数据加载 - 模型加载 - 模型训练和保存。

数据加载

首先来看一下我们的数据,我们分为训练集和测试集。

image-20210524141444140

打开之后按照目录存放相应的图片,比如大白菜目录下存放的全是白菜的图片。

image-20210524141522571

这里我们使用tf.keras.preprocessing.image_dataset_from_directory直接从指定的目录中加载数据集并统一处理为指定的大小,代码如下:

# 数据集加载函数,指明数据集的位置并统一处理为imgheight*imgwidth的大小,同时设置batch
def data_load(data_dir, test_data_dir, img_height, img_width, batch_size):
    # 加载训练集
    train_ds = tf.keras.preprocessing.image_dataset_from_directory(
        data_dir,
        label_mode='categorical',
        seed=123,
        image_size=(img_height, img_width),
        batch_size=batch_size)
    # 加载测试集
    val_ds = tf.keras.preprocessing.image_dataset_from_directory(
        test_data_dir,
        label_mode='categorical',
        seed=123,
        image_size=(img_height, img_width),
        batch_size=batch_size)
    class_names = train_ds.class_names
    # 返回处理之后的训练集、验证集和类名
    return train_ds, val_ds, class_names
模型构建

模型的构建方面我们借助keras来完成,只需要讲需要的层叠加到一起,并指明我们所需的优化器和损失函数即可

# 构建CNN模型
def model_load(IMG_SHAPE=(224, 224, 3), class_num=6):
    # 搭建模型
    model = tf.keras.models.Sequential([
        # 对模型做归一化的处理,将0-255之间的数字统一处理到0到1之间
        tf.keras.layers.experimental.preprocessing.Rescaling(1. / 255, input_shape=IMG_SHAPE),
        # 卷积层,该卷积层的输出为32个通道,卷积核的大小是3*3,激活函数为relu
        tf.keras.layers.Conv2D(32, (3, 3), activation='relu'),
        # 添加池化层,池化的kernel大小是2*2
        tf.keras.layers.MaxPooling2D(2, 2),
        # Add another convolution
        # 卷积层,输出为64个通道,卷积核大小为3*3,激活函数为relu
        tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
        # 池化层,最大池化,对2*2的区域进行池化操作
        tf.keras.layers.MaxPooling2D(2, 2),
        # 将二维的输出转化为一维
        tf.keras.layers.Flatten(),
        # The same 128 dense layers, and 10 output layers as in the pre-convolution example:
        tf.keras.layers.Dense(128, activation='relu'),
        # 通过softmax函数将模型输出为类名长度的神经元上,激活函数采用softmax对应概率值
        tf.keras.layers.Dense(class_num, activation='softmax')
    ])
    # 输出模型信息
    model.summary()
    # 指明模型的训练参数,优化器为sgd优化器,损失函数为交叉熵损失函数
    model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])
    # 返回模型
    return model
训练开始

训练的主流程中,先加载数据,再加载模型,最后将数据送入模型中进行训练,使用的是model.fit函数,可以自由指定训练的轮数,最终模型会保存在models目录下,训练过程中的可视化结果会保存在reuslts目录下

def train(epochs):
    # 开始训练,记录开始时间
    begin_time = time()
    # 加载数据集
    train_ds, val_ds, class_names = data_load("../data/vegetable_fruit/image_data",
                                              "../data/vegetable_fruit/test_image_data", 224, 224, 16)
    print(class_names)
    # 加载模型
    model = model_load(class_num=len(class_names))
    # 指明训练的轮数epoch,开始训练
    history = model.fit(train_ds, validation_data=val_ds, epochs=epochs)
    # 保存模型
    model.save("models/cnn_fv.h5")
    # 记录结束时间
    end_time = time()
    run_time = end_time - begin_time
    print('该循环程序运行时间:', run_time, "s")  # 该循环程序运行时间: 1.4201874732
    # 绘制模型训练过程图
    show_loss_acc(history)

image-20210524142945905

模型测试

模型测试和模型训练基本一致,只是在模型加载的部分,直接调用保存好的模型即可,不在进行模型参数的调整,以cnn模型的测试为例,首先加载数据,然后加载模型,最后使用model.evaluate方法对模型进行测试。

def test_cnn():
    # 加载数据集
    train_ds, val_ds, class_names = data_load("../data/vegetable_fruit/image_data",
                                              "../data/vegetable_fruit/test_image_data", 224, 224, 16)
    # 加载模型
    model = tf.keras.models.load_model("models/cnn_fv.h5")
    # model.summary()
    # 测试
    loss, accuracy = model.evaluate(val_ds)
    # 输出结果
    print('CNN test accuracy :', accuracy)

测试结果如下,其中mobilenet可达到97%的准确率:

image-20210524143235563

代码获取

代码请在码云中下载

vegetables_tf2.3: 基于tensorflow2.3开发的水果蔬菜识别系统 (gitee.com)

数据集请在csdn下载

果蔬识别数据集.zip-专业指导文档类资源-优快云下载

下载之后按照下面的目录放置数据集和代码
image-20210605170205728

data目录下是

image-20210605170318893

fv_tf2.3_cpu目录下是

image-20210605170337870

参考资料

李老师讲解卷积神经网络: https://www.bilibili.com/video/BV1Lb411b7BS?from=search&seid=14069382285256773171
如何理解卷积神经网络(CNN)中的卷积和池化:https://www.zhihu.com/question/49376084/answer/712089980
轻量级CNN网络之MobileNetv2:https://zhuanlan.zhihu.com/p/52426865
vgg网络解析:https://zhuanlan.zhihu.com/p/41423739
resnet网络解析:https://zhuanlan.zhihu.com/p/67860570

环境配置

环境的配置分为三步: 配置虚拟环境和安装程序所需要的包以及在pycharm中打开项目

配置虚拟环境

配置虚拟环境需要通过anaconda来完成,anaconda的下载地址为:https://docs.conda.io/en/latest/miniconda.html

windows用户下载python3.8的miniconda即可

image-20210524105054366

下载完毕之后双击安装即可,注意一点这些一定要选中

image-20210524105240779

image-20210524105344251

程序安装完毕之后打开windows的命令行(cmd),输入conda env list,出现下列信息则表示conda已完成安装

image-20210524105549465

在命令行中输入下列指令创建虚拟环境

conda create -n tf2.3 python==3.7.3

这条指令的含义是创建python版本为3.7.3,名称为tf2.3的虚拟环境

image-20210524105851905

安装结束之后输入下列指令激活虚拟环境,出现下图所示的小括号表示环境激活成功

conda activate tf2.3 

image-20210524110020460

安装程序所需要的包

接着在命令行中依次执行下列命令安装程序所需的包(请根据你的程序自由选择要安装的包)

pip install tensorflow-cpu==2.3.0 -i https://mirror.baidu.com/pypi/simple
pip install pyqt5 -i https://mirror.baidu.com/pypi/simple
pip install pillow -i https://mirror.baidu.com/pypi/simple 
pip install opencv-python -i https://mirror.baidu.com/pypi/simple 
pip install matplotlib -i https://mirror.baidu.com/pypi/simple 

image-20210524110423033

注:每一行命令都要执行

在pycharm中打开程序

为了方便查看和调试代码,我们这里使用pycharm,pycharm的下载地址为:https://www.jetbrains.com/pycharm/download/#section=windows

image-20210524110552220

这里选择社区版进行下载即可

安装过程中这几个选项请务必选上,以避免后面不必要的麻烦

image-20210524111504457

安装完毕之后找到我们的代码,通过pycharm打开即可

image-20210524111754027

打开之后我们在软件的右下角找到Add interpreter添加刚才建立的虚拟环境

image-20210524111938905

image-20210524112020699

最后右下角显示tf2.3表示我们当前的虚拟环境为tf2.3

image-20210524112057673

之后再安装程序的包的时候,直接在pycharm下方打开terminal,执行pip install xxx 的指令即可,包就会自动安装在当前的虚拟环境中

image-20210524112334043

水果识别系统Python,基于TensorFlow卷积神经网络算法 提示 面对水果识别系统Python,基于TensorFlow卷积神经网络算---深度学习算法:提示:以下是本篇文章正文内容,下面案例可供参考。 阅读详情

相关推荐

基于卷积神经网络的农作物病虫害图像识别(Opencv,Pytorch,Tensorflow,MobileNetV3)

最近做了一个农作物虫害图像识别的程序,在此分享一下。本文用到的深度学习框架为Tensorflow2,Opencv等等!使用的数据集共有61种类别,分别代表不同的虫害类别。使用的网络模型为moblienetv3.

Czqqwer的博客 6215

直线交点数

题目描述 平面上有N条直线,且无三线共点,那么这些直线能有多少不同的交点数? 输入输出格式 输入格式: 一个正整数N 输出格式: 一个整数表示方案总数 输入输出样例 输入样例#1: 4 输出样例#1: 5 说明 N<=25 . . . . . . 分析 用 a[x,y]表示直线条数为x时,是否可以有y个交点。(是为1,否为0)。 n条直线相交,...

Beautiful women in tights 1036

【大作业-03】手把手教你用tensorflow2.3训练自己的分类数据集

配合视频一起食用这篇教程效果更佳:课设题目没想好?手把手教你用tensorflow2构建果蔬识别系统 tensorflow2.x版本对小白非常友好,2.x的api中对keras进行了合并,大家只需要安装tensorflow就可以使用里面封装好的keras,利用keras可以快速地加载数据集和构建模型,下面我们直接来看以下通过tensorflow2.3训练自己的分类数据集吧。 注:本文主要针对图片形式的数据集构建分类模型,文本数据、目标检测等任务暂不涉及。 本文使用到的代码已在码云上开源,请大家自行下载,st

dejahu的博客 6万+

基于tensorflow-gpu的果蔬识别系统搭建过程及遇到的问题

基于tensorflow-gpu的果蔬识别系统搭建过程及遇到的问题

weixin_44138653的博客 1781

基于YOLOv10的5类水果蔬菜目标检测实战项目

在构建数据集前,需明确定义目标类别。例如水果蔬菜类别可定义如下:类别编号类别名称0苹果1香蕉2橙子3西红柿4胡萝卜标注规范应包括:单图标注对象数量限制:建议每张图标注不超过20个目标,避免标注混乱。边界框精度要求:边界框应紧贴目标边缘,避免过大或过小。类别一致性:同一类别的标注应保持一致的标签名称和编号。标注质量审核:可设置多人标注并交叉验证,确保准确性。

weixin_28850145的博客 986

果蔬识别数据集.zip

果蔬识别数据集,包含'土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'12种水果蔬菜

基于卷积神经网络的蔬菜水果识别

直接上代码,导入数据集搭建好框架就可以直接运行。

m0_65897110的博客 1344

【智能体】零代码实战:Coze多智能体协作开发全流程解析

本文详细解析了Coze平台的多智能体协作开发全流程,从入门指南到实战技巧,帮助用户零代码构建高效AI团队。通过模块化设计和专业分工,多智能体系统能显著提升任务处理速度和准确率,适用于客服、内容创作、教育培训等多个场景。文章还提供了性能优化和常见问题解决方案,助力开发者快速掌握Multi-Agent技术。

weixin_29239279的博客 334

基于迁移学习的水果蔬菜分类

本文提出了一种基于MobileNetV2和迁移学习的水果蔬菜图像分类方法。针对传统算法泛化能力差的问题,采用MobileNetV2模型进行特征提取,结合Softmax分类器实现分类。通过实验对比不同冻结层数策略,发现仅冻结layer1时模型表现最佳,在验证集上准确率达98.14%。该方法显著提升了分类性能,为农业自动化分拣等应用提供了有效解决方案。

2301_78626377的博客 1143

Ubuntu 22.04下Realtek R8125网卡驱动安装避坑指南(附DKMS自动编译配置)

本文详细介绍了在Ubuntu 22.04系统上为Realtek R8125 2.5GbE网卡安装驱动的完整流程与避坑指南。针对内核通用驱动r8169的冲突问题,重点讲解了如何通过DKMS(Dynamic Kernel Module Support)实现驱动的持久化自动编译与安装,确保系统内核升级后网卡驱动依然有效。内容包括环境准备、驱动源码获取、DKMS标准配置、驱动冲突解决(设置黑名单)以及日常维护与故障排查方法,旨在为用户提供一个一劳永逸的稳定解决方案。

echo99的专栏 1023

数据结构:五岔路口交通管理红绿灯设计

我们可以知道这是一个“图”的着色问题,首先要考虑,为什么可行路线是13条?当然可以通过穷举得出,如果用公式:则是: 或者 因为一条路线必须包括一出一进两个方向 第一种答案的解法: 一、固定E为入口,则有C_4^1=4的可能; 二、除去E(因为E只有一个入向),剩下ABCD四个路口,然后因为C只有一个出方向,所以从剩下 的ABD中选择一个入口,即C_3^1; 三、再从剩下的三个出口任选

潘猫猫的世界 1万+

Python机器学习实现水果蔬菜识别系统开发指南

计算机视觉作为人工智能的重要分支,通过模拟人类视觉系统实现对图像内容的分析与理解。其核心技术包括特征提取、模式识别和深度学习等,其中特征提取是影响模型性能的关键环节。在实际工程中,合理的特征选择能显著提升分类准确率,特别是在农业自动化和智能零售等应用场景。以水果蔬菜识别为例,传统方法如HOG+SIFT适合教学演示,而CNN迁移学习则更适合实际部署。本项目采用Python技术栈,结合OpenCV和PyTorch框架,详细演示了从数据采集到模型部署的全流程,其中ResNet18微调方案在消费级硬件上即可达到98

人生的意義在於修煉!修煉之路~ 458

RK3588平台-ES8388音频驱动调试与设备树配置实战

本文详细解析了在RK3588平台上调试ES8388音频驱动的实战过程。内容涵盖Linux音频驱动的三层架构(Machine、Platform、Codec),并重点提供了设备树(DTS)的完整配置示例,包括I2C节点、声卡节点及音频路由设置。文章还分享了驱动加载验证、amixer调试命令以及常见问题(如无声、变调)的排查思路,旨在帮助开发者快速完成RK3588与ES8388的音频系统集成。

mango的博客 806

【基于TensorFlow2.3.0的果蔬识别系统的设计】

基于TensorFlow2.3.0的果蔬识别系统设计,可以识别36种果蔬,比如“苹果”,“香蕉”,"豌豆", "菠萝", "石榴", "土豆", "红萝卜", "黄豆", "菠菜", "甜玉米", "红薯", "番茄", "白萝卜", "西瓜"等。

lilihexiaoxiangege的博客 2818

Nvidia Isaac Sim安装与配置 入门教程 2024(2)

Isaac Sim 安装和配置教程将指导用户完成从下载软件到设置和运行仿真的全过程。教程内容包括安装必要的依赖项、配置系统环境、配置Omniverse环境以及调试和优化仿真环境的步骤。通过详细的操作步骤和图文并茂的说明,用户可以快速上手 Isaac Sim,构建出高质量的机器人仿真环境,实现其研究和应用目标。

m0_56661101的博客 2万+

单细胞转录组肿瘤细胞识别:inferCNV与CopyKAT实战解析

单细胞转录组测序(scRNA-seq)是解析肿瘤微环境的重要技术,但如何从海量细胞中准确区分恶性细胞与正常细胞,始终是数据分析的关键难题。传统marker注释在异质性肿瘤中常失效,而基于拷贝数变异(CNV)的推断方法为这一问题提供了更稳健的解决路径。CNV通过检测染色体大片段的增益或缺失,可在无先验标记的情况下识别恶性细胞,尤其适合实体瘤研究。inferCNV利用染色体滑动窗口分析相对表达量,生成直观的CNV热图;CopyKAT则结合高斯混合模型对每个细胞直接分类,输出肿瘤/正常/非整倍体标签。本文从原理出

weixin_31236101的博客 250

水果蔬菜数据集

该水果蔬菜数据集包含28个类别的图像(10种水果和18种蔬菜),总数据量达3,560张(每类100张训练图+10张验证图+10张测试图)。数据集采用标准的三级目录结构(train/test/validation),适合图像分类任务。通过TensorFlow的ImageDataGenerator可实现数据增强(旋转/平移/翻转等),搭配MobileNetV2迁移学习模型(冻结底层+自定义分类层)进行训练,最终输出多分类结果。典型流程包括:数据预处理→模型构建→训练评估(50个Epoch)→性能可视化(损失/准

DeepLearningYolo的博客 177

将Keil中的变量数组导出

首先,写好导出数据的函数。

小柚子的博客 1951

如何使用TensorFlow和Keras对水果和蔬菜数据集进行训练、评估和可视化。 训练:每个类别包含 100 张图像。测试:每个类别包含 10 张图像。验证:每个类别包含 10 张图像。

如何使用TensorFlow和Keras对水果和蔬菜数据集进行训练、评估和可视化。 训练:每个类别包含 100 张图像。测试:每个类别包含 10 张图像。验证:每个类别包含 10 张图像。

2401_88441190的博客 608

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python操作txt找到最便宜的素菜_Fruits-360: 包含水果和蔬菜的图像数据集

Fruits-360: A dataset of images containing fruits and vegetablesVersion: 2020.05.18.0A high-quality, dataset of images containing fruits and vegetables. The following fruits and vegetables are include...

weixin_26933735的博客 1122

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

深度学习实战-基于卷积神经网络CNN的水果图像分类识别模型

本文介绍了一个基于卷积神经网络(CNN)的水果图像分类项目。使用Kaggle提供的22495张水果/蔬菜图像(33个类别)作为数据集,通过数据预处理、图像增强等技术优化数据质量。构建的CNN模型包含4个卷积模块和全连接层,采用Adam优化器和交叉熵损失函数进行训练。实验结果显示,模型在验证集上达到98.51%的准确率,F1-score接近1.00,表明该模型能有效识别不同水果类别。该项目展示了深度学习在农产品智能化管理中的应用潜力,为后续实际部署提供了参考。

m0_64336780的博客 6197

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

基于CNN的水果蔬菜图像分类实战与优化

卷积神经网络(CNN)作为计算机视觉领域的核心技术,通过局部连接和权值共享机制高效提取图像空间特征。其核心价值在于自动学习层次化特征表示,从边缘纹理到语义信息逐层抽象。在图像分类任务中,CNN配合数据增强技术能显著提升模型泛化能力,特别适用于农产品识别等实际场景。本项目基于TensorFlow框架构建CNN模型,通过旋转、平移等数据增强手段处理小样本问题,最终实现33类水果蔬菜的精准分类。关键技术点包括Adam优化器调参、Dropout正则化以及模型轻量化部署方案,为农业智能化提供了可复用的技术路径。

angw337679452的博客 397

人工智能大作业清单

Hello,各位小伙伴,大家好,由于之前的博客都是断断续续的发布,导致有些小伙伴看到之后不知道去哪里找下一期以及去哪里下载项目中对应的资源,这里我将所有的大作业都整理了处理,每个项目都提供了项目的效果图、博客地址、视频地址以及资源地址,方便大家进行索引。我们设置这个专栏的目的主要是为了帮助大家掌握常用的计算机视觉的算法,以实际操作为导向,学习知识的同时帮助大家完成对应的大作业,本栏目涵盖了计算机视觉中常见的四个任务,即分类、分割、检测和实例分割。

2401_84067250的博客 2842
上一篇: 高等计算机网络与通信20年期末考试
下一篇: 使用Python检测条形码和二维码
肆十二
肆十二 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄9年 2万+粉丝 241原创
评论 40
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆十二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值