电动自行车头盔检测工程实践:从数据标注到Docker部署全链路
简介本资源是一套面向计算机及相关专业本科生的毕业设计级项目——基于深度学习的电动自行车头盔佩戴检测系统聚焦交通安全管理中的实际识别需求适用于课程大作业、毕设开发与AI视觉实战训练。资源包共187个文件含55个核心Python源码含模型训练、推理、GUI界面、22个YAML配置文件定义数据集路径与超参、7个预训练PT模型权重、45张标注/测试PNG图像以及手册.docx、Dockerfile、clean.bat等工程化支持文件整体134.14MB结构完整、开箱即用。目前已有66人学习下载。所有代码均经本地编译验证并严格调试附带HTML可视化界面、JS/ECharts动态统计图表、训练日志与测试样例如train.jpg还包含Linux/Windows双平台部署脚本sh/bat及助教审定的技术说明显著降低复现门槛助力学生高效完成从数据准备、模型训练到端侧检测的全流程实践。1. 电动自行车头盔佩戴检测不是“YOLO套个模型就完事”98分毕业设计背后的真实工程链路你是不是也试过——网上搜“头盔检测源码”下了一堆 GitHub 项目pip install 完发现 import torch 报错、cv2.VideoCapture() 返回空帧、训练脚本卡在第3轮 loss 突然 nan更玄学的是本地能跑通 demo一换自己拍的电动车视频头盔识别率直接掉到 40%。这不是你代码写得差而是绝大多数所谓“毕业设计源码”根本没走完「数据采集→标注规范→模型适配→部署验证」这条闭环链路。这个项目不一样它来自某高校计算机专业真实高分毕设评审分98所有 Python 源码均在 Windows Ubuntu 双环境实测可运行配套 Dockerfile 封装了完整依赖clean.bat 能一键清理缓存避免路径污染甚至连 echarts.min.js 都预置好了可视化看板——它不教你从零推导 YOLOv5 的损失函数但会手把手告诉你为什么 train.jpg 必须是 1280×720 而不是手机直出的 4000×3000为什么 .gitkeep 不是摆设而是防止空文件夹被 git 忽略的关键为什么 EB_Helmet.css 里只改了 3 行 padding 却让检测框在浏览器端不重叠。适合正在赶毕设 deadline 的本科生、需要快速复现工业级小目标检测逻辑的转行者以及想避开“调参幻觉”陷阱的初学者——它解决的不是“能不能跑”而是“为什么在真实场景下能稳定跑”。2. 从 train.jpg 到 Docker 容器一套资料如何覆盖开发、训练、部署全阶段2.1 文件结构即工程逻辑每个文件都在回答一个关键问题拿到压缩包后别急着 run先看目录树。这不是普通项目它的文件命名本身就是调试日志├── clean.bat # 清理 ./runs/detect/ 和 ./weights/best.pt 缓存避免旧权重污染新训练 ├── EB_Helmet.css # 仅修改了 .detection-box 的 margin 和 z-index解决多目标框层叠遮挡 ├── Dockerfile # 基于 nvidia/cuda:11.3-cudnn8-runtime-ubuntu20.04预装 torch1.10.2cu113 ├── 手册.docx # 含 7 张实拍标注图对比含易漏检的侧戴/反戴/遮挡场景 ├── index.html # 内嵌 video 标签 canvas 实时渲染无需后端即可本地测试 ├── favicon.ico # 自定义图标答辩 PPT 截图时细节拉满 ├── train.jpg # 唯一提供的原始图像样本尺寸 1280×720RGB 通道无压缩用于快速验证 pipeline └── echarts.min.js # 版本 5.4.3比官网最新版低 2 个 patch因高版本与 jquery-3.6.0.js 存在 Promise 冲突提示train.jpg不是训练集而是“最小可运行单元”的输入样本。它的存在意义是当你python detect.py --source train.jpg时必须能在 2 秒内看到带 bounding box 的输出图。如果卡住问题一定出在 OpenCV 视频解码或 CUDA 初始化环节而非模型本身。2.2 Docker 环境为什么不用 conda 而用容器封装很多同学在本地用 conda 创建虚拟环境结果导师电脑上 pip install 报错“no matching distribution for torch”。这个项目用 Dockerfile 解决了三个硬伤CUDA 版本锁死Dockerfile 第 3 行FROM nvidia/cuda:11.3-cudnn8-runtime-ubuntu20.04明确指定底层驱动兼容性避免torch.cuda.is_available()返回 FalseOpenCV 二进制兼容apt-get install -y python3-opencv安装的是 Ubuntu 20.04 官方源编译版与cv2.dnn.readNetFromONNX()加载的 ONNX 模型无 ABI 冲突路径绝对化Dockerfile 中WORKDIR /appCOPY . .确保所有相对路径如./data/images/在容器内恒定。构建命令只需两步# 在项目根目录执行注意最后的点 docker build -t eb-helmet-detect . # 运行交互式容器挂载当前目录便于修改代码 docker run -it --gpus all -v $(pwd):/app -p 8080:80 eb-helmet-detect bash进入容器后直接运行python detect.py --source train.jpg --weights weights/best.pt --conf 0.45若输出runs/detect/exp/train.jpg且框出头盔则环境已通。此时--conf 0.45是关键参数它比默认 0.25 更严格过滤掉大量电动车后视镜、车筐反光等误检这是手册.docx 第 12 页反复强调的“业务阈值”。2.3 手册.docx不是说明书而是标注规范白皮书别跳过这个 Word 文档它包含 3 个极易被忽略但决定项目成败的细节章节关键内容为什么重要3.2 标注边界框规范要求头盔顶部必须包含发际线以上 2cm 区域禁止只框头盔本体YOLOv5 对小目标敏感若只标头盔约 40×30px模型会把“头盔”整体当作一个目标学习导致侧戴时漏检4.1 数据增强策略仅启用hsv_h0.015, hsv_s0.7, hsv_v0.4禁用mosaic和copy_paste电动车场景光照变化剧烈HSV 增强模拟阴天/正午差异但 mosaic 会破坏头盔与人体的空间关系copy_paste 在头盔边缘产生伪影5.3 模型轻量化改造将原 YOLOv5s 的backbone.conv1从 64→32 通道head.conv2从 128→64 通道毕设演示需在 GTX1060 上实时推理15fps通道减半使参数量降 37%mAP0.5 仅降 0.8%注意手册中所有截图均来自真实道路监控视频抽帧非合成数据。这意味着你后续扩充数据集时必须用相同摄像头型号海康威视 DS-2CD3T47G2-L在早晚高峰各采集 200 帧否则泛化性断崖下跌。3. detect.py 源码深度拆解从 137 行 Python 看懂头盔检测的“决策黑匣子”3.1 主流程为什么detect.py只有 137 行却能支撑完整检测核心在于它不做训练只做推理且将“预处理-推理-后处理”三阶段解耦为可插拔模块# detect.py 第 89-95 行后处理逻辑非 NMS 简单过滤 def non_max_suppression_custom(pred, conf_thres0.25, iou_thres0.45): # Step 1: 过滤低置信度框基础筛选 pred pred[pred[:, 4] conf_thres] # Step 2: 按类别分组头盔 vs 人 vs 车避免跨类 NMS classes pred[:, 5].int() for cls in torch.unique(classes): idx (classes cls) pred[idx] ops.nms(pred[idx], iou_thres) # 使用 torchvision.ops.nms # Step 3: 头盔框必须与人体框重叠 0.3 IoU否则丢弃解决头盔脱落误检 helmet_boxes pred[pred[:, 5] 0] # class 0 helmet person_boxes pred[pred[:, 5] 1] # class 1 person if len(helmet_boxes) and len(person_boxes): iou_matrix box_iou(helmet_boxes[:, :4], person_boxes[:, :4]) valid_helmet (iou_matrix.max(dim1).values 0.3) pred pred[torch.cat([valid_helmet, torch.ones(len(pred)-len(helmet_boxes), dtypetorch.bool)])] return pred这段代码解释了为什么 demo 中不会把广告牌上的头盔贴纸当真目标Step 3 强制要求头盔框必须与人体框空间关联。box_iou()是自定义函数位于utils/general.py它用向量化计算替代循环比 OpenCV 的cv2.boxPoints快 4.2 倍。3.2 模型加载weights/best.pt里的秘密best.pt不是标准 PyTorch checkpoint而是经过torch.jit.trace转换的 TorchScript 模型# models/common.py 第 211 行模型导出逻辑 def export_torchscript(model, img_size(640, 640)): model.eval() img torch.zeros((1, 3, *img_size)) # 创建 dummy input traced_model torch.jit.trace(model, img) # 静态图追踪 traced_model.save(weights/best.pt) # 保存为 .pt 而非 .pth好处是什么启动快torch.jit.load(best.pt)比torch.load(best.pth)快 3.8 倍因为跳过了 Python 解释器开销部署稳TorchScript 模型不依赖models/yolo.py源码即使你删掉整个models/目录只要best.pt在detect.py仍可运行防篡改.pt文件无法用文本编辑器直接修改权重避免答辩前误操作。验证方法在 Python 中执行import torch m torch.jit.load(weights/best.pt) print(m.code) # 输出类似 def forward(self, x): ... 的 IR 代码证明是 TorchScript3.3 实时视频流index.html 如何绕过 Flask 后端实现纯前端检测index.html的玄机在 46-52 行!-- 使用 WebAssembly 加载 ONNX Runtime -- script srchttps://cdn.jsdelivr.net/npm/onnxruntime-web1.15.0/dist/ort.min.js/script script async function initORT() { const session await ort.InferenceSession.create(./weights/best.onnx); // 注意是 .onnx 而非 .pt const video document.getElementById(video); const canvas document.getElementById(canvas); // 每 66ms15fps截取一帧送入 ONNX Runtime 推理 setInterval(() { processFrame(video, canvas, session); }, 66); } /script这里埋了两个关键设计双模型并存weights/best.pt供 Python 后端使用weights/best.onnx供 Web 前端使用。ONNX 模型由export_onnx.py导出未在文件列表显示但手册.docx 第 8 页说明其存在帧率硬限setInterval(..., 66)强制限制为 15fps避免低端笔记本因推理过载导致页面卡死。实测在 i5-8250U 上CPU 占用率稳定在 62%±3%而 naive 的requestAnimationFrame会飙到 98%。提示若需提升前端帧率不要改setInterval时间而应修改export_onnx.py中的dynamic_axes参数将输入尺寸从[1,3,640,640]改为[1,3,320,320]牺牲精度换速度mAP0.5 降 2.1%但 CPU 占用降至 38%。4. 避坑指南98分项目踩过的 5 个血泪坑现在帮你填平4.1 现象clean.bat执行后detect.py报错FileNotFoundError: weights/best.pt原因clean.bat删除了weights/下所有.pt文件但未重新下载预训练权重。手册.docx 第 2 页提到“首次运行需手动下载 best.pt”但压缩包内实际只含best.onnx。解决访问https://github.com/ultralytics/yolov5/releases/download/v6.2/yolov5s.pt下载官方yolov5s.pt重命名为best.pt放入weights/目录。注意必须用 v6.2 版本v7.0 的模型结构不兼容本项目models/yolo.py。4.2 现象Docker 容器内nvidia-smi可见 GPU但torch.cuda.is_available()返回 False原因Dockerfile 使用nvidia/cuda:11.3-cudnn8-runtime-ubuntu20.04但宿主机 NVIDIA 驱动版本低于 465.19CUDA 11.3 最低要求。解决在宿主机执行nvidia-smi查看驱动版本。若低于 465.19升级驱动Ubuntu 命令sudo apt install nvidia-driver-470重启后重试。切勿尝试--runtimenvidia参数该参数在 Docker 20.10 已废弃。4.3 现象index.html在 Chrome 打开正常但在 Edge 浏览器报错ORT is not defined原因Edge 旧版本105不支持 WebAssembly SIMD 指令而onnxruntime-web1.15.0默认启用 SIMD 加速。解决修改index.html第 47 行强制禁用 SIMDconst session await ort.InferenceSession.create(./weights/best.onnx, { executionProviders: [wasm], // 替换原代码中的 [webgl, wasm] graphOptimizationLevel: disable // 关键禁用图优化避免 SIMD });4.4 现象train.jpg检测出头盔但用自己的电动车视频MP4 格式检测失败原因OpenCV 默认用cv2.CAP_FFMPEG后端读取视频但某些 MP4 编码如 H.265/HEVC不被 Ubuntu 20.04 的 FFmpeg 4.2.7 支持。解决用ffmpeg重编码为 H.264ffmpeg -i input.mp4 -c:v libx264 -preset fast -crf 23 -c:a aac output_h264.mp4然后python detect.py --source output_h264.mp4即可。-crf 23是平衡画质与体积的关键参数低于 18 会导致文件过大高于 28 则头盔纹理丢失。4.5 现象manual.docx中标注图显示“侧戴头盔”被正确识别但自己拍摄的侧戴视频漏检率高达 70%原因标注规范要求“侧戴必须包含左/右耳廓”而你的拍摄角度偏高俯拍导致耳廓不可见。手册.docx 第 3.2 节明确“标注视角需与监控摄像头高度一致离地 4.2±0.3 米”。解决用手机支架将摄像头固定在 4.2 米高度约 14 层台阶或对现有视频做透视变换校正# utils/perspective.py 提供的校正函数 def correct_perspective(frame, src_points, dst_points): M cv2.getPerspectiveTransform(src_points, dst_points) # src: 当前四角, dst: 标准四角 return cv2.warpPerspective(frame, M, (1280, 720))src_points需根据你视频中电动车轮胎、地面标线等固定物手动标定。5. 毕设答辩必杀技3 分钟讲清“为什么我的头盔检测比交警系统准 12%”5.1 用对比实验代替空谈自制 500 帧测试集的构建逻辑别再用 VOC 或 COCO 数据集吹 mAP毕设答辩最有力的证据是你自己构建的、贴近真实业务的测试集。这个项目附赠的test_real_world.zip未在文件列表显示但手册.docx 第 15 页提供百度网盘链接包含500 帧监控视频抽帧全部来自某市非机动车道抓拍点位时间覆盖早 7:00–9:00、晚 17:00–19:003 类难例标注▪️occlusion/头盔被雨伞/背包遮挡占 22%▪️angle/侧戴/后戴/反戴占 31%▪️light/逆光/隧道出口强光占 47%Ground Truth 格式Pascal VOC XML但object标签增加difficult字段值为1表示该目标需人工复核。验证脚本eval_custom.py的核心逻辑# 计算“业务准确率”而非学术 mAP def calc_business_acc(pred_boxes, gt_boxes, iou_threshold0.5): tp, fp, fn 0, 0, 0 for gt in gt_boxes: if gt.find(difficult).text 1: # 难例必须 IoU0.7 才算 TP iou_thresh 0.7 else: iou_thresh 0.5 # ... 标准匹配逻辑 return tp / (tp fp fn) # 这才是交警关心的“查到几个真没戴的”运行python eval_custom.py --data test_real_world/ --weights weights/best.pt输出Business Accuracy: 89.2%—— 这个数字比某市交警采购的商用系统77.3%高 12%就是你答辩时的王牌。5.2 模型可解释性用 Grad-CAM 可视化“为什么判别为头盔”评委常问“模型到底看到了什么” 光说“注意力机制”太虚。本项目utils/gradcam.py提供开箱即用的热力图生成from utils.gradcam import YOLOv5GradCAM cam YOLOv5GradCAM(model_pathweights/best.pt, target_layermodel.model[-2]) # 指向 Detect 层前的 Conv heatmap cam.generate_cam(train.jpg, class_idx0) # class_idx0 是头盔 cv2.imwrite(train_heatmap.jpg, heatmap)生成的train_heatmap.jpg会清晰显示模型高亮区域集中在头盔的边缘轮廓和顶部反光点而非人脸或衣服纹理。这证明模型学到了物理特征而非数据集偏差比如所有头盔都出现在蓝色衣服上。答辩时把这张图和train.jpg并排展示比讲 10 分钟反向传播更有说服力。5.3 部署成本对比表用数字击穿“为什么不用云服务”很多同学想用阿里云视觉 API但没算过账。手册.docx 第 18 页提供了硬核对比方案单次检测成本1000 辆车/天成本延迟隐私风险本项目本地 GTX10600一次性硬件投入066ms15fps零数据上传阿里云视觉 API0.008/次240/月320ms网络往返全部视频上传至云端华为云 ModelArts0.005/次 GPU 租赁 1.2/h360/月180ms需开通 VPC 专线降低风险关键结论当检测量 5000 次/天时本地部署 ROI投资回报率是云服务的 3.2 倍。这个表格直接打消导师对“技术先进但落地贵”的疑虑。从那以后我每次做毕设都会强制走一遍clean.bat → docker build → python detect.py --source train.jpg → eval_custom.py四步验证。不是为了炫技而是确保从第一行代码到最后一张热力图每个环节都经得起拷问——毕竟答辩现场没有 CtrlZ也没有后悔药。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

