版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
菜品识别实验手册【项目目标】菜品识别是人工智能的运用在餐饮领域的一个重要突破,菜品识别是指通过计算机对菜品图像进行处理、分析和理解,以不同模式识别各种目标和物体,并对质量较差的图像进行一系列增强和重建技术,从而有效精准识别菜品图像质量的技术。本项目以“西安美食识别”为任务,展示如何训练一个简单的卷积神经网络(CNN)来对图像进行分类识别。具体目标包括:(1)掌握如何创建与拆分数据集;(2)掌握如何实现预处理图像数据;(3)了解如何构建卷积神经网络模型,并完成模型训练;(4)掌握如何使用已训练好的模型进行图像识别分类。任务一下载并创建数据集本实训提供了“西安美食”数据集food,该数据集包含23个类别1644张的彩色图像,其中1630张图像带标签,其余14张为待预测图像。创建工程“foodsRecognization”,将数据集“food”拷贝至工程文件夹下。新建卷积神经网络模型的python文件model.py,遍历带标签数据集train目录下的所有菜品及其标签:#导入包importosimportcv2importnumpyasnpdata=[]#存储菜品的原始图像,以备后续利用food_images=[]#存储菜品图像food_labels=[]#存储菜品标签N=23#N为菜品的种类数#遍历数据集下的所有菜品训练集foriinrange(N):forroot,dirs,filesinos.walk("food/train/"+str(i)):forfileinfiles:ifos.path.splitext(file)[1]=='.jpg':data.append(file)temp_image=cv2.imread(root+"/"+file)temp_image=cv2.resize(temp_image,(224,224))food_images.append(temp_image)food_labels.append(32(i))拆分数据集为训练集和测试集。其中:train_images和train_labels数组是训练集,用于模型的学习。test_images和test_labels数组是测试集,会被用来对模型进行测试。fromsklearnimportmodel_selection#拆分数据集train_images,test_images,train_labels,test_labels=\model_selection.train_test_split(food_images,food_labels,train_size=0.8,test_size=0.2)任务二数据预处理 在训练网络之前,必须对数据进行预处理。检查训练集中的图像,发现像素值处于0到255之间。将这些值除以255,使其缩小至0到1之间,然后将其馈送到神经网络模型。这里,务必以相同的方式对训练集和测试集进行预处理。train_images=np.array(train_images)train_images=train_images.reshape([-1,224,224,3])/255.0train_labels=np.array(train_labels)test_images=np.array(test_images)test_images=test_images.reshape([-1,224,224,3])/255.0test_labels=np.array(test_labels)任务三构建模型构建神经网络需要先配置模型的层,然后再编译模型。神经网络的基本组成部分是层,层会从向其馈送的数据中提取表示形式。大多数深度学习都包括将简单的层链接在一起。本网络包含两个卷积层Conv2D、两个池化MaxPooling2D层、一个展平Flatten层、两个全连接Dense层,最后用softmax输出23类。#导入Tensorflow,并命名为tfimporttensorflowastf#构建模型#设置层model=tf.keras.models.Sequential([tf.keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=(224,224,3)),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Conv2D(64,(3,3),activation='relu'),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(128,activation='relu'),tf.keras.layers.Dense(23,activation='softmax')])在准备对模型进行训练之前,还需要再对其进行一些设置,包括:损失函数:用于测量模型在训练期间的准确率。需要最小化此函数,以便将模型“引导”到正确的方向上;优化器:决定模型如何根据其看到的数据和自身的损失函数进行更新;评价指标:用于监控训练和测试步骤。这里使用了准确率,即被正确分类的比率。pile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),metrics=['accuracy'])任务四训练模型训练神经网络模型需要执行以下步骤:第一步,将训练数据馈送给模型;第二步,模型学习将图像和标签关联起来第三步,要求模型对测试集进行预测;第四步,验证预测是否与test_labels数组中的标签相匹配。history=model.fit(train_images,train_labels,batch_size=20,epochs=10,validation_data=(test_images,test_labels),validation_freq=1)model.summary()比较模型在测试数据集上的表现,test_loss,test_acc=model.evaluate(test_images,test_labels,verbose=2)print('\nTestaccuracy:',test_acc)model.save('model_foods.h5')任务五调用模型新建main.py,遍历test目录下的所有菜品,并对其进行预处理,方法同训练集数据。这里设置了图像与标签的映射关系,用于后续的结果输出。#导入包importosimportcv2importnumpyasnpdata=[]#存储菜品的原始图像,以备后续利用food_images=[]#存储菜品图像N=23#N为菜品的种类数#设置图像与标签的映射关系food_names_dict={0:"美食_八宝玫瑰镜糕",1:"美食_凉皮",2:"美食_凉鱼",3:"美食_德懋恭水晶饼",4:"美食_搅团",5:"美食_枸杞炖银耳",6:"美食_柿子饼",7:"美食_浆水面",8:"美食_灌汤包",9:"美食_烧肘子",10:"美食_石子饼",11:"美食_神仙粉",12:"美食_粉汤羊血",13:"美食_羊肉泡馍",14:"美食_肉夹馍",15:"美食_荞面饸饹",16:"美食_菠菜面",17:"美食_蜂蜜凉粽子",18:"美食_蜜饯张口酥饺",19:"美食_西安油茶",20:"美食_贵妃鸡翅",21:"美食_醪糟",22:"美食_金线油塔"}forroot,dirs,filesinos.walk("food/test/"):forfileinfiles:ifos.path.splitext(file)[1]=='.jpg':temp_image_ori=plt.imread(root+"/"+file)temp_image_ori=cv2.resize(temp_image_ori,(224,224))data.append(temp_image_ori)temp_image=cv2.imread(root+"/"+file)temp_image=cv2.resize(temp_image,(224,224))#temp_image=img_to_array(temp_image)food_images.append(temp_image)test_images=np.array(food_images)test_images=test_images.reshape([-1,224,224,3])/255.0importtensorflowastfmodel=tf.keras.models.load_model(r'model_foods.h5')result=model.predict(test_images)print("result:",result)importmatplotlib.pyplotasplt#解决中文显示问题plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseforiinrange(14):plt.subplot(3,5,i+1)plt.subplots_adjust(wspace=1.5)plt.xticks([])plt.yticks([])plt.grid(False)plt.imshow(data[i])plt.xlabel(food_names_dict[result[i].argmax()])plt.savefig("predict_result.png")plt.show()识别可视化结果如图6-12所示。图6-12识别结果【项目总结】本项目应用TensorFlow实现菜品识别项目,通过下载并创建数据集、预处理数据、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化工安全员岗中技术实操考核试卷含答案
- 人教版高中物理高三物理电磁学单元测试卷及答案
- 福建文旅岗2026面试自测卷习题汇编含答案
- 水利岗2026事业编面试模拟练习含解析附答案含解析
- 农业岗2026事业单位结构化面试自测卷配套答题思路
- 山东计算机岗事业单位2026面试自测卷含答案
- 消防安全知识宣传教育课件
- 2026年行政务服务中心综合窗口办事员考试题库及答案
- 2026年科学研究管理职业资格考试试卷及答案
- 2026年中医推拿学推拿康复真题及答案
- 08SS704 混凝土模块式化粪池
- 2024仁爱版初中英语单词表(七-九年级)中考复习必背
- 浙教版小学劳动六年级《项目一创意改造提效率-劳动工具的改进》教案
- 2023 年 5 月全国事业单位联考 C 类《综合应 用能力》及参考答案
- 坐标纸(A4纸直接打印就可用)
- 投笔从戎-成语故事课件
- 兽医流行病学 第七章 描述流行病学
- LY/T 2749-2016桉树速丰林配方施肥技术规程
- GB/T 18214.1-2000全球导航卫星系统(GNSS)第1部分:全球定位系统(GPS)接收设备性能标准、测试方法和要求的测试结果
- GB/T 18102-2000浸渍纸层压木质地板
- 大班综合《爷爷一定有办法》课件(平铺)
评论
0/150
提交评论