MaixCam安全帽检测模型部署:从零实现“无脑”运行
1. 项目概述让MaixCam成为你的“模型播放器”最近在捣鼓MaixCam这块开发板发现一个挺普遍的需求很多朋友拿到手第一反应不是去学怎么训练模型而是想赶紧找个现成的、好玩的模型跑起来看看效果。这太正常了毕竟看着屏幕里实时识别出东西那种成就感是立竿见影的。但问题也来了官方的例子可能不够用网上大佬分享的模型文件比如.kmodel下载下来怎么丢进MaixCam里让它“无脑”运行起来往往就卡住了。特别是像“安全帽检测”这种在工业、安防领域非常实用的模型如果能快速部署价值立马就体现出来了。所谓“无脑运行”核心目标就是最小化技术门槛。你不需要理解YOLOv5的网络结构也不用操心训练数据的标注更不必深究K230芯片的NPU驱动。你需要的就是一个现成的模型文件、一个能调用这个模型的简单程序、以及把它们放到正确位置的一两条命令。这就像给MaixCam安装了一个“播放器”而模型就是“视频文件”我们的任务就是找到匹配的播放器并打开文件。本文将以一个开源的安全帽检测模型为例手把手带你走通从获取模型、编写适配代码到实际上板运行的完整流程过程中会穿插大量我踩过的坑和总结的“偷懒”技巧目标是让你看完就能动手一次成功。2. 核心思路与准备工作理解“播放器”与“视频文件”在开始“无脑操作”前花两分钟理解背后的逻辑能避免你99%的疑惑和报错。MaixCam的核心是嘉楠K230芯片它带有一个神经处理单元NPU专门用于加速神经网络推理。但这个NPU不能直接运行你在PyTorch或TensorFlow里训练的原始模型它需要一种特定的格式——通常是嘉楠自家的.kmodel格式。所以整个流程可以拆解为三个关键环节我把它叫做“模型运行三要素”模型文件.kmodel这是经过编译、优化专为K230 NPU设计的“可执行文件”。它包含了网络权重、结构以及针对硬件的特殊指令。我们的目标就是获得一个正确的安全帽检测kmodel文件。运行时库与驱动这是MaixPy3MaixCam的官方Python开发框架底层的东西。它负责加载kmodel文件在NPU上分配内存、执行计算。通常我们更新固件就是为了获得最新、最稳定的运行时支持。应用程序脚本main.py这是你写的Python代码它调用MaixPy3提供的AI模块如maix.nn来加载模型、处理摄像头图像、执行推理、并解析输出结果在屏幕上画框。“无脑运行”的关键在于我们默认第2点运行时环境已经由官方固件准备好了我们要解决的是1和3。并且我们要找到一个“配套”的1和3即模型文件和示例代码是匹配的。很多新手失败就是因为用A模型的文件却跑了B模型的示例代码输入输出对不上自然就报错了。2.1 工具与物料清点在动手前请确保你手头有以下“装备”硬件MaixCam开发板一台Type-C数据线一根。软件固件确保MaixCam运行着较新的固件如v1.1.1或更高。你可以在MaixCam开机后通过串口工具连接查看启动日志的第一行。如果不确定最好去 Sipeed官网 下载最新固件并烧录一次这是最稳妥的起点。开发工具推荐使用VSCode并安装MaixPy3插件。这个插件提供了非常方便的代码上传、终端交互功能是当前最友好的开发方式。当然你也可以使用传统的串口工具如MobaXterm, PuTTY和ADB工具但步骤会繁琐一些。模型与代码我们需要找到配套的资源。一个很好的起点是Sipeed官方GitHub仓库的maixhub_models或maixnn项目里面有很多示例。针对安全帽检测我们可能需要自己寻找或转换一个模型。2.2 寻找现成的安全帽检测模型理想情况是能找到直接可用的.kmodel文件和对应的Python脚本。我们可以从以下几个渠道尝试MaixHub模型市场在浏览器访问 MaixHub 这是一个模型分享平台。你可以搜索“helmet”或“安全帽”。如果运气好会有开发者上传了编译好的kmodel和示例代码直接下载整个项目包是最省事的。GitHub搜索在GitHub搜索关键词 “helmet detection kmodel maixcam” 或 “安全帽 k230 kmodel”。注意查看项目的README确认是否针对MaixCam或K230平台。从通用模型转换如果找不到现成的我们可能需要“自力更生”。网上有大量基于YOLOv5、YOLOv8训练的安全帽检测PyTorch模型.pt文件。我们需要通过嘉楠的模型转换工具链将.pt模型先转为ONNX再编译为.kmodel。这个过程稍有门槛但一旦掌握你就拥有了运行任何模型的能力。为了本文的“无脑”主题我们优先寻找方案1或2的现成资源。实操心得我最初在MaixHub上找到了一个“Safety Helmet Detection”模型但发现其示例代码是针对老版本MaixPy的不兼容MaixPy3。后来在GitHub上一个开源仓库里找到了一个搭配好的组合。所以“无脑”的第一步其实是“耐心寻找”找到一个经过验证的、代码与模型配套的资源包能节省大量调试时间。假设我们已经找到了一个这样的资源包里面包含helmet_det.kmodel(模型文件)main.py(示例代码)labels.txt(类别标签文件内容是“helmet”和“person”两行)接下来我们就进入部署环节。3. 模型部署与脚本适配详解拿到资源包后不要急着全部上传。我们需要先“读懂”示例代码并做必要的适配确保它能跑在我们的板子上。3.1 代码结构解析与关键参数修改让我们打开找到的main.py其核心结构通常如下import time from maix import nn, camera, display, image # 1. 模型加载 model_path /root/helmet_det.kmodel model nn.load(model_path) # 2. 获取模型输入输出信息 print(model) # 通常输出会显示输入尺寸例如 input:0 : [1, 3, 224, 224] fp32 # 这意味着模型期望一个形状为[1, 3, 224, 224]的浮点数张量即224x224的RGB图像。 # 3. 初始化摄像头必须与模型输入尺寸匹配 camera.config(size(224, 224)) # 这里必须修改为模型实际的输入尺寸 # 4. 标签加载 labels [] with open(/root/labels.txt, r) as f: for line in f: labels.append(line.strip()) # 5. 主循环捕获-推理-显示 while True: img camera.capture() # 捕获一帧图像 if img: # 预处理图像缩放到模型输入尺寸并转换为RGB格式 img_tensor img.resize(224, 224).to_numpy_rgb() # 注意有些模型可能需要归一化如/255.0或BGR转RGB具体看模型训练时的预处理方式 # 例如img_tensor img_tensor / 255.0 img_tensor img_tensor.transpose((2, 0, 1))[None, ...] # 变为CHW格式并增加Batch维度 - [1,3,224,224] # 执行推理 outputs model.forward(img_tensor) # 注意outputs的结构因模型而异这是最需要适配的部分。 # 6. 解析输出这里以YOLO格式为例需要根据实际模型调整 # 假设outputs是一个列表outputs[0]的形状是[1, 25200, 6] (YOLOv5输出格式) # 其中6代表 [x_center, y_center, width, height, confidence, class_id] boxes, scores, class_ids parse_yolo_output(outputs[0], img.width, img.height) # 这是一个需要自己实现的函数 # 7. 绘制结果 for box, score, cls_id in zip(boxes, scores, class_ids): if score 0.5: # 置信度阈值 label f{labels[cls_id]}: {score:.2f} img.draw_rectangle(box[0], box[1], box[2], box[3], color(0, 255, 0), thickness2) img.draw_string(box[0], box[1] - 20, label, scale1.0, color(0, 255, 0)) display.show(img) time.sleep(0.01)你需要重点关注并修改以下几个地方模型路径(model_path)确保路径正确。通常我们将模型文件放在板子的/root目录下。摄像头尺寸(camera.config(size...))这是最容易出错的地方你必须将摄像头采集分辨率设置为与模型输入尺寸完全一致。如果模型是224x224这里就必须是(224, 224)。如果模型是320x320就改为(320, 320)。不匹配会导致推理出错或画面拉伸变形。预处理(img.to_numpy_rgb(),transpose, 归一化)不同的模型训练时预处理方式不同。最常见的两种归一化到[0,1]img_tensor img_tensor / 255.0均值标准差归一化img_tensor (img_tensor / 255.0 - [0.485, 0.456, 0.406]) / [0.229, 0.224, 0.225](ImageNet标准) 你需要查阅模型提供者的说明或者通过试验来确定。如果模型是在MaixHub上标准流程训练的通常只需要/255.0。输出解析(parse_yolo_output)这是最核心的适配点不同的模型YOLOv5, YOLOv8, MobileNet-SSD输出数据的格式天差地别。示例代码中的parse_yolo_output函数不会是MaixPy3内置的你需要根据你手中模型的具体输出格式来重写这个解析逻辑。3.2 如何“无脑”处理输出解析对于不想深究的初学者最“无脑”的方法是寻找一个输出格式与你的模型完全一致的、可工作的示例代码。如何知道模型的输出格式有两个方法打印输出在代码里加上print(outputs)或print([o.shape for o in outputs])。运行后在终端查看输出张量的形状。例如[1, 25200, 6]是YOLOv5的常见输出[1, 7]可能是分类模型。查阅模型来源的文档如果模型来自某个GitHub项目README里通常会说明。假设我们确认模型是YOLOv5格式输出形状为[1, 25200, 6]。我们可以实现一个简单的解析函数def parse_yolo_output(output, img_w, img_h, conf_thresh0.5, iou_thresh0.45): 简化版YOLOv5输出解析。 output: 形状为 [1, N, 6] 的numpy数组N是锚框数量。 返回值: boxes, scores, class_ids import numpy as np # 移除batch维度 - [N, 6] predictions output[0] # 根据置信度过滤 mask predictions[:, 4] conf_thresh pred predictions[mask] if len(pred) 0: return [], [], [] # 将中心点坐标和宽高转换为左上角、右下角坐标并缩放到原图尺寸 boxes pred[:, :4].copy() boxes[:, 0] (boxes[:, 0] - boxes[:, 2] / 2) * img_w # x1 boxes[:, 1] (boxes[:, 1] - boxes[:, 3] / 2) * img_h # y1 boxes[:, 2] boxes[:, 0] boxes[:, 2] * img_w # x2 boxes[:, 3] boxes[:, 1] boxes[:, 3] * img_h # y2 boxes boxes.astype(np.int32) scores pred[:, 4] class_ids pred[:, 5].astype(np.int32) # 简单的非极大值抑制 (NMS) 去除重叠框 indices nn.nms(boxes, scores, iou_thresh) return boxes[indices], scores[indices], class_ids[indices]注意事项这个解析函数非常简化没有考虑多尺度特征图对于复杂场景可能效果不佳。但对于快速验证和“无脑”运行一个能找到的模型它通常够用。更健壮的实现可以参考maix.nn中可能提供的后处理工具或者使用开源库如numpy实现更完整的NMS。4. 文件上传与上板运行全流程代码适配好后接下来就是把它和模型文件放到板子上运行。4.1 使用VSCode MaixPy3插件推荐这是最流畅的体验近乎“一键部署”。连接设备用Type-C线连接MaixCam和电脑。在VSCode左侧活动栏找到MaixPy3插件图标点击“连接设备”。如果MaixCam被识别为串口设备插件会自动连接。创建项目在本地电脑上创建一个文件夹例如maixcam_helmet_det。将我们修改好的main.py、helmet_det.kmodel、labels.txt三个文件放进去。上传文件在VSCode的文件资源管理器中右键点击这个文件夹选择“MaixPy3: Upload current folder to device”。插件会将整个文件夹同步到MaixCam的/root目录下。运行程序在VSCode中打开main.py按F5键或点击运行-启动调试。插件会自动在板子上执行python /root/maixcam_helmet_det/main.py。查看结果如果一切正常MaixCam的屏幕会实时显示摄像头画面并在检测到安全帽和人时画上绿色框。VSCode的终端窗口会显示程序的打印信息包括可能的错误。4.2 使用串口终端与ADB备选方案如果不用VSCode可以通过更底层的方式操作。连接串口使用MobaXterm、PuTTY等工具选择MaixCam对应的串口如COMx Linux下是/dev/ttyACM0波特率通常为115200连接后可以看到MaixCam的启动日志和Python交互终端。传输文件打开一个新的命令行窗口使用ADB命令传输文件。首先确保ADB已安装并且MaixCam通过USB连接。# 查看设备是否连接 adb devices # 将本地文件推送到设备 adb push helmet_det.kmodel /root/ adb push main.py /root/ adb push labels.txt /root/执行脚本回到串口终端在提示符后输入import sys sys.path.append(/root) exec(open(/root/main.py).read())或者更直接地使用命令# 在串口终端里按 CtrlC 先退出Python交互模式回到命令行。 # 然后执行 python /root/main.py4.3 运行现场与效果调优程序跑起来后你可能会遇到以下几种情况画面卡顿帧率很低。这可能是因为模型较大或者输入分辨率太高。可以尝试在camera.capture()后加一个img img.resize(160, 160)缩小图像再做推理但注意这会影响精度。更根本的方法是换一个更轻量的模型。检测框乱飞或不准这通常是输出解析函数与模型输出不匹配导致的。请再次确认print(outputs)的形状并检查你的解析逻辑是否正确处理了该形状的数据。特别是坐标转换从归一化中心坐标到像素坐标是否正确。检测不到目标首先确认目标是否在画面中且大小合适。其次检查预处理步骤尤其是归一化。尝试去掉或加上/255.0。最后可以降低conf_thresh置信度阈值比如从0.5降到0.3看看是否有低置信度的框出现。内存不足报错如果模型非常大可能会遇到内存错误。MaixCam的内存有限。解决方案只能是寻找更小的模型或者使用模型量化工具如NNCase生成INT8量化的kmodel可以显著减少内存占用和提升速度。实操心得我强烈建议在代码主循环开始时用print(maix.utils.heap_free())打印一下剩余内存。这能帮你判断内存是否紧张。另外第一次加载模型nn.load可能会非常慢10-30秒这是正常的因为模型正在从Flash加载到内存并初始化。耐心等待后续的推理就会很快。5. 常见问题排查与进阶技巧即使按照步骤操作也难免会遇到问题。这里汇总一个快速排查清单问题现象可能原因排查步骤nn.load失败或报错1. 模型文件路径错误。2. 模型文件损坏。3. 模型格式不兼容非kmodel或版本不对。4. 固件版本太旧。1. 检查model_path字符串确认文件存在import os; print(os.listdir(/root))。2. 重新下载模型文件。3. 确认模型是否为K230编译的kmodel。尝试更新到最新固件。4. 更新固件。推理结果全错或为01. 摄像头分辨率与模型输入不匹配。2. 图像预处理颜色空间、归一化错误。3. 输出解析函数错误。1. 核对camera.config(size...)与模型输入尺寸。2. 尝试不同的预处理组合RGB/BGR 是否/255.0。3. 打印outputs的形状和部分数值与预期对比。程序运行后立即崩溃/重启1. 内存溢出。2. 代码存在死循环或资源未释放。3. 硬件故障过热等。1. 换用更小的模型或降低输入分辨率。2. 检查代码逻辑确保while True内有time.sleep。3. 触摸芯片是否过热通风散热。帧率极低5 FPS1. 模型计算量太大。2. 在Python层做了复杂的后处理如循环画很多框。3. 图像分辨率太高。1. 寻找量化后的INT8模型。2. 优化后处理代码或尝试用C模块加速。3. 降低摄像头采集和模型输入分辨率。检测框位置偏移输出解析中的坐标转换公式错误。仔细检查从模型输出的归一化坐标[cx, cy, w, h]到像素坐标[x1, y1, x2, y2]的转换代码。确保乘以的是正确的原图宽高img.width,img.height。5.1 进阶技巧让模型跑得更快更稳当你成功运行第一个模型后可能会追求更好的效果。这里分享几个进阶技巧使用INT8量化模型如果模型提供者没有提供量化模型你可以尝试使用嘉楠的NNCase工具链自己进行量化。量化能将模型体积减小至约1/4推理速度提升2-3倍对精度影响通常很小。这是提升性能最有效的手段。启用AI硬件加速确保你的代码确实运行在NPU上。在nn.load之后可以打印print(model)如果看到backend: kpu之类的信息说明正在使用NPU。MaixPy3默认会优先使用NPU。优化后处理YOLO的后处理NMS在Python中比较慢。如果检测框很多会成为瓶颈。可以尝试提高置信度阈值减少需要处理的框数量。使用maix.nn中可能提供的、用C实现的NMS函数如果存在。将后处理移到MCU端如果模型输出简单。多模型切换你可以准备多个不同功能的kmodel在主程序中根据按键或网络指令动态加载和切换实现一个设备多种识别能力。5.2 从“运行”到“微调”真正的“无脑”不是终点。当你熟悉了运行流程后很自然地会想“这个模型检测不准我的蓝色安全帽怎么办” 这时你就进入了下一个阶段——模型微调Fine-tuning。你可以在MaixHub上找到“在线训练”功能上传你拍摄的、带有蓝色安全帽的数据集在原有模型基础上进行少量迭代训练得到一个专属于你场景的、更准确的模型。这个过程虽然比“运行”复杂但有了前面的基础理解起来会容易得多。

