2026/5/21 11:18:28
网站建设
项目流程
关于做一动物网站的界面个,外贸类网站模板,品牌市场营销策略,网站开发设计思想1#x1f4e6; 纸箱堆叠计数检测数据集概览表项目内容数据集名称纸箱堆叠计数检测数据集#xff08;Cardboard Carton Counting Dataset#xff09;总图像数量21,199 张目标类别数1 类类别名称#xff08;英文#xff09;cardboard-carton类别名称#xff08;中文#x…1 纸箱堆叠计数检测数据集概览表项目内容数据集名称纸箱堆叠计数检测数据集Cardboard Carton Counting Dataset总图像数量21,199 张目标类别数1 类类别名称英文cardboard-carton类别名称中文纸箱 / 瓦楞纸箱标注工具LabelImg生成 PASCAL VOC 格式后转为 YOLO 格式标注格式YOLO 格式.txt文件每行class_id x_center y_center width height坐标归一化应用场景- 仓储物流自动化盘点- 智能叉车/AGV 货物识别- 电商仓库纸箱堆叠高度与数量统计 数据划分详情表数据集类型图像数量占比说明训练集train16,959 张80%用于模型参数学习验证集val2,119 张10%用于超参数调优与早停测试集test2,121 张10%用于最终性能评估不参与训练总计21,199 张100%—✅ 划分比例严格遵循8:1:1符合工业级数据集标准。 推荐目录结构YOLO 格式cardboard_carton_dataset/ ├── images/ │ ├── train/ # 16,959 张 │ ├── val/ # 2,119 张 │ └── test/ # 2,121 张 ├── labels/ │ ├── train/ # 对应 .txt 标签 │ ├── val/ │ └── test/ └── data.yaml # 配置文件data.yaml配置文件示例# cardboard_carton_dataset/data.yamltrain:./images/trainval:./images/valtest:./images/testnc:1names:[cardboard-carton] 补充说明单类检测优势模型专注学习纸箱的尺度、遮挡、堆叠形态收敛更快、精度更高。计数实现方式直接通过检测框数量 纸箱数量适用于可分辨单个纸箱若严重堆叠不可分可结合实例分割如 YOLOv8-seg或回归头预测堆叠层数典型挑战纸箱颜色/尺寸多样高度堆叠导致遮挡光照变化与反光尤其在仓库环境该数据集规模大21k、划分规范、标注统一非常适合用于工业仓储自动化、智能物流机器人、AI 盘点系统等场景的模型训练与部署。✅ 一、数据集目录结构确认无误cardboard_carton_dataset/ ├── images/ │ ├── train/ # 16,959 张 │ ├── val/ # 2,119 张 │ └── test/ # 2,121 张 ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yamldata.yaml内容train:./images/trainval:./images/valtest:./images/testnc:1names:[cardboard-carton]✅ 二、YOLOv8 完整训练代码保存为train_cardboard.py# -*- coding: utf-8 -*- 纸箱堆叠计数检测 - YOLOv8 训练脚本 类别1 类cardboard-carton 图像数21,199 张8:1:1 划分 作者AI助手 importosfromultralyticsimportYOLOimporttorch# -----------------------------# 1. 配置路径与设备# -----------------------------DATASET_PATHcardboard_carton_datasetifnotos.path.exists(DATASET_PATH):raiseFileNotFoundError(f❌ 数据集路径 {DATASET_PATH} 不存在)devicecudaiftorch.cuda.is_available()elsecpuprint(f 使用设备:{device})# -----------------------------# 2. 加载预训练模型# -----------------------------# 推荐 yolov8s平衡速度与精度# 若部署到边缘设备如 Jetson可用 yolov8nmodelYOLO(yolov8s.pt)# -----------------------------# 3. 启动训练针对纸箱堆叠优化# -----------------------------resultsmodel.train(dataos.path.join(DATASET_PATH,data.yaml),# ⏱️ 训练参数epochs100,imgsz1280,# 关键提升密集小纸箱检出率batch16,# 根据 GPU 调整RTX 3060 可设 16~32namecardboard_yolov8s_1280,devicedevice,# 数据增强仓库场景定制hsv_h0.015,# 色调扰动应对不同纸箱颜色hsv_s0.7,# 饱和度hsv_v0.5,# 亮度应对仓库光照不均degrees10.0,# 旋转模拟叉车视角translate0.2,scale0.5,mosaic1.0,# ✅ 必开将小纸箱拼接到新背景提升召回mixup0.1,flipud0.0,fliplr0.5,# 训练策略patience25,# 早停save_period10,workers8,cacheFalse# 若内存充足可设 True)print(✅ 训练完成)print(f 最佳模型路径: runs/detect/cardboard_yolov8s_1280/weights/best.pt)命令行替代方案yolo detect traindatacardboard_carton_dataset/data.yamlmodelyolov8s.ptepochs100imgsz1280batch16✅ 三、纸箱计数系统核心代码保存为carton_counter.py# -*- coding: utf-8 -*- 纸箱堆叠计数系统 支持单图 / 视频 / 摄像头 实时计数 输出带计数结果的图像 JSON 作者AI助手 importcv2importosfromultralyticsimportYOLOfromcollectionsimportdequeimporttimeclassCartonCounter:def__init__(self,model_pathbest.pt,conf_thres0.4): 初始化计数器 :param model_path: YOLOv8 模型路径 :param conf_thres: 置信度阈值 self.modelYOLO(model_path)self.conf_thresconf_thres self.fontcv2.FONT_HERSHEY_SIMPLEXdefcount_from_image(self,image_path,save_resultTrue):单图计数imgcv2.imread(image_path)resultsself.model(img,confself.conf_thres)forrinresults:boxesr.boxes countlen(boxes)# 每个检测框 1 个纸箱# 绘制检测框annotated_imgr.plot()# 添加计数文本cv2.putText(annotated_img,fCartons:{count},(20,50),self.font,1.5,(0,255,0),3)ifsave_result:output_pathfcounted_{os.path.basename(image_path)}cv2.imwrite(output_path,annotated_img)print(f✅ 计数完成:{output_path}| 数量:{count})returncount,annotated_imgreturn0,imgdefcount_from_video(self,video_path,output_pathcounted_output.mp4):视频流计数capcv2.VideoCapture(video_path)fpsint(cap.get(cv2.CAP_PROP_FPS))widthint(cap.get(cv2.CAP_PROP_FRAME_WIDTH))heightint(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 视频写入器fourcccv2.VideoWriter_fourcc(*mp4v)outcv2.VideoWriter(output_path,fourcc,fps,(width,height))frame_count0whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsself.model(frame,confself.conf_thres)forrinresults:countlen(r.boxes)annotated_framer.plot()cv2.putText(annotated_frame,fCartons:{count},(20,50),self.font,1.5,(0,255,0),3)out.write(annotated_frame)ifframe_count%300:# 每秒打印一次print(f 视频帧{frame_count}: 纸箱数量 {count})frame_count1cap.release()out.release()print(f✅ 视频处理完成:{output_path})defcount_from_camera(self,camera_id0):实时摄像头计数capcv2.VideoCapture(camera_id)print( 按 q 退出摄像头)whileTrue:ret,framecap.read()ifnotret:breakresultsself.model(frame,confself.conf_thres)forrinresults:countlen(r.boxes)annotated_framer.plot()cv2.putText(annotated_frame,fCartons:{count},(20,50),self.font,1.5,(0,255,0),3)cv2.imshow(Carton Counter,annotated_frame)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()# -----------------------------# 使用示例# -----------------------------if__name____main__:counterCartonCounter(model_pathruns/detect/cardboard_yolov8s_1280/weights/best.pt)# 1. 单图计数count,imgcounter.count_from_image(warehouse.jpg)# 2. 视频计数# counter.count_from_video(warehouse_video.mp4)# 3. 摄像头实时计数# counter.count_from_camera()✅ 四、高级功能扩展可选1. 堆叠高度估算基于 YOLOv8-seg 实例分割# 需先训练分割模型model_segYOLO(yolov8s-seg.pt)resultsmodel_seg(image.jpg)forrinresults:masksr.masks# 获取分割掩码ifmasksisnotNone:# 通过掩码垂直方向像素高度估算层数formaskinmasks.data:height_pixelsmask.sum(dim2).max().item()estimated_layersint(height_pixels/avg_carton_height)2. Web API 接口FastAPI# api.pyfromfastapiimportFastAPI,File,UploadFilefromcarton_counterimportCartonCounterimportcv2importnumpyasnp appFastAPI()counterCartonCounter()app.post(/count)asyncdefcount_cartons(file:UploadFileFile(...)):contentsawaitfile.read()nparrnp.frombuffer(contents,np.uint8)imgcv2.imdecode(nparr,cv2.IMREAD_COLOR)count,_counter.count_from_image(None)# 修改 count_from_image 支持 numpy 输入return{carton_count:int(count)}✅ 五、部署建议场景方案仓库固定摄像头NVIDIA Jetson AGX Orin TensorRTyolov8s.engine移动盘点终端Android AppONNX Runtime CameraX云平台分析AWS/Azure 上部署 Docker 容器含 FastAPIPLC 联动通过 Modbus TCP 发送计数结果到产线控制系统