文章目录

  • 1. 数据集的制作
    • 1.1 使用爬虫采集数据集
    • 1.2 使用labelme对图片进行标注
  • 2. YOLOv8
    • 2.1YOLO算法简单介绍
    • 2.2 YOLOv8获取与调试
      • 2.2.1 通过pip的方式安装yolov8
      • 2.2.2 安装yolov8训练所需的第三方库:
      • 2.2.3 配置自己的yaml文件
      • 2.2.4 开始训练
      • 2.2.5 预测
  • 3. Flask
  • 4. OpenCV
    • 安装
  • 5. 数据库
  • 6. 摄像头识别添加至购物车
    • 6.1 前端
    • 6.2 后端
  • 7.图片识别添加至购物车
    • 7.1前端
    • 7.2后端
  • 8.用户点击添加至购物车
  • 9.用户注册登录,用户个人信息修改
  • 10.商品展示
  • 11.商品分类展示
  • 12.商品详情展示
  • 13.购物车商品展示和购物车内商品移除
  • 14. 结算
  • 后端完整代码

全流程教程,从数据采集到模型使用到最终展示。 支持用户点击添加至购物车、图片识别添加至购物车、摄像头识别添加至购物车,还包括用户信息,商品展示等功能。若有任何疑问和建议欢迎评论区讨论。

摄像头识别添加至购物车


图片识别添加至购物车

用户点击添加至购物车


先放上最终UI实现效果,UI又更新了一波。所以下面视频和新UI可能不太相同。

1. 数据集的制作

已经处理了一份数据形成了对应的数据集。 数据集包括200种常见的商品,如可乐、泡面、薯片等。有训练图片6000张,测试图片1000张。