相关新闻

ESP32-S3驱动ILI9341触摸屏:从底层优化到GUI实战

ESP32-S3驱动ILI9341触摸屏:从底层优化到GUI实战

1. 项目概述:为什么是ESP32-S3与ILI9341的组合? 最近在捣鼓一个需要本地显示和交互的小项目,手头正好有一块ESP32-S3的开发板和一块吃灰已久的2.8寸ILI9341触摸屏。这个组合听起来挺经典,但真动起手来,从点亮屏幕到实现…

2026/10/18 17:57:18 阅读更多 →
STM32 CAN总线IAP升级:从协议设计到Bootloader实现全解析

STM32 CAN总线IAP升级:从协议设计到Bootloader实现全解析

1. 项目概述:为什么选择CAN总线做IAP?在嵌入式开发领域,给设备更新固件是家常便饭。传统的方式,比如用串口(UART)通过Bootloader升级,对于实验室调试或者消费类产品来说,确实简单够用…

2026/10/18 17:57:27 阅读更多 →
深度解析河南省住房和城乡建设部网站如何助力中原地区城乡融合发展与民生改善

深度解析河南省住房和城乡建设部网站如何助力中原地区城乡融合发展与民生改善

在这个数字化浪潮席卷全球的今天,政府网站的体验往往成为了衡量一个地区治理现代化水平的隐形标尺。对于身处中原腹地的河南人而言,提起“房子”、“基建”或者“城市规划”,大家的第一反应可能还是那些热腾腾的烩面或者壮观的高速路网。然而,随着时代的推进,这一切的背后…

