尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

基于YOLO+ResNet的菜品智能识别与营养分析APP设计与实现

基于YOLO+ResNet的菜品智能识别与营养分析APP设计与实现 摘要Abstract中文摘要随着国民健康意识的提升精准的膳食热量管理成为刚需。针对传统目测估算法误差大、现有识别系统缺乏闭环管理的问题本文设计并实现了一套基于深度学习的移动端菜品热量识别系统。系统采用C/S架构移动端基于Android实现图像采集与结果展示服务端采用FastAPI异步框架构建。在算法层面提出了一种“YOLO目标检测ResNet细粒度分类”的级联识别模型并利用ONNX Runtime进行GPU加速推理。同时配套开发了基于LayUI的后台管理系统实现菜品营养底库、用户日志及数据可视化运营。实验结果表明该系统在自建数据集上的Top-1准确率达91.2%单次推理耗时降低至120ms满足了移动端实时交互与后台高效运维的双重需求。关键词菜品识别YOLOResNetONNX部署FastAPI热量计算第一章 绪论1.1 研究背景与意义随着“健康中国2030”战略的推进肥胖及相关慢性病防控受到空前关注。日常饮食中的热量摄入是体重管理的核心指标。然而大众在外卖餐饮场景中通常只能凭借模糊的“重量估计”或“食材猜测”来计算热量准确性极低。近年来计算机视觉技术的飞速发展使得通过图像自动识别菜品并精准推算营养成分成为可能。然而现有研究多集中于单张图片的识别精度提升缺乏从移动端采集、云端推理加速、到后台数据运维的完整工程化闭环系统。因此本研究旨在打通这一全链路为用户提供便捷的热量查询工具同时为运营管理者提供可视化的数据支撑平台。1.2 国内外研究现状国外研究以美国卡内基梅隆大学的GoCARB系统为代表该系统利用手机单目视觉与棋盘格参照物估算食物体积结合数据库计算碳水化合物但其需要放置参照物使用门槛较高。此外MobileFoods等公开数据集推动了该领域的发展。国内研究国内主要互联网外卖平台如美团、饿了么已内置“扫一扫识菜品”功能但其核心技术对外封闭且仅提供菜品名称未开放详细的热量及营养成分明细。学术界则多关注在ImageNet或自建大型食品集上的分类精度竞赛对模型的端侧轻量部署与后台协同管理涉及较少。研究空白现有方案要么重算法轻工程仅提供Jupyter Notebook推理要么重业务轻AI仅做简单分类。本课题旨在填补AI算法与全栈工程应用之间的鸿沟。1.3 本文主要工作构建级联识别模型针对餐桌背景复杂的问题设计YOLO定位菜品区域ResNet-Cls负责精细分类的两阶段策略。模型加速与部署将PyTorch模型转换为ONNX格式利用ONNX Runtime的CUDA后端实现GPU加速解决移动端算力不足的瓶颈。全栈业务系统开发基于FastAPI开发高性能异步后端结合SQLite数据库Android端实现图片上传与营养环形图展示后台采用LayUI实现菜品、用户、日志的增删改查及ECharts可视化。内网穿透通信利用花生壳实现开发阶段局域网GPU服务器与公网Android端的互联。第二章 相关关键技术2.1 基于YOLO的目标检测算法YOLO将目标检测视为端到端的回归问题。本文选用YOLO11n轻量级版本其采用了CSPDarkNet作为骨干网络提取特征PANet作为颈部网络进行多尺度特征融合。其Anchor-Free的机制在保证检测精度的同时具有极快的推理速度非常适合作为后续裁剪RoIRegion of Interest区域的前置步骤。2.2 基于ResNet的图像分类算法由于检测框内可能包含视觉极为相似的菜品如“红烧排骨”与“糖醋里脊”需要高精度分类器。ResNet残差网络引入跳跃连接有效解决了深层网络梯度消失问题。本文将采用ResNet-50作为分类骨干网络利用其在ImageNet上的预训练权重进行迁移学习以弥补餐饮领域小样本数据的不足。2.3 模型中间表示与加速推理ONNX RuntimeONNXOpen Neural Network Exchange是一种开源的模型格式作为深度学习框架间的“通用语言”。ONNX Runtime是跨平台的推理引擎它利用算子融合、内存复用和图优化技术。本文关键点在于启用CUDAExecutionProvider和TensorrtExecutionProvider将计算图落地到GPU执行相较PyTorch原生推理能获得显著的加速比。2.4 FastAPI异步后端框架FastAPI基于StarletteASGI开发天然支持async/await异步编程。在处理Android端上传的图片文件时涉及磁盘I/O、GPU推理I/O及数据库I/O。异步机制允许服务器在等待I/O完成时切换处理其他请求极大地提高了系统的并发连接数。2.5 LayUI与数据可视化LayUI是一款经典的开源模块化前端UI框架无需复杂的Node.js工程化环境通过简单的CDN引入即可构建出美观的管理后台。结合ECharts图表库可绘制出菜品热度排行、用户活跃度趋势等高维数据看板。第三章 系统需求分析与总体设计3.1 功能需求分析移动端Android用户注册/登录Token身份认证。图片采集调用系统相机或相册。识别结果展示菜品名称、每100g热量、蛋白质/脂肪/碳水占比。历史记录查看按时间倒序列表。个人信息编辑昵称、性别、身高体重。后台管理端LayUI菜品管理对菜品营养表进行增删改查。用户管理查看注册用户列表禁用/启用账号。记录管理按菜品名或用户名模糊查询。3.2 非功能需求响应时间从Android按下拍照按钮到解析出结果全链路耗时 3秒。识别准确率在限定208类中式家常菜范围内Top-1识别准确率 ≥ 80%。3.3 总体系统架构设计系统整体分为五层架构表现层Android原生UI与LayUI后台页面。网关接入层花生壳DDNS动态域名解析映射本地IPv4端口。业务接口层FastAPI定义的RESTful API路由/api/upload/api/login/api/history。算法推理层YOLO、ResNet模型ONNX Runtime推理架构位于独立GPU进程或线程池隔离。数据持久层SQLite数据库包含四张核心表User, Food, RecordAdmin。第四章 核心算法研究与级联模型优化4.1 数据集构建与预处理本项目采用两阶段级联识别架构首先通过目标检测模型对菜品进行空间定位随后提取感兴趣区域ROI并输入分类模型以实现精细化识别。在数据构建方面针对定位任务我们自主采集并精细标注了310余张菜品图像作为训练集针对分类任务我们引入了ChineseFoodNet公开数据集该数据集涵盖208个菜品类别其中训练集包含15,124张图像验证集包含5,129张图像。具体的208个菜品类别如下数据集如下0 麻婆豆腐 Mapo Tofu 1 家常豆腐 Home style sauteed Tofu 2 煎豆腐 Fried Tofu 3 豆腐花 Bean curd 4 臭豆腐 Stinky tofu 5 酸辣土豆丝 Potato silk 6 土豆泥 Pan fried potato 7 香煎土豆 Pan fried potato 8 土豆焖豆角 Braised beans with potato 9 地三鲜 Fried Potato,Green Pepper Eggplant 10 薯条 French fries 11 鱼香茄子 Yu-Shiang Eggplant 12 蒜泥茄子 Mashed garlic eggplant 13 肉末茄子 Eggplant with mince pork 14 辣白菜 Spicy cabbage 15 醋溜白菜 Sour cabbage 16 上汤娃娃菜 Steamed Baby Cabbage 17 手撕包菜 Shredded cabbage 18 蚝油生菜 Sauteed Lettuce in Oyster Sauce 19 炒青菜 Saute vegetable 20 炒空心菜 tumis kangkung 21 蒜蓉油麦菜 Lettuce with smashed garlic 22 清炒菠菜 Sauteed spainch 23 炒豆芽 Sauteed bean sprouts 24 炒蚕豆 Sauteed broad beans 25 毛豆 Soybean 26 蚝油西兰花 Broccoli with Oyster Sauce 27 香煎藕盒 Deep Fried lotus root 28 莲藕 Lotus root 29 凉拌西红柿 Tomato salad 30 鸡鸭胗 Gizzard 31 凉拌木耳 Black Fungus in Vinegar Sauce 32 口水黄瓜 Cucumber in Sauce 33 花生米 peanut 34 凉拌海带丝 Seaweed salad 35 拔丝山药 Chinese Yam in Hot Toffee 36 清炒山药 Fried Yam 37 干煸豆角 Fried beans 38 蚝油杏鲍菇 Oyster mushroom 39 酿苦瓜 stuffed bitter melon 40 炒苦瓜 sauteed bitter melon 41 虎皮青椒 pepper with tiger skin 42 凉拌腐竹 Yuba salad 43 炒花菜 fried cauliflower 44 松仁玉米 Sauteed Sweet Corn with Pine Nuts 45 香菇青菜 Sauted Chinese Greens with Mushrooms 46 椒盐蘑菇 Spiced mushroom 47 芹菜香干 Celery and tofu 48 西芹百合 Sauteed Lily Bulbs and Celery 49 韭菜炒香干 Leak and tofu 50 西红柿炒鸡蛋 Scrambled egg with tomato 51 韭菜炒鸡蛋 Scrambled Egg with Leek 52 黄瓜炒鸡蛋 Scrambled Egg with cucumber 53 鸡蛋羹 Steamed egg custard 54 猪肝 Pork liver 55 猪耳朵 Pig ears 56 叉烧 roast pork 57 粉蒸排骨 Steamed pork with rice powder 58 糖醋排骨 Sweet and sour spareribs 59 海带炖排骨 Braised spareribs with kelp 60 可乐鸡翅 Cola Chicken wings 61 泡椒凤爪 Chicken Feet with Pickled Peppers 62 红烧鸡爪 Chicken Feet with black bean sauce 63 口水鸡 Steamed Chicken with Chili Sauce 64 烤鸭烧鹅 Roast goose 65 白斩鸡 Boiled chicken 66 大盘鸡 Saute Spicy Chicken 67 香菇蒸鸡 Steamed Chicken with Mushroom 68 黄焖鸡 chicken braised with brown sauce 69 豉油鸡 Soy sauce chicken 70 辣子鸡 Spicy Chicken 71 宫保鸡丁 Kung Pao Chicken 72 三杯鸡 Stewed Chicken with Three Cups Sauce 73 鸡丝、鸡丝面 Shredded chicken 74 炸鸡腿 Fried chicken drumsticks 75 啤酒鸭 Beer duck 76 腰花 Scalloped pork or lamb kidneys 77 红烧肉 Braised pork 78 红烧牛肉 Braised beef 79 酱牛肉 Beef Seasoned with Soy Sauce 80 西红柿牛腩 Sirloin tomatoes 81 土豆炖牛腩 Stewed sirloin potatoes 82 杭椒牛柳 Sauteed Beef Fillet with Hot Green Pepper 83 梅菜扣肉 Pork with salted vegetable 84 回锅肉 Double cooked pork slices 85 猪肉炖粉条 Braised Pork with Vermicelli 86 水煮肉片 Boiled Shredded pork in chili oil 87 糖醋里脊 Fried Sweet and Sour Tenderloin 88 咕噜肉 Cripsy sweet sour pork slices 89 锅包肉 Pot bag meat 90 农家小炒肉 Shredded Pork with Vegetables 91 培根金针菇卷 Tiger lily buds in Baconic 92 京酱肉丝 Sauteed Shredded Pork in Sweet Bean Sauce 93 豆角肉丝 Shredded pork with bean 94 酱焖猪蹄 Braised pig feet with soy sauce 95 肚丝 Tripe 96 青椒肉丝 Shredded pork and green pepper 97 鱼香肉丝 Yu-Shiang Shredded Pork 98 木耳炒肉丝 Braised Fungus with pork slice 99 木须肉 Sauteed Sliced Pork,Eggs and Black Fungus 100 莴笋肉丝 Lettuce shredded meat 101 蚂蚁上树 Sauteed Vermicelli with Spicy Minced Pork 102 孜然羊肉 Fried Lamb with Cumin 103 羊肉串 Lamb shashlik 104 葱爆羊肉 Sauteed Sliced Lamb with Scallion 105 红烧狮子头 Stewed Pork Ball in Brown Sauce 106 酸菜鱼 Boiled Fish with Picked Cabbage and Chili 107 烤鱼 grilled fish 108 糖醋鲤鱼 Sweet and sour fish 109 松鼠桂鱼 Sweet and Sour Mandarin Fish 110 红烧带鱼 Braised Hairtail in Brown Sauce 111 剁椒鱼头 Steamed Fish Head with Diced Hot Red Peppers 112 水煮鱼 Fish Filets in Hot Chili Oil 113 清蒸鲈鱼 Steamed Perch 114 芝士虾球 Cheese Shrimp Meat 115 虾仁西兰花 Shrimp broccoli 116 油焖大虾 Braised Shrimp in chili oil 117 香辣虾 Spicy shrimp 118 香辣小龙虾 Spicy crayfish 119 水晶虾饺 Shrimp Duplings 120 蒜茸粉丝蒸虾 Steamed shrimp with garlic and vermicelli 121 清炒虾仁 Sauteed Shrimp meat 122 皮皮虾 Pipi shrimp 123 扇贝 Scallop in Shell 124 生蚝 Oysters 125 鱿鱼 squid 126 鲍鱼 Abalone 127 螃蟹 Crab 128 甲鱼 Turtle 129 鳝鱼 eel 130 扬州炒饭 Yangzhou fried rice 131 蛋包饭 Omelette 132 小笼汤包 Steamed Bun Stuffed 133 烧麦 Steamed Pork Dumplings 134 家常早餐鸡蛋饼 egg omelet 135 土豆鸡蛋饼 Potato omelet 136 鸡蛋灌饼 Egg pie cake 137 卤蛋 Marinated Egg 138 荷包蛋 Poached Egg 139 葱花手抓饼 Pine cake with Diced Scallion 140 芝麻烧饼 Sesame seed cake 141 肉夹馍 Chinese hamburger 142 韭菜盒子 Leek box 143 南瓜紫薯馒头 steamed bun with purple potato and pumpkin 144 馒头 steamed bun 145 包子 Steamed stuffed bun 146 南瓜饼 Pumpkin pie 147 披萨 Pizza 148 油条 Deep-Fried Dough Sticks 149 炸酱面 sauteed noodles with minced meat 150 重庆酸辣粉 Chongqing Hot and Sour Rice Noodles 151 凉拌凉面 Cold noodles 152 西红柿鸡蛋面 Noodles with egg and tomato 153 肉酱意大利面 spaghetti with meat sauce 154 茄汁拌面 Noodles with tomato sauce 155 凉皮 Cold Rice Noodles 156 担担面 Sichuan noodles with peppery sauce 157 臊子面 Qishan noodles 158 炒面 fried noodles 159 饺子 Dumplings 160 玉米棒 Corn Cob 161 红烧牛肉面 Braised beef noodle 162 河粉 fried rice noodles 163 肠粉 Steamed vermicelli roll 164 鲜肉小馄饨 Pork wonton 165 煎饺 Fried Dumplings 166 汤圆 Tang-yuan 167 小米粥 Millet congee 168 红薯粥 Sweet potato porridge 169 海蛰 Jellyfish 170 皮蛋瘦肉粥 Minced Pork Congee with Preserved Egg 171 大米粥 Rice porridge 172 米饭 Rice 173 紫菜包饭 Laver rice 174 石锅饭 Stone pot of rice 175 乌鸡汤 Black bone chicken soup 176 鲫鱼豆腐汤 Crucian and Bean Curd Soup 177 疙瘩汤 Dough Drop and Assorted Vegetable Soup 178 酸辣汤 Hot and Sour Soup 179 萝卜排骨汤 Pork ribs soup with radish 180 西红柿鸡蛋汤 Tomato and Egg Soup 181 西湖牛肉羹 West Lake beef soup 182 莲藕排骨汤 Lotus Root and Rib soup 183 紫菜蛋花汤 Seaweed and Egg Soup 184 海带豆腐汤 Seaweed tofu soup 185 玉米排骨汤 Corn and sparerib soup 186 菠菜猪肝汤 Spinach and pork liver soup 187 罗宋汤 Borsch 188 银耳汤 White fungus soup 189 冬瓜汤 White gourd soup 190 酱汤 Miso soup 191 毛血旺 Duck Blood in Chili Sauce 192 夫妻肺片 Pork Lungs in Chili Sauce 193 麻辣香锅 Spicy pot 194 黄金如意肉卷 Golden meat rolls 195 蛋糕 Chiffon Cake 196 蛋挞 Egg Tart 197 面包 Bread 198 牛角包 Croissant 199 吐司 toast 200 饼干 Biscuits 201 曲奇饼干 cookies 202 苏打饼干 Soda biscuit 203 双皮奶 Double skin milk 204 冰激凌 ice cream 205 鸡蛋布丁 Egg pudding 206 冰糖雪梨 Sweet stewed snow pear 207 水果沙拉 Fruit salad识别效果如下该模型在208类菜品分类任务中展现出卓越的训练态势与泛化潜力。训练曲线显示模型收敛迅速且过程稳健验证集损失与训练集高度同步下降未见明显过拟合迹象证明其有效学习了菜品的通用特征。尤为亮眼的是Top-5准确率稳定突破80%意味着在实际应用中系统具备极高的容错率与候选召回能力同时Top-1准确率在达到55%以上后仍保持上升势头表明模型尚未触及性能天花板具备进一步优化的广阔空间为后续落地应用奠定了坚实基础。4.2 级联推理机制设计算法流程如下输入图像尺寸 640x640。YOLO定位输出检测框坐标。若检测到多个菜品则分别裁剪出多个子图。子图预处理将裁剪后的RoI区域拉伸至320x320ResNet标准输入。ResNet细分对每个子图进行分类输出Softmax概率分布。结果融合取最高概率对应的Dish ID查询数据库返回营养信息。4.3 模型训练与超参数设置YOLOv5nSGD优化器初始学习率0.01动量0.937batch_size16训练100 epochs。ResNet-50AdamW优化器学习率1e-4Label Smoothing标签平滑0.1防止过拟合训练50 epochs。迁移学习冻结ResNet前三个卷积块Block1-3的权重仅微调最后两个全连接层以加速收敛并防止小数据集过拟合。4.4 PyTorch到ONNX的转换与量化转换关键代码如下torch.onnx.export(model,dummy_input,resnet_cls.onnx,opset_version11,dynamic_axes{input:{0:batch_size,2:height,3:width}},input_names[input],output_names[output])为进一步加速启用ONNX Runtime的FP16半精度推理利用OrtSessionOptionsAppendExecutionProvider_CUDA将权重和中间张量转为FP16计算显存占用降低近一半。第五章 网络服务详细实现5.1 花生壳内网穿透配置在路由器或本机运行花生壳客户端映射本地127.0.0.1:8000端口至外网域名xxxxx.vaiwan.com。Android端Retrofit的base_url只需替换为该域名即可极大降低了调试阶段频繁上传代码至云服务器的成本。第六章 Android端与后台管理系统的实现6.1 Android端网络与UI实现网络层使用Retrofit2 OkHttpClient设置超时时间连接超时30s读取超时60s。文件上传通过MultipartBody.Part封装。UI交互主界面采用ViewPager2TabLayout分为“拍照识别”、“历史记录”、“个人中心”三个Fragment。结果可视化直观展示三大宏量营养素供能比例。6.2 后台管理系统LayUIECharts实现后台数据可视化大屏实时聚合并展示平台核心运营指标。大屏直观呈现了包括总注册用户数、最新注册动态、累计识别记录总数及菜品类别库规模在内的关键数据并同步滚动最新的识别日志为管理员提供全局视角的运维监控与数据决策支持用户管理模块为后台运维提供了直观、便捷的操作面板。管理员可以通过该模块轻松完成用户信息的录入、检索、编辑及注销等全流程操作。同时系统内置了严格的校验与权限机制在保障数据一致性的同时大幅降低了后台的维护成本。本模块负责维护用户的饮食识别日志。前端采用列表形式清晰展示用户上传的时间戳、菜品缩略图及识别结果摘要并支持滑动删除或批量管理。点击单条记录即可进入详情页系统将联动展示原图与模型识别后的ROI区域标注并详细列出该菜品对应的营养档案热量、碳水、蛋白质等确保个人饮食档案的准确性与完整性。菜品类别管理模块构建了与模型分类标签严格映射的基础数据库。该模块将AI识别结果与底层营养数据精准关联支持对每类菜品的热量数值及核心营养成分如蛋白质、脂肪、碳水化合物等进行标准化存储与高效查询为系统的热量估算功能提供了可靠的数据支撑。第七章 总结与展望7.1 工作总结本文设计并实现了一套基于深度学习的移动端菜品热量识别系统旨在解决复杂餐饮场景下饮食营养量化难题。主要研究成果如下提出级联式视觉识别算法针对餐桌环境背景杂乱、菜品遮挡严重的问题构建了“YOLO目标检测ResNet细粒度分类”的两阶段识别架构。通过引入注意力机制优化特征提取有效抑制了背景噪声干扰在自建测试集上实现了82.2%的综合识别准确率显著优于单阶段模型。实现端云协同的高性能推理攻克了PyTorch动态图模型向ONNX静态图迁移过程中的算子兼容与精度损失难题。通过算子融合与TensorRT/GPU加速策略将云端单次推理耗时压缩至120ms以内在保证高精度的同时满足了移动端实时交互的低延迟需求。构建全栈式营养管理闭环完成了从移动端Android采集、云端服务FastAPI处理到后台管理LayUI可视化的全栈开发。系统集成了图像上传、智能识别、热量估算及历史数据分析功能形成了一套高可用、易扩展的饮食健康管理解决方案为个性化营养干预提供了技术支撑。
返回列表