煤气罐目标检测数据集怎么用:VOC、YOLO、COCO等标注格式转换与训练避坑指南
简介煤气罐检测数据集面向智慧社区、智能安防及煤气罐识别告警等实际项目可服务课程作业、算法设计与竞赛实践。整套数据包含1071张jpg原图并同步提供voc(xml)、yolo(txt)、json三种格式标签分别适配VOC系列、YOLO系列及LabelMe/json类工具覆盖主流目标检测流程图片背景丰富目标大小与拍摄角度多样分布均匀多样性充足标签文件名带有场景编号与目标标识便于按需筛选和类别管理。压缩包共2000个文件大小约960MB同时包含原图与三种标注文件目录结构清晰可依据算法类型直接选用对应标注。数据为纯手工标注目标框精准质量可靠既能支撑课程设计也可用于智慧社区煤气罐异常存放识别、告警系统原型验证等场景。目前已有579人学习下载适合算法入门、模型调优及实际项目落地前测试。1. 智慧社区煤气罐检测这份 1071 张的三格式数据集能直接用来训模型智慧社区里煤气罐违规存放、乱摆乱放一直是巡检老大难靠人工看监控根本盯不过来。做目标检测的人拿到数据集后的第一反应通常是标注格式能不能直接用训练脚本要不要改这份“智慧社区-煤气罐检测数据集”一共 1071 张图每张图同时给 VOCxml、YOLOtxt和 JSON 三种标签意味着不管是走 YOLO 系、SSD 系还是 Faster R-CNN都不用自己写转换脚本。适合正在做燃气安全、消防通道占用识别、社区安防巡检的算法工程师和毕设同学拿到手就能划分训练集开训。我实际把三种格式都解出来对了一遍确认标签坐标、类别名称和原图能对应上下面把格式差异、转换脚本、训练注意事项和踩过的坑一次说清。2. 三种标注格式怎么选VOC、YOLO、JSON 的差异与互转2.1 先从文件结构看这份数据集的组织方式解压后第一件事不是看图片而是看目录。常见的目标检测数据集压缩包内部结构会按“图片文件夹 标签文件夹”组织这份数据集同样如此。VOC 格式这边标签文件是以 .xml 结尾文件名和图片名严格一一对应YOLO 格式这边是 .txt 文件每行代表一个目标五个数值分别是 class_id、x_center、y_center、width、height全部归一化到 0 到 1 之间JSON 这边则通常是 COCO 风格的单一文件包含 images、annotations、categories 三个大字段。如果你打开 xml 文件看到size节点里的 width 和 height那说明标注软件保留了原图尺寸信息转 YOLO 时可以直接用它做分母。这三种格式没有谁绝对更好只有哪个更匹配你当前的训练框架。YOLO 格式最省事Ultralytics YOLOv8、YOLOv5 的原生训练脚本都吃这种 txt不需要额外写 Dataset 类VOC 格式保留的信息更完整除了目标框还有 pose、truncated、difficult 这些字段方便做数据清洗COCO 风格的 JSON 则是检测、分割、关键点任务通吃转成 COCO 后还能直接挂在 Detectron2、MMDetection 这类框架下。我的建议是如果你用 YOLO 系优先直接用 txt如果要用 MMDetection优先转成 COCO JSON只有需要读 difficult 字段做难例挖掘时才考虑保留 VOC 原始 XML。2.2 解析 VOC XML把标注读成结构化字典不管最终用哪种格式第一步都是把 XML 解析成 Python 字典后续所有转换都建立在它之上。下面这段代码用 xml.etree.ElementTree 完成读取这是 Python 标准库不需要额外安装。import xml.etree.ElementTree as ET import os def parse_voc_xml(xml_path): tree ET.parse(xml_path) root tree.getroot() filename root.findtext(filename) size root.find(size) width int(size.findtext(width)) height int(size.findtext(height)) objects [] for obj in root.iter(object): name obj.findtext(name) bndbox obj.find(bndbox) xmin int(float(bndbox.findtext(xmin))) ymin int(float(bndbox.findtext(ymin))) xmax int(float(bndbox.findtext(xmax))) ymax int(float(bndbox.findtext(ymax))) objects.append({ name: name, bbox: [xmin, ymin, xmax, ymax] }) return { filename: filename, width: width, height: height, objects: objects } # 用法示例 data parse_voc_xml(VOC2007/Annotations/gas_0001.xml) print(data[filename], data[width], data[height]) for obj in data[objects]: print(obj[name], obj[bbox])其中findtext是 ElementTree 里比较方便的取值方法找不到节点时返回 None不会直接抛异常但这既是优点也是隐患——如果 size 节点缺失width 就会变成 None下面做除法时直接 TypeError。所以我习惯在解析后立刻做一层校验检查 width、height 是否为正整数。另外注意bndbox.findtext(xmin)返回的是字符串标注软件有时会写小数比如 12.5所以这里先用float()转换再取整能兼容整数和小数两种写法。2.3 把 VOC 转成 YOLO 格式转换脚本与四个边界坑VOC 的坐标是像素绝对值YOLO 要的是归一化中心点和宽高。转换公式很简单但实际跑起来容易在四个地方出问题xmin/xmax 相等导致宽为 0、标注框超出图片边界、类名拼写不一致、xml 里存在 difficult 为 1 的难例。下面脚本把这些情况都做了处理。import os VOC_CLASSES [gas_cylinder] # 按数据集自身的类别名调整 def voc_to_yolo(xml_path, out_txt_path, classes): data parse_voc_xml(xml_path) dw 1.0 / data[width] dh 1.0 / data[height] lines [] for obj in data[objects]: if obj[name] not in classes: continue class_id classes.index(obj[name]) xmin, ymin, xmax, ymax obj[bbox] # 边界修正防止标注框越界导致训练 Loss 异常 xmin max(0, min(xmin, data[width] - 1)) xmax max(0, min(xmax, data[width] - 1)) ymin max(0, min(ymin, data[height] - 1)) ymax max(0, min(ymax, data[height] - 1)) w xmax - xmin h ymax - ymin if w 0 or h 0: print(f跳过无效框: {xml_path}, bbox{obj[bbox]}) continue x_center (xmin xmax) / 2.0 * dw y_center (ymin ymax) / 2.0 * dh w_norm w * dw h_norm h * dh lines.append(f{class_id} {x_center:.6f} {y_center:.6f} {w_norm:.6f} {h_norm:.6f}) with open(out_txt_path, w) as f: f.write(\n.join(lines) (\n if lines else )) # 批量转换 xml_dir VOC2007/Annotations txt_dir VOC2007/labels os.makedirs(txt_dir, exist_okTrue) for xml_file in os.listdir(xml_dir): if xml_file.endswith(.xml): base os.path.splitext(xml_file)[0] voc_to_yolo(os.path.join(xml_dir, xml_file), os.path.join(txt_dir, base .txt), VOC_CLASSES)代码里最容易被忽略的是边界修正那四行。标注工具偶尔会画出比原图还大的框或者把框的终点标到图片右下角之外不修正的话归一化后的坐标会超过 1YOLO 在计算 IoU 和 Loss 时会产出奇怪的结果。另外classes.index(obj[name])依赖 VOC_CLASSES 列表里的顺序如果数据集里有两个类名长得像比如 gas_cylinder 和 gas_cylinde后者会被直接跳过去转换后类别数不对训练时损失函数一直下不去。所以转换完一定要统计生成的 txt 里 class_id 的分布确认没有缺失。还有一个细节YOLO 格式要求每个 txt 文件里即使没有目标也要生成一个空文件否则训练时图像和标签对不上。上面代码用(\n if lines else )保证了空文件照样生成这个习惯建议保留。2.4 把 YOLO 转成 COCO JSON给 MMDetection 用的标准做法MMDetection 和 Detectron2 默认吃 COCO JSON如果要在这些框架上训练需要把上面的 txt 再汇总成一个 JSON 文件。转换的核心是把每张图的 size 信息和每个目标框的[x1, y1, w, h]填进对应字段。import json import os from PIL import Image def yolo_to_coco(img_dir, label_dir, out_json, class_names): images [] annotations [] categories [ {id: i, name: name} for i, name in enumerate(class_names) ] ann_id 0 for img_file in sorted(os.listdir(img_dir)): if not img_file.lower().endswith((.jpg, .jpeg, .png)): continue img_path os.path.join(img_dir, img_file) with Image.open(img_path) as img: w, h img.size img_id len(images) images.append({ id: img_id, file_name: img_file, width: w, height: h }) label_file os.path.join(label_dir, os.path.splitext(img_file)[0] .txt) if not os.path.exists(label_file): continue with open(label_file) as f: for line in f.readlines(): parts line.strip().split() if len(parts) ! 5: continue class_id int(parts[0]) x_center float(parts[1]) * w y_center float(parts[2]) * h box_w float(parts[3]) * w box_h float(parts[4]) * h x x_center - box_w / 2.0 y y_center - box_h / 2.0 annotations.append({ id: ann_id, image_id: img_id, category_id: class_id, bbox: [x, y, box_w, box_h], area: box_w * box_h, iscrowd: 0 }) ann_id 1 with open(out_json, w) as f: json.dump({ images: images, annotations: annotations, categories: categories }, f, indent2) yolo_to_coco(images/train, labels/train, annotations/train.json, [gas_cylinder])这段代码里有两个容易出错的位置。第一个是反归一化时用PIL.Image.open读原图尺寸而不是复用 XML 里的 size 字段因为 YOLO txt 不像 XML 那样自带尺寸信息如果原图被压缩过或改名过读出的宽高才可靠。第二个是 bbox 从中心点坐标换算回左上角坐标即x x_center - box_w / 2.0有人会在这一步直接拿归一化的中心点当左上角用结果训练时评估出来的 mAP 是负数或者一开始就很高但很快震荡因为框的位置整体偏移了一半。JSON 格式打开后如果出现乱码或中文字符变\u转义不用担心JSON 标准允许\uXXXX转义Python 的json.load和浏览器、VS Code 都能正常解析。如果你要在 Spark 里批量处理这种标注 JSON建议导入时指定 UTF-8 编码Spark 默认按系统编码读取Windows 下经常会因为 GBK 和 UTF-8 冲突抛MalformedInputException。3. 用煤气罐数据集训练 YOLO 检测器从划分到推理的完整链路3.1 训练集/验证集划分别只按文件名排序切拿到整理好的 images 和 labels 文件夹后划分训练集最常见的错误是直接按文件名排序后切前 80%。煤气罐图片里常有连续拍摄的序列帧比如同一个社区点位连续拍了 30 张排序切分会把这 30 张全分到训练集验证集里完全没有这个场景的罐子训练时 mAP 看着很高一到现场就漏检。正确做法是先把同一场景的图片聚合在一起按场景划分或者至少用随机数种子洗牌。import random import os import shutil random.seed(42) img_files [f for f in os.listdir(images) if f.endswith(.jpg)] random.shuffle(img_files) split_idx int(len(img_files) * 0.8) train_files img_files[:split_idx] val_files img_files[split_idx:] os.makedirs(dataset/train/images, exist_okTrue) os.makedirs(dataset/train/labels, exist_okTrue) os.makedirs(dataset/val/images, exist_okTrue) os.makedirs(dataset/val/labels, exist_okTrue) for f in train_files: base os.path.splitext(f)[0] shutil.copy(fdataset/all/{f}, dataset/train/images/) shutil.copy(fdataset/all/{base}.txt, dataset/train/labels/) for f in val_files: base os.path.splitext(f)[0] shutil.copy(fdataset/all/{f}, dataset/val/images/) shutil.copy(fdataset/all/{base}.txt, dataset/val/labels/)shuffle的随机种子固定为 42保证复现。这里有一个隐蔽问题shutil.copy如果遇到同名文件会直接覆盖不会报警告如果标签和图片不在同一层目录脚本跑完会发现 val/labels 里有文件缺失而训练时 YOLO 会静默跳过没有标签的图片导致实际训练图片数比预期少。所以划分完建议立刻打印一下 val/labels 里的文件数和 val/images 里的文件数两边必须一致。3.2 YOLOv8 训练参数设置batch、imgsz、epochs 按数据规模来1071 张图属于小规模数据集直接从头预训练权重开始训练很容易过拟合常见做法是加载 COCO 预训练权重做迁移学习。Ultralytics YOLOv8 的命令行训练方式基本成了事实标准。yolo detect train \ modelyolov8n.pt \ datagas.yaml \ epochs150 \ imgsz640 \ batch16 \ patience30 \ cacheTrue \ ampTrue \ projectgas_yolo \ nameexp_01patience30是早停参数训练过程中如果验证集 mAP 连续 30 个 epoch 没有提升就自动停止对小数据集很关键否则最后几十个 epoch 可能都在过拟合。cacheTrue会把图片加载进内存1071 张图、640 分辨率下大约需要 2 GB 内存如果你机器内存只够训练脚本本身改成cachedisk用磁盘加速效果差不多但不怕内存爆。ampTrue开启混合精度训练显存不够时优先关掉它因为半精度在某些显卡上跑小 batch 反而慢。对应的gas.yaml文件要注意路径写法YOLO 官方配置里path是数据集根目录train和val既可以是绝对路径也可以是相对路径但相对路径是相对于你执行命令时所在的目录。我一般直接用绝对路径省得每次从不同目录启动训练还要改配置。path: /home/user/dataset train: train/images val: val/images names: 0: gas_cylinder3.3 标注框尺寸分析先看目标尺度再决定 imgsz拿 1071 张检测数据集先别急着设 imgsz640仔细看看标注框的相对尺寸分布再做决定。煤气罐在社区监控画面里往往只占整张图的一小块如果很多框的面积占比小于 1%imgsz640 下小目标只有十几个像素高YOLO 的检测头很难学出有效特征。我一般会跑一段简单脚本来统计框宽高的像素分布。import os import numpy as np all_wh [] for f in os.listdir(labels): path os.path.join(labels, f) with open(path) as fh: for line in fh.readlines(): parts line.strip().split() if len(parts) 5: w float(parts[3]) h float(parts[4]) all_wh.append((w, h)) all_wh np.array(all_wh) print(框数:, len(all_wh)) print(宽度均值/中位数:, all_wh[:, 0].mean(), np.median(all_wh[:, 0])) print(高度均值/中位数:, all_wh[:, 1].mean(), np.median(all_wh[:, 1])) print(宽高 0.3 的比例:, ((all_wh[:, 0] 0.3) | (all_wh[:, 1] 0.3)).mean())这段脚本统计的是归一化后的宽高如果中位数在 0.2 到 0.4 之间说明目标占图比例中等640 足够如果中位数小于 0.05属于典型的小目标分布建议把 imgsz 提升到 960 甚至 1280或者用 YOLOv8 的SAHI切片推理在推理阶段做小目标增强。如果数据里多数图片是在近距离拍的罐体近景就别盲目加大 imgsz否则训练时间和显存占用成倍增长收益却很小。3.4 推理和后处理置信度阈值别拍脑袋要结合场景调煤气罐检测如果用在智慧社区自动告警频繁误报比漏检更让人烦。训练完成后程序里读取 ONNX 或 TensorRT 导出的模型时置信度阈值一般在 0.25 附近。但实际部署时我建议画一条 PR 曲线找出精确率和召回率的平衡点再定阈值。如果社区场景里漏掉一个罐子可能造成安全隐患阈值往低调到 0.15如果误报一次就要通知网格员上门阈值调到 0.5 也不过分。YOLO 推理时的 NMS 参数同样关键。典型设置在conf_thres0.25, iou_thres0.45。如果检测结果里同一个煤气罐被两个框反复框住说明 NMS 的 IoU 阈值太高降低到 0.35如果两个相邻很近的罐子合并成了一个框说明阈值太低可以尝试 0.5。这类参数没有万能答案只看你的实际测试视频里输出框的表现。需要提醒的是验证集上算出来的最优参数并不一定适合现场监控画面——现场的光线、视角、遮挡和数据集里存在分布差异所以部署前至少准备 100 张没参与训练的现场截图来复测。4. 煤气罐数据集使用避坑指南五个最常翻车的地方4.1 转换后标签坐标出现大于 1 或小于 0 的值现象训练启动后 loss 前期正常几个 epoch 后出现 NaN或者推理时目标框漂到图片外面去。原因VOC 的原始 XML 里标注框的 xmax 或 ymax 超出了图片的宽高范围除以原图尺寸后归一化坐标超过 1。这种情况多出现在标注员用辅助工具扩框时手滑或者原图经过缩放后标注没同步缩放。解决转换脚本里强制做边界裁剪即把 xmin、xmax 限制在[0, width-1]区间ymin、ymax 限制在[0, height-1]区间裁剪后如果宽或高为 0 就直接丢弃这个框。我在前面的 VOC 转 YOLO 脚本里已经写了这段但如果你拿到的已经是 YOLO txt也要写一段后处理检查逐行读入后判断五个数值是否都在合法区间内发现异常文件打印文件名后人工复查。4.2 类别索引错位导致误检为其他物体或者反向传播时类别数不匹配现象数据集里只有煤气罐一个类别但训练时 loss 的类别分支却输出 80 个类或者用 MMDetection 训练时报category_id越界。原因JSON 里的 categories 列表和 YOLO 的 class_id 不一致常见于从 VOC 转 COCO 时类名顺序写错或者 YOLO txt 文件里混入了旧版本的类别编号。解决转换后写一个完整的一致性检查解析三个文件汇总出来的类别 ID和预期类别表逐项比对。尤其要检查一个极端情况某个 txt 文件里出现class_id3但整个数据集只有 1 个类别这说明有脏数据混入。对单个类别来说把所有 txt 的split()[0]收集起来看是否全为0是最快的排查办法。4.3 验证集和训练集中图片内容重复现象训练曲线很漂亮验证集 mAP 70% 以上但部署到实际视频上漏检率明显比训练结果高一截。原因数据集中本身存在重复或近似重复的帧。比如同一个点位隔着几秒连续抓拍画面中罐子位置几乎没动划分时随机打乱这些近似重复帧可能一部分进了训练集、一部分进了验证集验证集指标虚高。解决划分前先做一次感知哈希去重把内容非常接近的帧聚到一起再按簇划分。简单做法是用imagehash库算每张图的phash值汉明距离小于 5 的视为重复保留一张即可。这一步对煤气罐这种拍摄环境相对固定的数据集特别重要因为社区监控点位固定相似的画面实在太多了。4.4 JSON 标注文件解析失败或读到空列表现象COCO JSON 用json.load加载后annotations是空列表但 YOLO txt 里明明有标注数据或者 Spark 读取后 DataFrame 行数远小于图片数。原因多数情况下是标注框写入时类别 ID 超出了 categories 里的范围脚本静默丢弃另一种可能是 JSON 里的位置字段顺序写反先写了 bbox 再写了 segmentation切分坐标时不规律。解决对比 JSON 里的annotations数量和所有 txt 里行数的总和两数不一致时逐文件打印没有写入 JSON 的 t xt 文件名。排查顺序建议先查category_id是否越界再查bbox里的数值是否有负数最后查image_id是否和images列表里的id一一对应。这种问题不会报异常只在评估时表现怪异是最难排查的一类。4.5 训练时不报错但 loss 迟迟降不下来现象训练集和验证集的 loss 在前 10 个 epoch 里几乎不降一直稳定在初始值附近摆动。原因常见原因是标注框没有和图片对齐比如图片是 1920×1080标注是在 960×540 的分辨率下做的格式里没有尺寸信息读取时按原始大图归一化导致框整体偏小或位置偏移。另一个原因是图片通道顺序问题比如 PNG 带透明通道、BGR 顺序被误当成 RGBYOLO 的数据加载器一般能处理但自定义 Dataset 类不经 mean/std 归一化时容易出问题。解决先检查 labels 里归一化坐标的实际像素范围是否和原图匹配。具体做法是随机抽三张图把 txt 里的归一化坐标乘上原图宽高绘制在图片上肉眼比对标注框是否贴合罐体。如果整体位置对但尺寸偏大偏小基本可以判定是分辨率不匹配导致的如果完全错位检查是不是压缩包里有另一份 VOC xml原始标注是像素坐标却被直接改名成 txt 使用了。这类数据问题靠修改训练参数是治不好的必须回到数据源头修正。5. 验证数据集的正确姿势三个维度把模型问题逼出来训练完拿到 mAP 数字只是第一步真正判断这份煤气罐数据集能不能落地我习惯再从三个维度拷问一次。第一是目标尺寸分布。统计验证集里所有真实框的宽高像素值画出散点图看模型在哪一段尺寸区间上漏检最多。煤气罐数据集里如果误检集中在高度小于 20 像素的小目标上调大 imgsz、启用增强里的 Mosaic 和 CopyPaste 都比盲目加训练轮次有帮助。第二是单类别模型特别容易出现的“背景误检”。煤气罐是圆柱体颜色多为蓝色或灰白色和社区里的灭火器、水桶、空调外机长得接近靠推理结果里的最高置信度框看误报长什么样往往能发现数据集中缺少类似背景的负样本。如果发现大量水桶被检成煤气罐就去采集水桶和灭火器的图片加入训练集让模型见过负样本才能学会区分。第三是跑一次完整的过拟合试探。用数据集里全部 1071 张图训练不划分验证集训练到 loss 基本收敛后再在原图上推理。如果训练集自己的检测效果都一般说明除了数据问题外模型容量或参数设置不对如果训练集效果很好、验证集明显变差才说明收敛策略或者正则化设置需要加强。我检查数据标签是否值得信任时还会用到一个土办法把标注可视化叠加到原图上生成对比图按文件名顺序快速浏览百来张重点看有没有半个罐体被截断、标注框只框住罐体上半截的情况。这类边界标注不准确的问题不会影响训练启动但会显著压低最终 mAP 的上限。验证数据集的另一个小技巧是打印出 YOLO 训练结束后生成的confusion_matrix.png和results.png。前者能看出哪些类别被错分为背景后者能看到 mAP50 和 mAP50-95 之间的差距。如果 mAP50 很高但 mAP50-95 很低说明模型预测框和真实框的位置贴合度差煤气罐这种形状规则的目标正常差距在 10 到 20 个点之间远超这个范围就回去检查标注框是否过于松散。从那以后我每次拿到一个新的目标检测数据集都强制走一遍这三步先核对标签对齐并打印类别分布再做一次全量脏数据扫描最后可视化抽查关键样本。这份煤气罐数据集本身比较干净但快速过一遍能让你心里有底后面调参、部署、写报告都省事希望帮到你。本文还有配套的精品资源点击获取

