查看原文
其他

阿姨,我点的是韭菜,不是大葱

贝史涛 开源中国 2020-09-02

作者:贝史涛,2019中国高校计算机大赛-人工智能创意赛二等奖获得者


随着信息技术的发展,我国餐饮建设也发生了很大变化。目前食堂大多以人工为主,推行一卡通消费,即自助选菜然后人工结算,这与以往使用饭票或现金结算相比,省去了找零的麻烦,在效率上有一定的提升。
人工结算之所以效率低下,是因为食堂工作人员需要首先识别菜品种类,然后对应每种菜品价格,最后口头累计消费数额并打卡,同时在计算金额的过程中也可能会出错。这整一过程不仅需要较长时间,而且准确率也难以保证 近年来,在快餐式食堂领域也出现了通过RFID芯片、碗盘颜色识别等技术实现的机器结算。但是,随着顾客数量的日益增长,这已不能满足他们在就餐高峰期对结算速度的需求。
通过调研分析,我们发现尽管目前市场上已出现RFID芯片、碗盘颜色的智能识别方式,但仍存在成本高、灵活度低等问题,菜品图像识别相较于它们有着巨大优势。 图像识别技术基于深度学习。世界知名的开源深度学习框架有Google推出TensorFlow、Facebook推出Pytorch,而国内我们有飞桨
基于飞桨模型,并借助百度AI Studio开发平台以及平台提供的Tesla V100 GPU算力,我们开发了基于深度学习的菜品识别模型,开发了移动端、后端应用系统,并通过软硬件结合的形式进行部署。在下文中,我们将为大家解析此过程。

01
实现过程
我们首先对托盘中的图像进行分割检测,将分离出来的图像再进行菜品图像识别。


霍夫变换


盛载菜品食物的碗盘器具基本是圆形的,因此对餐盘图像去噪后用霍夫圆变换实现对菜品碗盘位置的检测,实现碗盘分离。 霍夫变换是图像处理中的一种特征提取技术,该过程在一个参数空间中通过计算累计结果的局部最大值得到一个符合该特定形状的集合作为霍夫变换结果。
通过OpenCV中的霍夫圆变换,先识别出在菜品托盘识别台上俯视拍摄的照片,经过OpenCV的处理和霍夫圆变换,根据摄像头像素对霍夫圆参数进行调整,根据菜盘(这里统一为类圆形厨具)形状,最终取得效果如图。


数据集准备及处理


菜品数据集
菜品识别通过飞桨实现,起初对每样菜品拍摄一张俯视图。菜品识别的实质就是图像分类。因此,每个分类只有一个训练图片是肯定不够的。而多张重复的拍摄则会导致效率低下,延长处理时间。基于上述情况,团队通过图像增广处理来扩大每一分类的菜品的数据集,也减少了在实际环境下光线等环境因素对识别效果的影响。菜品图像来源自就近校园餐厅食堂。(该模型是针对某个食堂中的所有菜品而训练的模型,并非在所有食堂中通用 经过旋转处理、亮度处理、色度处理、对比度处理、锐度处理以及图像弹性扭曲处理后,使每个分类标签的数据集扩大至54张增广图像和1张原始图像共55张图片,并将这55张图片按1:10的比例划分测试集和训练集。本次菜品共35道,共计测试集图像175张,训练集图像1750张。

 

 (1) 旋转处理 (23张) :旋转角度α=15β(0<β<24),在旋转后通过比例计算得到边长缩放比为:

1:(|sin(α)|+|cos(α)|)

旋转处理示例图

(2)亮度处理(6张):亮度系数0.6, 0.75, 0.9, 1.1, 1.25, 1.4。

图亮度处理示例图
(3)色度处理(6张),色度系数为0.7, 0.8, 0.9, 1.1, 1.2, 1.3。

色度处理示例图
(4)对比度处理(6张),对比度系数为0.7, 0.8, 0.9, 1.1, 1.2, 1.3。

对比度处理示例图
(5)锐度处理(6张),锐度系数为0.7, 0.8, 0.9, 1.1, 1.2, 1.3。

锐度处理示例图
(6)图像弹性扭曲(7张),通过Augmentor库对图像进行弹性扭曲处理。

弹性扭曲示例图
评论数据集
数据集来源于通过Python爬虫得到的60000多条某区域餐厅评论,经过整理筛选过滤无效、灌水等评论最终划分好评和差评各12000条。
通过预训练词向量模型和分词工具对原始数据进行分词和词向量匹配,根据常见词的使用量,在250000多个词中取出了最常用的70000个词,如果遇到在词向量中但非常用的词向量,则也置为0。
输入数据最终转化为list类型,如下例:
原句:“食堂异味很重,饭也不好吃!”分词:['食堂', '异味', '很', '重', '饭', '也', '不', '好吃']匹配:[2882, 23056, 34, 1218, 1421, 18, 10, 1452]

配置网络


菜品识别网络模型
配置网络包括三个部分:网络模型、损失函数及优化函数。由于数据集较小,网络模型采用了resnet18:https://github.com/PaddlePaddle/models/blob/develop/PaddleCV/image_classification/models/resnet_vd.py


Resnet网络结构 读取图片过程中对图片进行均值处理并归一化,在basic_block中将激活函数由relu改为了leaky_relu解决Relu函数进入负区间后,导致神经元不学习的问题,训练集和测试集的准确率达99%。 情感倾向分析网络模型
栈式双向LSTM架构,详见百度飞桨官方指导:https://www.paddlepaddle.org.cn/documentation/docs/zh/beginners_guide/basics/understand_sentiment/index.html

训练网络


针对个人和机构AI研究者普遍缺乏算力的现状,AI Studio平台免费提供基础版(CPU:2 Cores RAM:8GB,Disk:100GB)和高级版(GPU:Tesla V100,Video Mem:16GB;CPU:8Cores,RAM:32GB, Disk:100GB)两种运行环境。本项目模型训练过程选用GPU高级版运行环境。 训练分为三步:第一步配置好GPU训练环境;第二步用训练集进行训练;第三步保存好训练的模型。
02
项目效果

VisualDL数据可视化


模型准确率达99%以上。


03
模型预测
菜品识别网络模型
预测程序为独立代码模块,可独立运行。预测主要分为四步:
第一步:配置预测环境;第二步:预处理预测图片。将非RGB图片进行模式转换,转为RGB模式;对预测图片进行裁剪和缩放,调整大小为[3, 224, 224];第三步:加载预测模型并将预测图像放入模型进行预测;第四步:输出预测结果,确定结果所属类别。

 
在上图中的左侧图片框中显示的是菜品摄像头实时拍摄的某帧画面,托盘中有芹菜炒肉、番茄炒蛋和米饭三样菜。在后端通过霍夫圆处理后并调用模型进行预测,最终将数据返回并在移动端显示,可以从上图中的右侧移动端截图中看到结果预测正确,该预测模型在35种菜品类别的数据集中能达到99%以上的准确度。
 情感倾向分析网络模型
预测程序为独立代码模块,可独立运行。预测主要分为四步:
第一步:配置预测环境;第二步:预处理预测文本,通过预训练词向量模型对文本进行转换,处理为索引集结果;第三步:加载预测模型并将预测文本放入模型进行预测;第四步:输出预测结果,确定结果所属类别。 这里以前端页面来模拟结果回显。

软硬件结合


系统通过软硬件结合形式完成整一流程。硬件主体由一个放置台和两个摄像头组成,通过无线路由器将设备连接在同一测试网络下。本设备中使用的是海康威视网络摄像头。
在实物图中,位于上方的摄像头用于人脸识别,下方的摄像头用于识别托盘中的菜品并计价。在实际情况中,对菜品识别成功并计价后,下方摄像头停止识别,人脸识别摄像头开始检测人脸,识别并支付成功后,菜品摄像头继续识别,等待下一位用户的到来。


04
应用前景


市场分析


在社会节奏加快,高校或企业食堂用餐高峰更加集中以及外卖行业盛行的三重压力下,食堂对效率更高的结算系统的需求愈加突出。在此环境下,智能识别,智能结算一体化系统应运而生。
针对用户属于社会高水平教育接受者的现实,该项目适当拓展产业链,开发与消费者距离更短的终端APP以提高利润空间。
由于市场上同质产品较少,市场空白较多,因此该项目隐藏着巨大的发展空间。并且作为行业的先驱者,基于项目客户粘性大的优势,迅速占领市场后,可以较好地维持活跃用户数量。

客户分析


高校食堂
高校食堂下课时间集中,该系统不仅可以增加结账速度,还可以在识别菜品的情况下,分析师生口味,推出套餐活动。另外,在高校,利用学生老师对高科技敏感度,可以加强营销优势。 大企业食堂
与高校食堂相似,员工午休时间集中,企业食堂需要更加注重工作效率,且企业食堂人员较为固定,在支付系统中使用的人脸识别可以较好地被使用。
自助式餐厅
市场竞争,餐厅菜色的频繁性改变和各种减价优惠的不定期更新,导致识别菜盘颜色不再适用于餐厅加快结账速度。不仅是个体经营,该项目还能将数据加以整合,形成较为完整的前端数据,因此适用于快餐类连锁式餐厅。
>> 阅读原文,了解更多内容。
推荐阅读

Qt开发者将可使用VS开发Linux项目

Golang 之禅

Ubuntu 20.04壁纸来了,这只猫有“镭射眼”

谷歌开始吃自家新系统Fuchsia狗粮

十年来影响最大的C++ 20准备发布,C++ 23提上议程

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存