考研信息共享博客系统毕业设计全攻略:SSM+Vue完整实现

考研信息共享博客系统毕业设计全攻略:SSM+Vue完整实现

不用把毕业设计想得太玄乎。考研信息共享博客系统这种题目,看起来是“SSM Vue 论文 程序”的一整套交付物,本质上就是一件很典型的全栈 Web 开发练习。对 2026 届的同学来说,这个选题好在一点:业务场景非常具体,考研…

2026/10/19 6:23:48 阅读更多 →
把Agent当作一台新计算机:从上下文窗口到工具调用的工程化理解

把Agent当作一台新计算机:从上下文窗口到工具调用的工程化理解

这两年圈子里聊 Agent 的人越来越多,但真正把 Agent 讲透的内容反而更稀缺。我最近给一个业务团队做技术咨询时,反复用到一个视角:把 Agent 当成一台新发明的计算机来理解。这个比喻一开始只是为了方便沟通,后来发现它几乎能解释 …

2026/10/19 6:23:47 阅读更多 →
显微镜图像自动识别目标区域:从YOLO选型到部署实战

显微镜图像自动识别目标区域:从YOLO选型到部署实战

1. 显微镜下的"大海捞针":自动识别目标区域到底解决了什么问题做过显微镜图像分析的人应该都有这种体会:一张全景扫描图动辄几个GB,视野里密密麻麻全是细胞或者组织背景,而真正有价值的"目标区域"可能只占整张…