['上好佳荷兰豆55g', '菜园小饼80g', '上好佳鲜虾片40g', '上好佳蟹味逸族40g', '妙脆角魔力炭烧味65g', '盼盼烧烤牛排味块105g', '上好佳鲜虾条40g', '上好佳洋葱圈40g', '上好佳日式鱼果海苔味50g', '奇多日式牛排味90g', '奇多美式火鸡味90g', '上好佳粟米条草莓味40g', '甘源蟹黄味瓜子仁75g', '惠宜开心果140g', '惠宜咸味花生350g', '惠宜腰果160g', '惠宜枸杞100g', '惠宜地瓜干228g', '惠宜泰国芒果干80g', '惠宜黄桃果干75g', '惠宜柠檬片65g', '新疆和田滩枣454g', '惠宜香菇100g', '惠宜桂圆干500g', '惠宜茶树菇200g', '豪雄单片黑木耳150g', '惠宜煮花生454g', '惠宜黄花菜100g', '洽洽凉茶瓜子150g', '洽洽奶香味瓜子150g', '车仔茶包绿茶50g', '车仔茶包红茶50g', '优乐美香芋味80g', '优乐美红豆奶茶65g', '欢泥冲调土豆粥25g', '江中猴姑早餐米稀40g', '永和豆浆甜豆浆粉210g', '立顿柠檬风味茶180g', '桂格多种莓果麦片40g', '荣怡谷麦加黑米味30g', '荣怡谷麦加红豆味30g', '今野香辣牛肉面112g', '今野老坛酸菜牛肉面118g', '今野红烧牛肉面114g', '合味道海鲜风味84g', '康师傅白胡椒肉骨面76g', '康师傅香辣牛肉面105g', '康师傅香辣蒜味排骨面108g', '康师傅藤椒牛肉面82g', '华丰鸡肉三鲜伊面87g', '康师傅黑胡椒牛排面104g', '五谷道场红烧牛肉面100g', '康师傅老坛酸菜牛肉面114g', 'Aji泡芙饼干芒果菠萝味60g', '庆联蓝莓味夹心饼63g', '庆联凤梨味夹心饼63g', '庆联草莓味夹心饼63g', '嘉顿威化饼干草莓味50g', '嘉顿威化饼干柠檬味50g', '爱时乐香草牛奶味50g', '爱时乐巧克力味50g', '百力滋海苔味60g', '百力滋草莓牛奶味45g', '雀巢脆脆鲨80g', '纳宝帝巧克力味威化58g', '桂力地中海风味面包条50g', '康师傅妙芙巧克力味48g', '爱乡亲唱片面包90g', '达利园派草莓味单个装*', 'mini奥利奥55g', '农夫山泉矿泉水550ml', '怡宝矿泉水555ml', '可口可乐零度500ml', '可口可乐500ml', '百事可乐600ml', '芬达苹果味500ml', '芬达橙味500ml', '雪碧500ml', '喜力啤酒500ml', '百威啤酒600ml', '百事可乐330ml', '可口可乐330ml', '王老吉310ml', '茶派柚子绿茶500ml', '茶派玫瑰荔枝红茶500ml', '康师傅冰红茶250ml', '加多宝250ml', 'RIO果酒水蜜桃味275ml', 'RIO果酒蓝玫瑰威士忌味275ml', '牛栏山二锅头100ml', '哈尔滨啤酒330ml', '青岛啤酒330ml', '雪花啤酒330ml', '哈尔滨啤酒500ml', 'KELER啤酒500ml', '百威啤酒500ml', 'QQ星全聪奶125ml', 'QQ星均膳奶125ml', '娃哈哈AD钙奶220g', '活力宝动力源105ml', '旺仔牛奶复原乳250ml', '伊利纯牛奶250ml', '维他低糖原味豆奶250ml', '百怡花生牛奶250ml', '惠宜原味豆奶250ml', '伊利优酸乳250ml', '伊利早餐奶250ml', '达利园桂圆莲子360g', '银鹭冰糖百合银耳280g', '喜多多什锦椰果567g', '都乐菠萝块567g', '都乐菠萝块234g', '银鹭薏仁红豆粥280g', '银鹭莲子玉米粥280g', '银鹭紫薯紫米粥280g', '银鹭椰奶燕麦粥280g', '银鹭黑糖桂圆280g', '梅林午餐肉340g', '珠江桥牌豆豉鱼150g', '古龙原味黄花鱼120g', '雄鸡标椰浆140ml', '德芙芒果酸奶巧克力42g', '德芙摩卡巴旦木巧克力43g', '德芙百香果白巧克力42g', 'MM花生牛奶巧克力豆40g', 'MM牛奶巧克力豆40g', '好时牛奶巧克力40g', '好时曲奇奶香白巧克力40g', '脆香米海苔白巧克力24g', '脆香米奶香白巧克力24g', '士力架花生夹心巧克力51g', '士力架燕麦花生夹心巧克力40g', '士力架辣花生夹心巧克力40g', '炫迈果味浪薄荷味37g', '炫迈果味浪柠檬味37g', '炫迈薄荷味21g', '炫迈葡萄味21g', '炫迈西瓜味21g', '炫迈葡萄味50g', '绿箭无糖薄荷糖茉莉花茶味34g', '绿箭5片装15g', '比巴卜棉花泡泡糖可乐味11g', '比巴卜棉花泡泡堂葡萄味11g', '星爆缤纷原果味25g', '阿尔卑斯焦香牛奶味硬糖45g', '阿尔卑斯牛奶软糖黄桃酸奶味47g', '阿尔卑斯牛奶软糖蓝莓酸奶味47g', '王老吉润喉糖28g', '伊利牛奶片蓝莓味32g', '熊博士口嚼糖草莓牛奶味52g', '彩虹糖原果味45g', '宝鼎天鱼陈酿米醋245ml', '恒顺香醋340ml', '太太乐鸡精200g', '家乐香菇鸡茸汤料41g', '惠宜辣椒粉15g', '惠宜生姜粉15g', '味好美椒盐20g', '海星加碘精制盐400g', '恒顺料酒500ml', '东古味极鲜酱油150ml', '东古一品鲜酱油150ml', '欣和六月鲜酱油160ml', '李施德林零度漱口水80ml', '舒肤佳纯白清香沐浴露100ml', '美涛定型啫喱水60ml', '清扬男士洗发露活力运动薄荷型50ml', '蓝月亮风清白兰洗衣液80g', '高露洁亮白小苏打180g', '高露洁冰爽180g', '舒亮皓齿白80g', '云南白药牙膏45g', '舒克宝贝儿童牙刷', '清风原木纯品金装100x3', '洁柔face150x3', '斑布100x3', '维达婴儿150x3', '相印小黄人150x3', '清风原木纯品黑耀150x3', '洁云绒触感130x3', '舒洁萌印花120x2', '相印红悦130x3', '得宝苹果木味90x4', '清风新韧纯品130x3', '金鱼竹浆绿135x3', '清风原木纯品150x2', '洁柔face130x3', '维达立体美110x3', '洁柔CS单包*', '相印小黄人单包*', '清风原色单包*', '相印茶语单包*', '清风质感纯品单包*', '米奇1928笔记本', '广博固体胶15g', '票据文件袋', '晨光蜗牛改正带', '鸿泰液体胶50g', '马培德自粘性标签', '东亚记号笔']