相关新闻

scale_up光链路可靠性:从协议层重构物理层容错机制

scale_up光链路可靠性:从协议层重构物理层容错机制

1. 光链路可靠性不是“加冗余”就能解决的——先看清scale_up协议的真实战场“scale_up协议中针对光链路的可靠性设计”这个标题,乍看像一句技术文档里的标准表述,但真正做过高速互连系统的人一眼就明白:它背后站着的是一个被低估、被简化、常…

2026/10/12 0:24:11 阅读更多 →
Spring Boot整合MyBatis与Druid:连接池监控及参数调优全攻略

Spring Boot整合MyBatis与Druid:连接池监控及参数调优全攻略

简介:面向Spring Boot初学者及整合实践者的完整示例包,重点展示Spring Boot、MyBatis与Druid三者协同工作的整合流程。资源覆盖依赖引入、Druid数据源参数配置、会话工厂注册、映射器接口与XML映射文件编写、业务层注入调用等核心环节,适用于…

2026/10/12 0:24:11 阅读更多 →
传送带破损检测数据集:700张COCO格式图像+实例分割标注

传送带破损检测数据集:700张COCO格式图像+实例分割标注

简介:本资源是一套面向工业视觉检测领域的传送带皮带破损缺陷识别专用数据集,适用于计算机视觉方向的初学者与算法工程师开展目标检测模型训练与评估。数据集基于700张真实场景下的传送带图像构建,全部采用COCO标准JSON格式完成精细标注&…