2026/10/18 17:57:35 阅读更多 →

最新新闻

对抗扩散蒸馏实战:三重损失把扩散模型压缩到一两步出图

对抗扩散蒸馏实战:三重损失把扩散模型压缩到一两步出图

对抗扩散蒸馏,简单说就是把大模型上那种几十步才能出图的扩散过程,硬生生压缩到一两步甚至一步出图,同时尽量保住画面质量和多样性。这个方向我从年初就开始关注,前前后后在几个文生图项目里试过好几版实现,踩了不少坑…

2026/10/18 20:45:16 阅读更多 →
Ruby on Rails 机票电商源码拆解:从搜索到出票的完整链路与二次开发指南

Ruby on Rails 机票电商源码拆解:从搜索到出票的完整链路与二次开发指南

简介:eyoo:旅游机票电商平台(重构版)是一份基于Ruby技术栈的在线机票销售系统源码,面向具备一定Web开发基础、希望深入理解电商平台架构的开发者与学习者。项目以Ruby on Rails为核心,涵盖MVC分层、ActiveRecord数据库…

2026/10/18 20:45:16 阅读更多 →
XAudio2_3.dll丢失不用慌:看清原理,微软官方方案一次搞定

XAudio2_3.dll丢失不用慌:看清原理,微软官方方案一次搞定

最近我的电脑在运行一款老游戏时突然弹窗提示“无法启动,因为计算机丢失XAudio2_3.dll”,紧接着音频就没声了,游戏直接崩掉。后来帮几个朋友远程排查时发现,这个问题其实相当普遍,而且绝大多数人第一反应都是去搜索引擎…

2026/10/18 20:45:16 阅读更多 →
从信息猎人进化到资产哨兵:Google与GitHub搜索语法实战

从信息猎人进化到资产哨兵:Google与GitHub搜索语法实战

1. 破题:这不是攻击教程,而是防御者的资产排查清单看到"Google/GitHub Hacking"这个标题,可能有人会下意识认为这是攻击者的技巧合集。我先说清楚我的立场:我在这里讲的是防御视角的主动暴露面排查——也就是用搜索语法…

2026/10/18 20:45:16 阅读更多 →
Python检测Windows窗口句柄信息:枚举、解析与避坑指南

Python检测Windows窗口句柄信息:枚举、解析与避坑指南

简介:Python自动化开发中,窗口句柄获取是桌面端自动化测试与系统监控的常见需求。面向有Python基础、正着手Windows窗体交互开发的学习者或测试工程师,内容演示如何通过pywin32封装库枚举窗口、依据标题或类名匹配句柄,并支持对窗…

2026/10/18 20:45:16 阅读更多 →
计算机网络综合实验方案:VLAN、OSPF、NAT与抓包分析全链路

计算机网络综合实验方案:VLAN、OSPF、NAT与抓包分析全链路

简介:这份华北电力大学计算机网络综合实验报告配套资料,面向计算机、网络工程等专业学生及需要完成课程设计的学习者,聚焦网络设备配置与协议分析两大实践方向。资源包内含1个doc文档,约21.91MB,完整呈现实验任务书、设…

2026/10/18 20:44:14 阅读更多 →

日新闻

基于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/18 0:00:55 阅读更多 →

周新闻

基于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/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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 阅读更多 →