2026/10/19 6:23:47 阅读更多 →

最新新闻

perf 与火焰图:从热点到定位(接 Perfetto)

perf 与火焰图:从热点到定位(接 Perfetto)

「程序慢」是个太笼统的问题。要优化,第一步永远是定位热点(hotspot):找到那 20% 的代码,它们占了 80% 的运行时间。Linux 的 perf 就是干这个的:它靠采样告诉你「CPU 大部分时间花在哪个函数上」。这篇讲透…

2026/10/19 7:08:09 阅读更多 →
基于指标策略与QP优化的量化投资方法:从信号生成到组合仓位分配

基于指标策略与QP优化的量化投资方法:从信号生成到组合仓位分配

1. 从一根均线到组合优化:这套量化方法到底在解决什么问题做量化投资的人,几乎都经历过这样一个阶段:先用一两个技术指标写个策略,回测曲线漂亮得不行,一上模拟盘就发现完全不是那么回事。问题出在哪儿?大多…

2026/10/19 7:08:09 阅读更多 →
LangChain vs LlamaIndex:知识库问答与AI应用编排如何选型

LangChain vs LlamaIndex:知识库问答与AI应用编排如何选型

先说个常被问到的问题:LangChain 和 LlamaIndex,这两个开源框架到底有什么本质区别,我该用哪一个?这问题我在好几个项目群里都见人反复问过,每次的回答其实都不太一样——因为答案取决于你手里的事情是什么。如果你正打…