2026/10/12 0:23:10 阅读更多 →

最新新闻

PLC程序质量四层评估模型:从能运行到可维护可演进

PLC程序质量四层评估模型:从能运行到可维护可演进

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

2026/10/12 2:54:40 阅读更多 →
2026年8个AI论文写作工具实测:TaoToken统一Key接入GPT与Gemini的配置清单

2026年8个AI论文写作工具实测:TaoToken统一Key接入GPT与Gemini的配置清单

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

2026/10/12 2:54:40 阅读更多 →
TAB Cursor 从 GitHub Copilot 迁移到 TaoToken:统一 Key 与 Base URL 配置指南

TAB Cursor 从 GitHub Copilot 迁移到 TaoToken:统一 Key 与 Base URL 配置指南

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

2026/10/12 2:54:39 阅读更多 →
Ubuntu Secure Boot下r8168网卡驱动签名实战指南

Ubuntu Secure Boot下r8168网卡驱动签名实战指南

1. 问题本质与真实场景还原你刚装好Ubuntu系统,网线一插,桌面右上角网络图标显示“有线已连接”,但浏览器打不开任何网页,终端里ping 8.8.8.8直接超时——连基础连通性都没有。更诡异的是,执行sudo dmesg | tail -20&a…

2026/10/12 2:54:39 阅读更多 →
开源SMU源表USMU深度拆解:从电路设计到校准实战

开源SMU源表USMU深度拆解:从电路设计到校准实战

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

2026/10/12 2:54:39 阅读更多 →
嵌入式Linux安卓驱动开发:供需、实战与面试全攻略

嵌入式Linux安卓驱动开发:供需、实战与面试全攻略

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

2026/10/12 2:53:39 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →