当前位置: 首页 > article >正文

手把手教你用YOLO-v8.3:从零搭建零售货架识别系统

手把手教你用YOLO-v8.3从零搭建零售货架识别系统1. 项目背景与价值零售行业每天面临着一个共同的挑战如何高效准确地管理货架商品。传统的人工盘点方式不仅耗时费力而且容易出错。想象一下一家中型超市每天需要花费3-4小时进行货架盘点而使用基于YOLO-v8.3的自动识别系统这个时间可以缩短到几分钟。YOLO-v8.3作为当前最先进的目标检测模型之一具有以下特点使其特别适合零售场景实时性能在标准GPU上能达到100 FPS的处理速度高精度相比前代模型mAP(平均精度)提升15-20%多任务支持除了检测还支持分割、分类等任务易部署提供Python接口和预训练模型降低使用门槛2. 环境准备与快速部署2.1 获取YOLO-v8.3镜像我们使用预配置的YOLO-v8.3镜像它已经包含了所有必要的依赖Python 3.8PyTorch 1.12Ultralytics YOLO库OpenCV等计算机视觉工具包部署步骤拉取镜像并启动容器docker pull csdn/yolo-v8.3:latest docker run -it --gpus all -p 8888:8888 -p 6006:6006 csdn/yolo-v8.3选择使用方式Jupyter Lab访问http://localhost:8888SSH连接使用端口22连接2.2 验证环境运行以下代码验证环境是否正常import torch from ultralytics import YOLO # 检查GPU是否可用 print(fGPU可用: {torch.cuda.is_available()}) print(fGPU型号: {torch.cuda.get_device_name(0)}) # 加载预训练模型 model YOLO(yolov8n.pt) # 测试推理 results model(https://ultralytics.com/images/bus.jpg) # 打印检测结果 for result in results: print(\n检测结果:) for box in result.boxes: print(f{result.names[int(box.cls[0].item())]}: 置信度 {box.conf[0].item():.2f})预期输出应显示检测到的物体类别和置信度同时确认GPU可用。3. 数据准备与标注3.1 构建零售商品数据集一个高质量的零售商品数据集应包含每种商品至少100-150张图像不同角度、光照条件和遮挡情况同类商品的不同品牌和包装推荐数据收集方法使用智能手机在真实零售环境拍摄从公开数据集中补充如COCO、OpenImages使用3D渲染工具生成合成数据3.2 数据标注实践使用LabelImg或CVAT工具进行标注保存为YOLO格式类别索引 x_center y_center width height目录结构示例retail_dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/创建数据集配置文件retail.yaml:path: /data/retail_dataset train: images/train val: images/val nc: 5 # 商品类别数 names: [cola, chips, chocolate, water, cookies]4. 模型训练与优化4.1 基础训练流程from ultralytics import YOLO # 加载预训练模型 model YOLO(yolov8s.pt) # 使用small版本平衡速度与精度 # 训练配置 results model.train( dataretail.yaml, epochs100, batch32, imgsz640, patience15, device0, nameretail_v1, optimizerAdamW, lr00.001, warmup_epochs3 )关键参数说明patience: 早停机制验证集指标不再提升时停止训练optimizer: 推荐使用AdamW或SGDlr0: 初始学习率可根据batch size调整4.2 高级训练技巧数据增强策略results model.train( # ...其他参数... augmentTrue, hsv_h0.015, hsv_s0.7, hsv_v0.4, degrees10, translate0.1, scale0.5, shear2.0, perspective0.0005, flipud0.0, fliplr0.5, mosaic1.0, mixup0.1 )小目标检测优化results model.train( # ...其他参数... imgsz1280, # 增大输入尺寸 anchor_t4.0, # 调整anchor阈值 box7.5, # 增加box loss权重 fl_gamma1.5 # Focal loss gamma参数 )5. 系统实现与部署5.1 实时检测实现import cv2 from ultralytics import YOLO import numpy as np class ShelfDetector: def __init__(self, model_path): self.model YOLO(model_path) self.class_colors { cola: (0, 0, 255), chips: (0, 255, 0), chocolate: (255, 0, 0) } def process_frame(self, frame): # 预处理 frame cv2.resize(frame, (1280, 720)) # 推理 results self.model(frame, imgsz1280, conf0.5) # 后处理 annotated_frame results[0].plot() # 商品计数 counts {name: 0 for name in self.class_colors.keys()} for box in results[0].boxes: cls_name results[0].names[int(box.cls[0].item())] counts[cls_name] 1 # 显示计数 y_offset 30 for name, count in counts.items(): cv2.putText(annotated_frame, f{name}: {count}, (10, y_offset), cv2.FONT_HERSHEY_SIMPLEX, 1, self.class_colors[name], 2) y_offset 40 return annotated_frame, counts # 使用示例 detector ShelfDetector(best.pt) cap cv2.VideoCapture(0) while True: ret, frame cap.read() if not ret: break result_frame, counts detector.process_frame(frame) cv2.imshow(Shelf Monitoring, result_frame) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows()5.2 库存管理集成import sqlite3 from datetime import datetime class InventoryManager: def __init__(self, db_pathinventory.db): self.conn sqlite3.connect(db_path) self._init_db() def _init_db(self): cursor self.conn.cursor() cursor.execute( CREATE TABLE IF NOT EXISTS inventory ( id INTEGER PRIMARY KEY AUTOINCREMENT, product_name TEXT NOT NULL, count INTEGER NOT NULL, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ) ) self.conn.commit() def log_inventory(self, counts): timestamp datetime.now() cursor self.conn.cursor() for product, count in counts.items(): cursor.execute( INSERT INTO inventory (product_name, count) VALUES (?, ?), (product, count) ) self.conn.commit() def get_inventory_trend(self, product_name, hours24): cursor self.conn.cursor() cursor.execute( SELECT strftime(%Y-%m-%d %H:00, timestamp) as hour, AVG(count) as avg_count FROM inventory WHERE product_name ? AND timestamp datetime(now, ?) GROUP BY hour ORDER BY hour , (product_name, f-{hours} hours)) return cursor.fetchall()6. 性能优化与生产部署6.1 模型优化技术模型量化from ultralytics import YOLO # 加载训练好的模型 model YOLO(best.pt) # 导出为INT8量化模型 model.export(formatonnx, imgsz640, halfTrue, int8True, device0)TensorRT加速# 转换为TensorRT引擎 trtexec --onnxbest.onnx --saveEnginebest.engine --fp166.2 生产部署方案方案一边缘设备部署# 树莓派优化版检测代码 import cv2 from tflite_runtime.interpreter import Interpreter class EdgeDetector: def __init__(self, model_path): self.interpreter Interpreter(model_path) self.interpreter.allocate_tensors() def detect(self, frame): # 预处理 input_data cv2.resize(frame, (320, 320)) input_data input_data.astype(np.float32) / 255.0 # 设置输入 input_details self.interpreter.get_input_details() self.interpreter.set_tensor(input_details[0][index], [input_data]) # 推理 self.interpreter.invoke() # 获取输出 output_details self.interpreter.get_output_details() boxes self.interpreter.get_tensor(output_details[0][index]) scores self.interpreter.get_tensor(output_details[1][index]) return boxes, scores方案二云端微服务# Flask API示例 from flask import Flask, request, jsonify import cv2 import numpy as np from ultralytics import YOLO app Flask(__name__) model YOLO(best.pt) app.route(/detect, methods[POST]) def detect(): file request.files[image] img cv2.imdecode(np.frombuffer(file.read(), np.uint8), cv2.IMREAD_COLOR) results model(img) detections [] for box in results[0].boxes: detections.append({ class: results[0].names[int(box.cls[0].item())], confidence: float(box.conf[0].item()), bbox: box.xyxy[0].tolist() }) return jsonify({results: detections}) if __name__ __main__: app.run(host0.0.0.0, port5000)7. 总结与展望通过本教程我们完成了从零搭建零售货架识别系统的全过程。关键要点包括数据是关键高质量、多样化的训练数据是模型性能的基础模型选择YOLO-v8.3在速度和精度间取得了良好平衡系统思维从单一检测扩展到完整的库存管理系统部署优化根据场景需求选择边缘计算或云端方案未来扩展方向集成货架陈列合规性检测结合RFID技术提高识别精度开发基于检测结果的自动补货系统分析顾客拿取行为优化商品摆放获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关文章:

手把手教你用YOLO-v8.3:从零搭建零售货架识别系统

手把手教你用YOLO-v8.3:从零搭建零售货架识别系统 1. 项目背景与价值 零售行业每天面临着一个共同的挑战:如何高效准确地管理货架商品。传统的人工盘点方式不仅耗时费力,而且容易出错。想象一下,一家中型超市每天需要花费3-4小时…...

scikit-opt免疫算法终极指南:生物启发式优化原理与实战应用

scikit-opt免疫算法终极指南:生物启发式优化原理与实战应用 【免费下载链接】scikit-opt Genetic Algorithm, Particle Swarm Optimization, Simulated Annealing, Ant Colony Optimization Algorithm,Immune Algorithm, Artificial Fish Swarm Algorithm, Differen…...

SpringBoot 集成 TrueLicense 实现动态许可证管理与安全验证

1. TrueLicense基础与SpringBoot集成概述 在商业软件开发中,许可证管理是保护知识产权的关键环节。TrueLicense作为Java生态中成熟的证书管理框架,通过非对称加密技术实现软件授权验证。我曾在多个企业级项目中采用SpringBoot集成TrueLicense的方案&…...

C#毕业设计下载(全套源码+配套论文)——基于C#+asp.net+sqlserver的教务管理平台设计与实现

基于C#asp.netsqlserver的教务管理平台设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于C#asp.netsqlserver的教务管理平台设计与实现,更多精选毕业设计项目实例见文末哦。 文章目录: 基于C#asp.netsqlserve…...

如何快速解决Spyc YAML解析器的10个常见问题:PHP开发者的完整指南

如何快速解决Spyc YAML解析器的10个常见问题:PHP开发者的完整指南 【免费下载链接】spyc A simple YAML loader/dumper class for PHP 项目地址: https://gitcode.com/gh_mirrors/sp/spyc Spyc是一个简单易用的PHP YAML加载器/转储器类,专为处理Y…...

Freetronics LCD库深度解析与STM32移植指南

1. Freetronics 162 LCD 库技术解析与工程实践指南Freetronics 162 LCD Shield 是一款面向 Arduino 生态的硬件扩展板,采用 HD44780 兼容控制器驱动双行 16 字符液晶显示屏,并集成 5 按键(上、下、左、右、选择)与电位器调光电路。…...

企业微信直播回放下载全攻略:从网页源码到火狐插件,手把手教你搞定

企业微信直播回放高效下载指南:多平台解决方案与实战技巧 企业微信作为职场沟通的重要工具,其直播功能被广泛应用于内部培训、会议记录和在线教学等场景。但官方并未直接提供直播回放的下载入口,这让许多需要存档重要内容的用户感到困扰。本…...

从波形图解密AHB协议:手把手分析INCR4/WRAP8突发传输时序

从波形图解密AHB协议:手把手分析INCR4/WRAP8突发传输时序 在数字IC验证领域,AHB协议作为AMBA总线家族的核心成员,其突发传输机制一直是工程师必须掌握的硬核技能。本文将带您以"示波器视角"切入,通过INCR4递增突发和WRA…...

modern-normalize样式覆盖优先级终极指南:避免CSS冲突的10个技巧

modern-normalize样式覆盖优先级终极指南:避免CSS冲突的10个技巧 【免费下载链接】modern-normalize 🐒 Normalize browsers default style 项目地址: https://gitcode.com/gh_mirrors/mo/modern-normalize modern-normalize是一款轻量级的CSS重置…...

Python最好用的爬虫框架推荐!

Python爬虫框架能大幅降低数据采集的开发成本,不同框架适配不同的爬取场景。很多开发者入门时不知该选哪个框架,本文推荐8个最高效的Python爬虫框架,快来了解一下吧。1.ScrapyScrapy是一个为了爬取网站数据,提取结构性数据而编写的…...

深度实践指南:如何高效使用DataHub GraphQL进行元数据管理

深度实践指南:如何高效使用DataHub GraphQL进行元数据管理 【免费下载链接】datahub The Metadata Platform for the Modern Data Stack 项目地址: https://gitcode.com/GitHub_Trending/da/datahub DataHub是现代数据栈的元数据平台,其GraphQL A…...

TradingAgents-CN:三步打造你的专属AI金融交易军师

TradingAgents-CN:三步打造你的专属AI金融交易军师 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 想象一下,你面对复杂的…...

深度学习迁移学习实战指南:基于SqueezeNet的热狗识别系统

深度学习迁移学习实战指南:基于SqueezeNet的热狗识别系统 【免费下载链接】mxnet-the-straight-dope An interactive book on deep learning. Much easy, so MXNet. Wow. [Straight Dope is growing up] ---> Much of this content has been incorporated into t…...

Apollo监听器用不好?从源码看ConfigChangeListener的注册、触发与线程安全那些事

Apollo监听器深度解析:从源码透视ConfigChangeListener的设计哲学与实战陷阱 在分布式配置中心领域,Apollo凭借其高可靠性、实时推送能力和完善的监听机制,已成为众多企业微服务架构中的标配组件。然而,许多中高级开发者在实际使用…...

别再只会写RCA了!FPGA实战:用Verilog手撕超前进位加法器(LCA)的完整代码与性能对比

从RCA到LCA:FPGA工程师必备的超前进位加法器实战指南 在数字电路设计中,加法器是最基础却又最关键的运算单元之一。很多刚接触Verilog的工程师会满足于实现一个能用的行波进位加法器(RCA),但当项目频率提升到200MHz以上…...

基于微信小程序实现助农扶贫管理系统【附项目源码+论文说明】计算机毕业设计

基于java和微信小程序实现助农扶贫系统演示【内附项目源码LW说明】摘要 由于APP软件在开发以及运营上面所需成本较高,而用户手机需要安装各种APP软件,因此占用用户过多的手机存储空间,导致用户手机运行缓慢,体验度比较差&#xf…...

别再只盯着开关速度了!用TC4420驱动MOSFET,实测这几种波形才是效率杀手

别再只盯着开关速度了!用TC4420驱动MOSFET,实测这几种波形才是效率杀手 在实验室调试电源模块时,你是否遇到过这样的场景:明明选用了低导通电阻的MOSFET,计算出的理论效率高达95%,但实测却始终徘徊在88%左右…...

戴尔服务器按Ctrl+R没反应?别急,先检查BIOS里的这个Boot Mode设置

戴尔服务器CtrlR失效深度排查:从Boot Mode到RAID配置的完整指南 当戴尔服务器的CtrlR组合键失去响应时,许多运维人员的第一反应是反复尝试或怀疑硬件故障。但真相往往藏在更深层的系统配置中——UEFI与Legacy BIOS启动模式的差异直接决定了RAID配置入口…...

Python实战:3种方法加速破解RAR密码(附完整代码)

Python高效破解RAR密码的3种实战方案 当遇到加密的RAR文件却忘记密码时,许多开发者会寻求自动化破解方案。传统暴力破解方法效率低下,本文将分享三种经过优化的Python实现方案,帮助你在不同场景下快速完成任务。 1. 基础准备与环境配置 在开始…...

老显卡如何焕发第二春?OptiScaler让游戏帧率提升30-50%的实战指南

老显卡如何焕发第二春?OptiScaler让游戏帧率提升30-50%的实战指南 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 当你…...

从Alpha158因子库的实战计算到高效缓存策略

1. Alpha158因子库的核心价值与计算挑战 在量化金融领域,因子库的质量直接决定了策略的盈利能力。微软Qlib框架内置的Alpha158因子库,包含了158个经过验证的量化因子,覆盖了量价、财务、市场情绪等多个维度。这些因子就像厨师手中的调味料&am…...

利用EVA-02重构技术文档:将零散笔记整理成结构化开发手册

利用EVA-02重构技术文档:将零散笔记整理成结构化开发手册 你有没有过这样的经历?项目进行到一半,想回顾一下某个功能的实现细节,结果发现相关的信息散落在十几个不同的地方:几行代码注释在一个文件里,关键…...

终极指南:如何为Dinero.js开源货币库贡献专业文档

终极指南:如何为Dinero.js开源货币库贡献专业文档 【免费下载链接】dinero.js Create, calculate, and format money in JavaScript and TypeScript. 项目地址: https://gitcode.com/gh_mirrors/di/dinero.js Dinero.js是一个功能强大的JavaScript和TypeScri…...

TensorFlow文本距离计算终极指南:编辑距离与地址匹配实战

TensorFlow文本距离计算终极指南:编辑距离与地址匹配实战 【免费下载链接】tensorflow_cookbook Code for Tensorflow Machine Learning Cookbook 项目地址: https://gitcode.com/gh_mirrors/te/tensorflow_cookbook TensorFlow文本距离计算是自然语言处理和…...

BM62S2301-1热式风速传感器原理与Arduino驱动深度解析

1. BM62S2301-1 数字风速传感器深度技术解析BM62S2301-1 是由 Best Modules 公司推出的高精度数字风速传感器模块,专为工业环境监测、HVAC 系统控制、气象站及智能农业通风系统等场景设计。该器件采用热式风速测量原理(Hot-Wire Anemometry)&…...

企业级西安旅游系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着旅游业的快速发展,传统的旅游管理模式已无法满足现代企业的需求,尤其是在西安这样的历史文化名城,旅游资源的数字化管理显得尤为重要。企业级西安旅游系统管理系统的开发旨在解决这一问题,通过整合旅游资源信息、优化游…...

墨语灵犀一键部署与Node.js环境配置:构建全栈AI应用

墨语灵犀一键部署与Node.js环境配置:构建全栈AI应用 想快速搭建一个属于自己的AI对话应用吗?很多开发者觉得这事儿门槛高,既要搞定复杂的模型部署,又要配置后端环境,想想就头疼。其实,现在借助成熟的平台和…...

DeepSeek-R1-Distill-Qwen-1.5B效果实测:数学推理能力展示

DeepSeek-R1-Distill-Qwen-1.5B效果实测:数学推理能力展示 1. 开篇:当1.5B小模型遇上数学推理 如果你觉得大语言模型必须动辄几十亿参数才能做好数学题,那DeepSeek-R1-Distill-Qwen-1.5B可能会改变你的看法。这个只有15亿参数的“小个子”&…...

乙巳马年·皇城大门春联生成终端W模型压缩与量化教程:在嵌入式设备部署探索

乙巳马年皇城大门春联生成终端W模型压缩与量化教程:在嵌入式设备部署探索 最近有不少朋友在问,那个能生成传统风格春联的“终端W”模型,能不能跑在树莓派或者类似的嵌入式小设备上?毕竟,这类设备成本低、功耗小&#…...

KIF iOS功能测试框架终极指南:从入门到精通的10个最佳实践

KIF iOS功能测试框架终极指南:从入门到精通的10个最佳实践 【免费下载链接】KIF Keep It Functional - An iOS Functional Testing Framework 项目地址: https://gitcode.com/gh_mirrors/ki/KIF KIF(Keep It Functional)是一款强大的i…...