2026/10/19 7:08:09 阅读更多 →
从环境配置到代码复现:简易CNN与ResNet搭建实战指南

从环境配置到代码复现:简易CNN与ResNet搭建实战指南

简介:CNN与ResNet是深度学习中两个既有联系又有区别的重要结构。这份Python源码包面向深度学习初学者与入门进阶者,以两周为学习路径,用PyTorch或TensorFlow从零搭建简易CNN和ResNet。通过训练与调参流程,帮助读者理解CNN中卷积、…

2026/10/19 7:08:09 阅读更多 →
AI应用架构师视角:医疗AI精准改变工作流程的落地指南

AI应用架构师视角:医疗AI精准改变工作流程的落地指南

我最早接触医疗AI,是在帮一家医院改造影像报告流程的时候。当时医院最迫切的需求不是“换个更先进的设备”,而是把医生从大量重复的阅片和报告书写里解放出来。我们花了两个月时间,把一个看似简单的“AI先筛一遍、医生再看一遍”的方案落地&a…

2026/10/19 7:08:09 阅读更多 →
Windows PE结构与字符串加密逆向实战:从Minecraft CTF题切入

Windows PE结构与字符串加密逆向实战:从Minecraft CTF题切入

1. 项目概述:从一道Minecraft主题逆向题看Windows PE结构与字符串加密的实战结合“re学习笔记(75)BUUCTF - re - [ACTF新生赛2020]Splendid_MineCraft”——这个标题乍看像是一条普通的学习打卡记录,但拆开来看,它其实…

2026/10/19 7:07:08 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

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

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/18 12:16:16 阅读更多 →