自己制作数据集可以参考如下步骤

1.1 使用爬虫采集数据集

可以通过爬虫爬取商品的图片。
这里直接上代码,如果想详细了解可以参考我的另外一篇文章python爬取百度图片,可以大量批量爬取(仅供学习,很详细)

import requests#导入请求库
import time
import re
#设定爬取的总数
total=90
batch_size=30
all_success=0
for i in range(total//batch_size):url='https://image.baidu.com/search/acjson?tn=resultjson_com&logid=10371129381236677678&ipn=rj&ct=201326592&is=&fp=result&fr=&word=可乐&queryWord=可乐&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=&copyright=&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&expermode=&nojc=&isAsync=&pn={0}&rn=30&gsm=3c&1682846532783='.format((i+1)*30)headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36'}res=requests.get(url,headers=headers)#发送请求,返回数据html=res.text#把返回的内容解析# 使用正则表达式匹配图片urlimg_url_list=re.findall('"thumbURL":"(.*?)"',html)#print(img_url_list)for j in range(len(img_url_list)):res_img=requests.get(img_url_list[j],headers=headers)img=res_img.content#这个里是图片,我们需要返回二进制数据# 图片保存的路径with open('D:\\code\\person\\mask\\'+str(all_success)+'mask_img.jpg','wb')as f:f.write(img)time.sleep(3)#每当保存一张图片,先暂停一下,不然太频繁容易发现是机器爬虫,导致无法获取all_success=all_success+1print("爬取{}张图片成功".format(all_success))
print("爬取{}张图片成功".format(all_success))

1.2 使用labelme对图片进行标注

labelme是图形图像注释工具,它是用Python编写的,并将Qt用于其图形界面。说直白点,它是有界面的, 像软件一样,可以交互,但是它又是由命令行启动的,比软件的使用稍微麻烦点。其界面如下图:


github链接: labelme https://github.com/wkentaro/labelme
它的功能很多,包括:

  • 对图像进行多边形,矩形,圆形,多段线,线段,点形式的标注(可用于目标检-测,图像分割等任务)。
  • 对图像进行进行 flag形式的标注(可用于图像分类 和 清理 任务)。
  • 视频标注 - 生成 VOC 格式的数据集(for semantic / instancesegmentation)
  • 生成 COCO 格式的数据集(for instance segmentation)

2. YOLOv8

2.1YOLO算法简单介绍

YOLO框架(You Only Look Once)与RCNN系列算法不一样,是以不同的方式处理对象检测。它将整个图像放在一个实例中,并预测这些框的边界框坐标和及所属类别概率。使用YOLO算法最大优的点是速度极快,每秒可处理45帧,也能够理解一般的对象表示。

在本节中,将介绍YOLO用于检测给定图像中的对象的处理步骤。

首先,输入图像:

然后,YOLO将输入图像划分为网格形式(例如3 X 3):

最后,对每个网格应用图像分类和定位处理,获得预测对象的边界框及其对应的类概率。
整个过程是不是很清晰,下面逐一详细介绍。首先需要将标记数据传递给模型以进行训练。假设已将图像划分为大小为3 X 3的网格,且总共只有3个类别,分别是行人(c1)、汽车(c2)和摩托车(c3)。因此,对于每个单元格,标签y将是一个八维向量:

其中:
pc定义对象是否存在于网格中(存在的概率);
bx、by、bh、bw指定边界框;
c1、c2、c3代表类别。如果检测对象是汽车,则c2位置处的值将为1,c1和c3处的值将为0;
假设从上面的例子中选择第一个网格:

由于此网格中没有对象,因此pc将为零,此网格的y标签将为:

?意味着其它值是什么并不重要,因为网格中没有对象。下面举例另一个有车的网格(c2=1):

在为此网格编写y标签之前,首先要了解YOLO如何确定网格中是否存在实际对象。大图中有两个物体(两辆车),因此YOLO将取这两个物体的中心点,物体将被分配到包含这些物体中心的网格中。中心点左侧网格的y标签会是这样的:

由于此网格中存在对象,因此pc将等于1,bx、by、bh、bw将相对于正在处理的特定网格单元计算。由于检测出的对象是汽车,所以c2=1,c1和c3均为0。对于9个网格中的每一个单元格,都具有八维输出向量。最终的输出形状为3X3X8。
使用上面的例子(输入图像:100X100X3,输出:3X3X8),模型将按如下方式进行训练:

使用经典的CNN网络构建模型,并进行模型训练。在测试阶段,将图像传递给模型,经过一次前向传播就得到输出y。为了简单起见,使用3X3网格解释这一点,但通常在实际场景中会采用更大的网格(比如19X19)。

即使一个对象跨越多个网格,它也只会被分配到其中点所在的单个网格。可以通过增加更多网格来减少多个对象出现在同一网格单元中的几率。

2.2 YOLOv8获取与调试

2.2.1 通过pip的方式安装yolov8

pip install ultralytics

2.2.2 安装yolov8训练所需的第三方库:

  1. 检查是否正确安装好anaconda。
    windows+r打开cmd,输入 conda -V。若出现版本号,则安装成功。
  2. 检查是否正确安装好pytorch
import torch
if __name__ == '__main__':print(torch.zeros(1))

2.2.3 配置自己的yaml文件

配置描述数据集位置的shop200.yaml 。这里train指定训练数据集所在位置,val测试数据集所在位置,nc类别数,names类别的名称

# YOLOv5 												

利用yolov8零售商品识别实现的智能结算系统 yolo+后端flask+数据库sqlite+前端html(从零开始,全流程教学)相关推荐

  1. ML之LoR:基于信用卡数据集利用LoR逻辑回归算法实现如何开发通用信用风险评分卡模型之以toad框架全流程讲解

    ML之LoR:基于信用卡数据集利用LoR逻辑回归算法实现如何开发通用信用风险评分卡模型之以toad框架全流程讲解 目录 基于信用卡数据集利用LoR逻辑回归算法实现如何开发通用信用风险评分卡模型之以to ...

  2. ML之LoR:基于信用卡数据集利用LoR逻辑回归算法实现如何开发通用信用风险评分卡模型之以scorecardpy框架全流程讲解

    ML之LoR:基于信用卡数据集利用LoR逻辑回归算法实现如何开发通用信用风险评分卡模型之以scorecardpy框架全流程讲解 目录 基于信用卡数据集利用LoR逻辑回归算法实现如何开发通用信用风险评分 ...

  3. python人脸识别考勤系统 dlib+OpenCV和Pyqt5、数据库sqlite 人脸识别系统 计算机 毕业设计 源码

    一.项目介绍 Python语言.dlib.OpenCV.Pyqt5界面设计.sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量,如 ...

  4. 物联网卡传感器赋能零售商品感应机制 开启智能零售新风尚

    现代社会,随着线上电商环境的规整,电商产业得到了迅猛的发展,并且对传统零售行业产生了巨大的冲击,整个社会的购物风向开始从传统的零售业向线上电商业转变.在这个物联网崛起的关口,零售业开始研究如何运用物联 ...

  5. 华为零售商品识别一等奖方案

    向AI转型的程序员都关注了这个号

  6. 智慧零售产业应用实战,30分钟上手的高精度商品识别

    近几年,随着"新零售"概念的火热,越来越多的品牌商及商超零售企业开始引进人工智能技术,探索商品管理.成本控制.用户体验等多维度的数字化转型,转型中所涉及的货架陈列分析.智能结算.智 ...

  7. 如何基于深度学习实现商品识别技术|图普科技

    目前实时客流检测.商品识别.货架识别等人工智能技术可以帮助越来越多的零售门店实现智慧零售数字化转型.随着人工智能技术的发展,图普科技在深度学习在实现商品识别的应用上越发成熟,从技术层面来说,具体包含以 ...

  8. 励销云全流程智能销售解决方案,助力B2B企业高效增长

    近日,爱分析发布了<2022爱分析·营销科技厂商全景报告>,励销云作为企业级saas服务商,致力于为广大中小企业提供智能营销一体化SaaS解决方案,凭借其智能化管理能力,成功入选该报告中线 ...

  9. 基于PaddleX的智能零售柜商品识别

    摘 要 在传统的零售柜中,实现自动识别的方法主要有:硬件分隔.根据重量判断.识别顾客的行为.射频识别标记等.本文基于深度学习在图像分类领域的优异性能,研究基于PaddleX的智能零售柜商品识别,相比于 ...

最新文章

  1. Hibernate 缓存机制
  2. python怎么打开文档_python打开怎么运行
  3. Algorithm:C++语言实现之链表相关算法(单链公共结点问题、一般LCA、括号匹配、最长括号匹配、逆波兰表达式Reverse Polish Notation、直方图矩形面积、收集雨水问题)
  4. java索引ref_java – 如何使用jgit库将git HEAD指向特定的ref?
  5. C++ 偏微分数值计算库_Windows下RTCGAToolbox库下载TCPA数据(RPPA)学习笔记
  6. 判断数组中是否有存在重复值
  7. Eclipse代码自动补全设置
  8. Linux 性能测试工具 sysbench 的安装与简单使用
  9. vbs 读unicode 编码格式的文件
  10. java 局部内部类
  11. lg android tv 手机助手,手机如何投屏到LG电视的教程来了!
  12. Proxmark3教程2:用Pm3Gui_Pro V5.2 新功能 IC卡匠数据维护
  13. java 实现热搜_搜索推荐系统根据用户搜索频率(热搜)排序
  14. 形式化方法 | Proof Engineering in Coq——Coq tatics 在命题逻辑证明中的应用
  15. 2012-2-25 《数据结构》读书笔记3 栈之迷宫求解
  16. Kubernetes--Pod的DNS域名和相关特性
  17. 手机chrome没有声音_Chrome浏览器没有声音,解决windows10Chrome浏览器没有声音的问题...
  18. 对封装、继承、多态、抽象的理解
  19. 国家超级计算机 甘霖,记国家超级计算无锡中心主任助理甘霖:让“中国超算”扬威世界...
  20. python 编程题 埃及金字塔罐子倒水

热门文章

  1. 第16课:scratchjr猫与鸟的较量
  2. 飞凌iMX6系列产品i.MX6解决方案-IMX6Q经验分享-i.MX6Q系列常见问题解决
  3. 充电宝全国产化电子元件推荐方案
  4. 洛谷3961 [TJOI2013]黄金矿工
  5. 鼠标点计算机里面文件有声音怎么办,如何消除鼠标点击的声音
  6. 高考季选专业丨想做数据科学家?先听听多位教授经验谈
  7. SUMO获得车辆信息
  8. fw:爆笑网文:生于80年代 我们怎么就这么倒霉
  9. 编程语言书籍下载(ASP/ASP.net类)
  10. [转载]Java嵌入式开发之一-简介使用Java编写Palm OS程序的解决方案