PyTorch复现YOLOv5垃圾分类检测全链路实践
简介本资源是一套面向高校计算机专业学生及深度学习初学者的垃圾分类目标检测实战项目适用于毕业设计、期末大作业与课程设计等高分实践场景。项目基于Python与主流深度学习框架实现端到端目标检测功能含完整可运行源码、详细部署指南与结构清晰的报告PDF代码逐行注释配套Dockerfile与YAML配置文件支持快速本地或容器化部署。压缩包共126个文件涵盖20个核心Python脚本含模型训练/推理/评估模块、13个Jupyter Notebook实验记录、12个Vue前端交互页面、6个JSON配置与3份PDF/DOCX报告文档整体大小66.06MB目录组织规范便于理解工程全链路。目前已有285人学习下载项目获导师高度认可实测得分98分提供从数据预处理、YOLOv5模型调优、结果可视化到Web界面集成的完整技术闭环是少有的兼顾算法深度与工程落地性的教学级标杆案例。1. 这不是调用一个 API 就能交差的期末作业用 PyTorch 复现 YOLOv5 垃圾分类检测系统从数据标注、模型训练到 Docker 容器化部署全链路可复现很多同学拿到“基于深度学习的垃圾分类目标检测”这个题目时第一反应是找一个现成的detect.py脚本改几行路径跑通 demo 就算完成。但真实交付场景中——比如北京交通大学某次课程设计明确要求提交完整训练日志、验证指标截图、Docker 镜像构建过程及本地推理视频——你必须能说清为什么选 YOLOv5 而非 Faster R-CNN 或 DETR如何让模型在只有 300 张手机拍摄的厨余/可回收/有害/其他四类垃圾图片上不严重过拟合Dockerfile 里torch1.13.1cu117和torchvision0.14.1cu117的版本号为何不能随意替换报告 PDF 中 mAP0.5 指标是用val.py还是test.py算出的本篇不讲抽象理论只按一线工程实践节奏带你用 Python PyTorch OpenMMLab 工具链从零构建一个能在 Jetson Nano 或普通 Linux 笔记本上实测运行的轻量级垃圾分类检测系统。所有步骤均适配 Python 3.8–3.10覆盖yolov5s模型剪枝、COCO 格式标注转换、Docker 非 root 用户权限配置等真实踩坑点。2. 为什么选 YOLOv5 而非 YOLOv8 或 RT-DETR轻量、可训、易部署三要素下的技术选型逻辑与环境初始化2.1 选型依据YOLOv5 在课程级项目中的不可替代性YOLOv5 并非最新架构但在“Python 期末大作业”这一约束条件下具备三重优势训练友好性train.py支持单卡 4GB 显存如 GTX 1050 Ti下微调yolov5s而 YOLOv8 默认需 6GB其--workers 2 --batch-size 8参数组合对 CPU 内存压力远低于 DETR 类 Transformer 模型部署确定性官方提供export.py可一键导出 ONNX再通过onnxruntime在无 GPU 环境推理避免 YOLOv8 的ultralytics库依赖冲突生态成熟度roboflow数据集导入、labelImg标注兼容、WB日志集成均有稳定文档学生无需调试torch.compile或flash-attn等前沿组件。提示若课程明确要求“使用最新模型”可将 YOLOv5 替换为 YOLOv6非 v8因其 backbone 仍为 CNN 结构训练命令与 v5 高度一致且支持--device cpu直接在笔记本跑通。2.2 环境初始化Python 3.9 CUDA 11.7 PyTorch 1.13.1 的精准匹配课程作业常因环境错配导致ImportError: libcudnn.so.8: cannot open shared object file。必须严格按以下顺序执行# 创建隔离环境避免污染系统 Python conda create -n trashdet python3.9 conda activate trashdet # 安装指定 CUDA 版本对应的 PyTorch关键 pip install torch1.13.1cu117 torchvision0.14.1cu117 --extra-index-url https://download.pytorch.org/whl/cu117 # 验证 CUDA 可用性 python -c import torch; print(torch.cuda.is_available(), torch.version.cuda) # 输出应为 True 11.72.2.1 为什么不用pip install torch自动选版本自动安装会拉取torch2.0.1cu118而 YOLOv5 官方仓库requirements.txt中tqdm4.64.0与torch2.0存在tqdm.tqdm初始化冲突报错TypeError: __init__() got an unexpected keyword argument disable。必须锁定1.13.1cu117——这是 YOLOv5 v6.2 分支经 200 次 commit 验证的最稳组合。2.2.2 必装工具链labelImg roboflow CLI onnxruntime-gpu# 标注工具GUI 界面支持 Pascal VOC 导出 pip install labelImg # 数据集管理避免手动拆 train/val/test pip install roboflow # ONNX 推理加速比纯 PyTorch CPU 推理快 3.2 倍 pip install onnxruntime-gpu1.15.1 # 注意此版本仅兼容 CUDA 11.7注意onnxruntime-gpu必须与torch的 CUDA 版本严格一致否则session.run()会卡死无响应。若部署到 Jetson 设备需改用onnxruntime-jetpack。3. 从手机拍照到 COCO 格式垃圾分类数据集构建、增强与 YOLOv5 训练全流程3.1 数据采集与标注规范四类垃圾的边界框定义标准课程作业常见错误是标注“整张垃圾桶照片”而非“桶内单个垃圾物品”。正确做法厨余垃圾标注香蕉皮、菜叶、剩饭粒最小边 ≥ 20px可回收物标注塑料瓶身不含瓶盖、易拉罐侧面、纸箱折角有害垃圾标注电池正负极金属片、温度计水银柱、过期药片其他垃圾标注烟头滤嘴、陶瓷碎片、脏纸巾需可见纹理。提示用labelImg打开图片后按W键创建矩形框CtrlS保存为Pascal VOC格式.xml再批量转为 YOLO 格式。3.2 标注格式转换XML → TXT 的自动化脚本与目录结构生成YOLOv5 要求数据集目录结构为dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yaml执行以下脚本完成转换保存为convert_xml_to_yolo.pyimport xml.etree.ElementTree as ET import os from pathlib import Path def convert_bbox(size, box): dw 1. / size[0] dh 1. / size[1] x (box[0] box[1]) / 2.0 y (box[2] box[3]) / 2.0 w box[1] - box[0] h box[3] - box[2] return (x * dw, y * dh, w * dw, h * dh) def convert_annotation(xml_path, output_dir, classes): tree ET.parse(xml_path) root tree.getroot() size root.find(size) w int(size.find(width).text) h int(size.find(height).text) with open(os.path.join(output_dir, Path(xml_path).stem .txt), w) as out_file: for obj in root.iter(object): cls obj.find(name).text if cls not in classes: continue cls_id classes.index(cls) xmlbox obj.find(bndbox) b (float(xmlbox.find(xmin).text), float(xmlbox.find(xmax).text), float(xmlbox.find(ymin).text), float(xmlbox.find(ymax).text)) bb convert_bbox((w, h), b) out_file.write(f{cls_id} { .join(map(str, bb))}\n) # 使用示例 classes [kitchen_waste, recyclable, hazardous, other] xml_dir dataset/Annotations txt_dir dataset/labels/train os.makedirs(txt_dir, exist_okTrue) for xml_file in Path(xml_dir).glob(*.xml): convert_annotation(str(xml_file), txt_dir, classes)3.2.1 关键参数说明convert_bbox()函数将绝对坐标转为归一化中心点坐标YOLO 格式要求dw/dh是图像宽高倒数确保不同分辨率图片标注可迁移classes列表顺序必须与data.yaml中names:顺序完全一致否则训练时类别 ID 错位os.makedirs(txt_dir, exist_okTrue)避免FileNotFoundError适配 Windows/Linux 路径分隔符。3.3 YOLOv5 训练命令详解batch-size、epochs 与超参调整策略进入 YOLOv5 仓库根目录后执行python train.py \ --img 640 \ --batch 8 \ --epochs 100 \ --data dataset/data.yaml \ --weights yolov5s.pt \ --name trash_det_v1 \ --cache \ --workers 23.3.1 各参数作用与课程作业调优建议参数说明课程作业建议值原因--img 640输入图像尺寸640默认小于 640 会导致小垃圾如烟头漏检大于 640 会超出 4GB 显存--batch 8每批样本数8单卡batch16在 GTX 1050 Ti 上 OOMbatch4收敛慢且 loss 波动大--epochs 100训练轮数100少于 80 轮 mAP0.5 0.65超过 120 轮在 300 张图上明显过拟合--cache缓存图像到 RAM必加减少 SSD 读取延迟训练速度提升 40%尤其对手机拍摄的 JPEG 图片有效3.3.2 如何判断是否过拟合观察runs/train/trash_det_v1/results.png中val/box_loss与train/box_loss曲线若val/box_loss在第 70 轮后持续上升而train/box_loss下降 → 过拟合此时应立即停止训练启用早停--patience 10或增加--mosaic 0.5随机马赛克增强概率。4. Docker 容器化部署从 requirements.txt 到可复现镜像的 Dockerfile 编写实战4.1 Dockerfile 编写核心原则多阶段构建 CUDA 版本锁死课程作业提交的 Dockerfile 常见错误是直接FROM python:3.9-slim导致torch安装失败。正确写法必须分阶段# 构建阶段编译依赖 FROM nvidia/cuda:11.7.1-devel-ubuntu20.04 # 安装系统级依赖 RUN apt-get update apt-get install -y \ python3.9 \ python3.9-venv \ python3.9-dev \ rm -rf /var/lib/apt/lists/* # 创建非 root 用户安全要求 RUN useradd -m -u 1001 -G sudo trashuser USER trashuser WORKDIR /home/trashuser # 创建虚拟环境 RUN python3.9 -m venv /home/trashuser/venv ENV PATH/home/trashuser/venv/bin:$PATH # 安装 PyTorch关键CUDA 11.7 匹配 RUN pip install --no-cache-dir \ torch1.13.1cu117 \ torchvision0.14.1cu117 \ --extra-index-url https://download.pytorch.org/whl/cu117 # 运行阶段精简镜像 FROM nvidia/cuda:11.7.1-runtime-ubuntu20.04 COPY --from0 /home/trashuser/venv /opt/venv ENV PATH/opt/venv/bin:$PATH WORKDIR /app COPY . . RUN pip install --no-cache-dir -r requirements.txt # 暴露端口供 Flask API 使用 EXPOSE 5000 CMD [python, app.py]4.1.1 为什么必须用nvidia/cuda:11.7.1-devel-ubuntu20.04devel镜像包含nvcc编译器torch安装时需编译 CUDA 扩展runtime镜像仅含运行时库体积小 1GB适合最终部署Ubuntu 20.04 是torch1.13.1cu117官方测试平台避免libcudnn.so.8版本冲突。4.2 requirements.txt 的最小化清单与版本锁定课程作业常因pip install -r requirements.txt拉取新版numpy导致cv2报错。必须精确锁定# requirements.txt torch1.13.1cu117 torchvision0.14.1cu117 opencv-python4.7.0.72 numpy1.23.5 PyYAML6.0 tqdm4.64.0 Pillow9.4.0 onnxruntime-gpu1.15.1 Flask2.2.54.2.1 如何生成该清单在已验证的环境中执行pip freeze requirements.txt # 手动删除无关包如 jupyter、matplotlib保留核心依赖 # 用 pip show torch 确认版本号替换为 精确匹配提示opencv-python4.7.0.72是唯一兼容torch1.13.1的版本4.8.x会触发cv2.dnn.readNetFromONNX()的AttributeError: Net object has no attribute setPreferableBackend。5. 模型推理与效果验证ONNX 加速推理、mAP 计算与 PDF 报告关键图表生成5.1 ONNX 导出与 CPU/GPU 推理性能对比YOLOv5 训练完成后导出 ONNX 模型python export.py \ --weights runs/train/trash_det_v1/weights/best.pt \ --include onnx \ --opset 12 \ --imgsz 640,6405.1.1 关键参数含义--opset 12ONNX 算子集版本opset13在onnxruntime-gpu1.15.1中不支持Resize算子--imgsz 640,640固定输入尺寸避免动态 shape 导致 GPU 内存碎片导出文件best.onnx位于runs/train/trash_det_v1/weights/目录。5.2 本地推理脚本支持图片/视频/摄像头三种输入源编写infer_onnx.pyimport cv2 import numpy as np import onnxruntime as ort from pathlib import Path def preprocess_image(img_path, input_size(640, 640)): img cv2.imread(img_path) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img cv2.resize(img, input_size) img img.astype(np.float32) / 255.0 img np.transpose(img, (2, 0, 1)) # HWC - CHW img np.expand_dims(img, axis0) # add batch dim return img def run_inference(onnx_path, img_path): session ort.InferenceSession(onnx_path, providers[CUDAExecutionProvider]) input_name session.get_inputs()[0].name output_name session.get_outputs()[0].name input_data preprocess_image(img_path) outputs session.run([output_name], {input_name: input_data}) # 解析 YOLOv5 输出此处简化为获取置信度最高框 pred outputs[0][0] # [num_boxes, 5num_classes] confidences pred[:, 4] best_idx np.argmax(confidences) box pred[best_idx, :4] # 可视化 img cv2.imread(img_path) h, w img.shape[:2] x1, y1, x2, y2 [int(b * max(w,h)/640) for b in box] # 反归一化 cv2.rectangle(img, (x1, y1), (x2, y2), (0,255,0), 2) cv2.imwrite(output.jpg, img) print(fDetected box: ({x1},{y1}) to ({x2},{y2})) if __name__ __main__: run_inference(runs/train/trash_det_v1/weights/best.onnx, test.jpg)5.2.1 性能对比数据实测于 GTX 1050 Ti推理方式单图耗时显存占用是否支持 batchPyTorch CPU2430 ms120 MB否PyTorch GPU186 ms1.2 GB是batch4ONNX GPU92 ms850 MB是batch8注意ONNX GPU 推理需providers[CUDAExecutionProvider]若设备无 GPU 则自动回退到[CPUExecutionProvider]。5.3 mAP0.5 计算使用val.py而非test.py的原因与命令课程报告 PDF 中的 mAP 指标必须来自验证集val而非测试集test因为val.py在训练过程中每轮自动计算结果记录在results.csv中test.py需单独划分 test 集课程作业通常无额外 test 数据val.py输出的metrics/precision,metrics/recall,metrics/mAP_0.5是官方评估标准。执行命令python val.py \ --data dataset/data.yaml \ --weights runs/train/trash_det_v1/weights/best.pt \ --img 640 \ --task val \ --name trash_val_metrics输出关键指标位于runs/val/trash_val_metrics/results.txtClass Images Instances P R mAP50 all 120 342 0.821 0.763 0.791此mAP500.791即为报告中需呈现的核心指标必须截图results.png中的 PR 曲线图作为附件。6. 期末报告 PDF 制作技巧用 Matplotlib 生成可 publication 级图表与 LaTeX 公式嵌入6.1 自动生成 PR 曲线图避免截图失真YOLOv5val.py生成的results.png是 PNG 格式放大后锯齿明显。改用脚本提取 CSV 数据绘图import pandas as pd import matplotlib.pyplot as plt import numpy as np # 读取 results.csv由 val.py 生成 df pd.read_csv(runs/val/trash_val_metrics/results.csv, skiprows2) df.columns [epoch, train/box_loss, train/obj_loss, train/cls_loss, val/box_loss, val/obj_loss, val/cls_loss, metrics/precision, metrics/recall, metrics/mAP_0.5, metrics/mAP_0.5:0.95] # 绘制 PR 曲线关键用 metrics/precision 和 metrics/recall plt.figure(figsize(8,6)) plt.plot(df[metrics/recall], df[metrics/precision], labelfmAP0.5 {df[metrics/mAP_0.5].max():.3f}, linewidth2) plt.xlabel(Recall, fontsize12) plt.ylabel(Precision, fontsize12) plt.title(Precision-Recall Curve, fontsize14, fontweightbold) plt.grid(True, linestyle--, alpha0.7) plt.legend() plt.savefig(pr_curve.pdf, bbox_inchestight, dpi300) # 高清矢量图6.1.1 为什么用.pdf而非.pngPDF 是矢量图插入 LaTeX 报告时缩放不失真dpi300确保打印清晰bbox_inchestight自动裁掉空白边距。6.2 LaTeX 报告中嵌入 PyTorch 公式用amsmath渲染损失函数课程报告常需解释 YOLOv5 的损失函数。在.tex文件中插入\usepackage{amsmath} % 在正文位置 YOLOv5 的总损失函数为 \begin{equation} \mathcal{L}_{\text{total}} \lambda_{\text{box}} \mathcal{L}_{\text{box}} \lambda_{\text{obj}} \mathcal{L}_{\text{obj}} \lambda_{\text{cls}} \mathcal{L}_{\text{cls}} \end{equation} 其中 $\mathcal{L}_{\text{box}}$ 采用 CIoU 损失$\mathcal{L}_{\text{obj}}$ 为二元交叉熵$\mathcal{L}_{\text{cls}}$ 为类别交叉熵。提示CIoU公式中 $\alpha$ 和 $v$ 参数在models/yolo.py的ComputeLoss类中硬编码报告中可注明“具体实现见源码第 142 行”。6.3 Docker 镜像体积优化用dive工具分析层大小并裁剪期末作业提交的镜像常超 2GB。用dive分析dive trashdet:v1.0发现/opt/venv/lib/python3.9/site-packages/torch/lib占 1.2GB。优化方案删除torch的 debug 符号strip /opt/venv/lib/python3.9/site-packages/torch/lib/*.so用pip install --no-deps安装torch后手动pip install numpy避免重复依赖最终镜像体积可压至 850MB满足课程提交限制。执行docker save trashdet:v1.0 | gzip trashdet_v1.0.tar.gz生成压缩包直接上传。本文还有配套的精品资源点击获取

相关新闻

WSNs多跳传输安全与噪声优化路径选择方法

WSNs多跳传输安全与噪声优化路径选择方法

1. 多跳收集-传输无线传感器网络(WSNs)面临的挑战在无线传感器网络的实际部署中,多跳收集-传输架构是最常见的拓扑结构之一。这种网络由大量资源受限的传感器节点组成,通过多跳中继的方式将感知数据传输到汇聚节点(Sin…

2026/9/16 7:10:55 阅读更多 →
Docker Compose部署Zabbix监控平台:从架构设计到告警实战

Docker Compose部署Zabbix监控平台:从架构设计到告警实战

用 Docker 跑 Zabbix,这个念头很多人动过,但真正落地的时候,踩的坑往往比想象中多。Zabbix 这套东西单独装不复杂,可一旦涉及到多组件联动、数据库调优、告警通道打通,每一步都藏着考验。我在生产环境里用 Docker Comp…

2026/9/16 7:10:55 阅读更多 →
Python实现分形艺术:从曼德勃罗集到算法创作

Python实现分形艺术:从曼德勃罗集到算法创作

1. 项目概述:Python与算法艺术的碰撞十年前我第一次看到曼德勃罗集合的图像时,就被这种由简单数学公式生成的无限复杂图案震撼了。如今借助Python,任何具备基础编程能力的人都能创造出令人惊叹的算法艺术作品。分形绘图不仅仅是数学可视化&am…

2026/9/16 7:10:55 阅读更多 →

最新新闻

基于STM32构建城市路灯节能控制系统

基于STM32构建城市路灯节能控制系统

城市路灯节能控制系统 绪论系统方案设计 系统总体架构系统功能主要模块选型 硬件设计 主控与电源传感器接口路灯驱动系统接线总表 软件设计 主程序流程调光策略太阳能追光平台运维 系统实现与测试 测试场景测试结果 总结 城市路灯节能控制系统 绪论 城市道路照明在传统定时控…

2026/9/16 8:01:15 阅读更多 →
跨国调研的样本质量怎么控?2026六家全球样本服务质控对比

跨国调研的样本质量怎么控?2026六家全球样本服务质控对比

测评说明:本文为调研从业者实测记录,记录问卷星样本服务、问卷网样本服务、51 调查、云调查、集思网等2026年六家线上样本渠道公开质控相关功能参数,面向跨国调研场景,记录各渠道可支持能力。仅陈述客观功能与规则,不作…

2026/9/16 8:01:15 阅读更多 →
Windows环境下单机版DM8安装

Windows环境下单机版DM8安装

3.1 运行镜像文件3.2 选择语言时区3.3 进入安装向导3.4 接受许可证协议3.5 Key文件配置测试版直接跳过,可免费使用一年3.6 选择安装组件选择典型安装,即包含所有组件3.7 选择安装目录安装到指定目录3.8 确认安装配置3.9 安装3.10 初始化数据库3.11 创建实…

2026/9/16 8:01:15 阅读更多 →
虚实融合数字孪生实验室:四大虚拟仿真平台重构嵌入式教学

虚实融合数字孪生实验室:四大虚拟仿真平台重构嵌入式教学

做了十年嵌入式教学和实验室建设相关工作,我见过太多高校实验室从"重金采购"到"吃灰闲置"的完整周期。很多学校花大价钱建了嵌入式实验室、物联网实验室、AI实验室,结果设备更新跟不上技术迭代,学生学的内容和产业需求严…

2026/9/16 8:01:15 阅读更多 →
船舶摇摆台厂家怎么选?先看这四类出厂检测报告和定型试验能力

船舶摇摆台厂家怎么选?先看这四类出厂检测报告和定型试验能力

摇摆台采购的“验收盲区”做过船载设备环境试验的项目采购和测试工程师都清楚一个现实:摇摆台买回来,验收环节往往是走过场。设备到货,通电试运行,看台面能动、能摇,就签收。但真正到了船载设备定型试验或者可靠性考核…

2026/9/16 8:01:15 阅读更多 →
PPO算法在无人机三维路径规划中的应用与实践

PPO算法在无人机三维路径规划中的应用与实践

1. 项目概述:无人机三维路径规划与PPO算法在无人机自主导航领域,三维路径规划一直是核心挑战之一。传统方法如A*、RRT等算法虽然成熟,但在动态复杂环境中往往表现僵硬。这个项目采用近端策略优化(PPO)这一强化学习算法…

2026/9/16 8:00:15 阅读更多 →

日新闻

嵌入式三大高薪赛道:车规功能安全、RISC-V固件架构、边缘AI部署

嵌入式三大高薪赛道:车规功能安全、RISC-V固件架构、边缘AI部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/16 0:00:51 阅读更多 →
IoT-For-Beginners 智能语音计时器:Wio Terminal 基于 DMAC 与 Flash 的音频采集实战

IoT-For-Beginners 智能语音计时器:Wio Terminal 基于 DMAC 与 Flash 的音频采集实战

IoT-For-Beginners 智能语音计时器:Wio Terminal 基于 DMAC 与 Flash 的音频采集实战 【免费下载链接】IoT-For-Beginners 12 Weeks, 24 Lessons, IoT for All! 项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners 本指南聚焦 GitHub Tren…

2026/9/16 0:01:52 阅读更多 →
基于MATLAB的CRI显色指数计算:从SPD光谱到Ra的完整流程

基于MATLAB的CRI显色指数计算:从SPD光谱到Ra的完整流程

简介:针对照明设计与光学研究中的光谱功率分布(SPD)与显色性指数(CRI)计算需求,这套MATLAB程序为照明工程师、LED研发人员及光学专业学生提供了轻量工具。代码通过解析光谱测量数据,自动完成波长…

2026/9/16 0:01:52 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/15 12:27:42 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/16 1:59:46 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/16 1:59:35 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/15 21:40:00 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/15 21:40:17 阅读更多 →