从零构建可复用VOC目标检测数据集:全流程与避坑指南
1. 从零搭建一套可复用的VOC训练集整体思路与方案选型搞过目标检测的人都知道VOC格式虽然“老”但它依然是很多训练框架的默认入口。不管后面用的是哪套检测网络第一步永远是把手里那堆乱七八糟的图片和标注整理成一份规规矩矩的VOC数据集。我前后做过十几个不同场景的数据集从工业质检到日常物品识别踩过的坑基本都集中在“格式不统一”和“标注质量失控”这两件事上。这篇文章就把我整套制作VOC训练集的流程拆开讲清楚包括目录怎么设计、标注工具怎么选、脚本怎么写、质量怎么控目标是让你照着做就能产出一份能直接喂给训练器的数据集。先说清楚VOC训练集到底长什么样。它本质上是一套约定好的目录结构加XML标注文件。核心目录有三个JPEGImages放原图Annotations放同名的XML标注ImageSets/Main放划分好的训练集、验证集、测试集列表。每张图的XML里记录图片尺寸、通道数以及每个目标框的类别、坐标xmin、ymin、xmax、ymax和是否被截断、是否难以识别等属性。这套结构的好处是通用性强几乎所有主流检测框架都能直接读坏处是它对标注的规范性要求很严一个坐标越界或者类别名大小写不一致训练时就可能报错或者学出奇怪的结果。那为什么还要用VOC而不是直接上更“现代”的格式我的判断是看场景。如果你做的是小规模、类别少、需要快速验证想法的项目VOC的简单直接反而省事如果类别上百、标注量几十万那确实该考虑更紧凑的格式。但即便最终要转成别的格式很多转换脚本也是以VOC为中间态所以把VOC制作这一环吃透等于掌握了数据流转的枢纽。下面我按“准备—标注—校验—划分—打包”这条主线把每个环节的细节和坑都摊开讲。1.1 目录结构设计与命名规范目录结构看着简单但命名不规范后期会要命。我习惯在项目根目录下建一个dataset文件夹里面按VOC标准放dataset/ ├── JPEGImages/ # 所有原图统一为.jpg ├── Annotations/ # 与图片同名的.xml ├── ImageSets/ │ └── Main/ # train.txt val.txt test.txt trainval.txt └── SegmentationClass/ # 如果做分割才需要检测可忽略图片命名我强烈建议用“场景前缀_六位序号”的格式比如road_000001.jpg。为什么不用原始文件名因为相机导出的名字经常重复、带空格、带中文脚本处理时容易出编码问题。统一重命名这一步别偷懒后面XML和图片对不上排查起来非常痛苦。重命名脚本用Python几行就能搞定遍历原图、按规则生成新名、同时记录新旧映射表方便回溯。还有一个细节图片格式统一转成JPEG。PNG带透明通道的图标注工具和训练框架处理方式不一致有的把透明当黑色有的直接报错。统一转JPEG并确认没有损坏文件是省心的前提。转换时质量参数给90以上避免压缩伪影影响小目标标注。1.2 标注工具选型与取舍标注工具我用过不少最后常驻的是LabelImg和CVAT这两类。LabelImg轻量、离线、直接输出VOC XML适合个人或小团队快速上手CVAT适合多人协作、有审核流程的场景但部署和维护成本高一些。选哪个取决于你的标注量和协作人数。如果只是自己标几百张图LabelImg足够了。它的操作逻辑是画框、选类别、保存快捷键熟练后效率不低。但要注意它的一个坑默认保存的XML里difficult和truncated字段都是0如果你有大量遮挡目标需要手动改或者写脚本批量调整。另外LabelImg的类别列表是存在一个predefined_classes.txt里的团队协作时这个文件要统一分发否则每个人标出来的类别名可能不一致。多人协作时我建议先定一份“标注规范文档”把每个类别的定义、边界怎么画、遮挡到什么程度算difficult都写清楚。比如“行人”这个类是只标完整身体还是被遮挡一半也标这些模糊地带不提前定好不同人标出来的数据分布会差很多模型学出来就会飘。规范文档不用长一页纸把边界情况列清楚就行。2. 标注环节的核心细节与质量控制标注是整条链路里最耗人力、也最容易出问题的环节。我见过太多项目模型效果上不去回头一查发现是标注框歪了、类别标错了、漏标了。这一章把标注过程中真正影响最终效果的细节讲透包括框怎么画、类别怎么管、质量怎么抽检。2.1 边界框绘制的精度要求画框不是随便框住目标就行。框太松背景信息混进来模型学到的是“目标加一堆无关像素”框太紧目标边缘被切掉模型对完整形状的学习就不充分。我的经验是框的边缘应该刚好贴住目标可见轮廓的外沿留出大约1到2个像素的余量。对于规则物体比如箱子、屏幕这个好把握对于不规则物体比如动物、植物就以主要躯干为准把明显属于目标的部分都包进去。还有一个高频错误是框的坐标出现负数或超出图片尺寸。LabelImg在画框时如果拖到图片外面保存的坐标可能是负的或者大于宽高。训练时这些越界框会导致各种奇怪的报错。解决办法是在标注完成后跑一个校验脚本检查每个XML里所有框的坐标是否满足0 xmin xmax width且0 ymin ymax height不满足的就列出来人工修正。这个脚本我每次都会跑能拦下不少低级错误。对于小目标要特别注意。如果目标在图上只有十几个像素画框时手一抖偏差就很大。这种情况我建议放大图片再标或者用支持缩放的标注工具。另外小目标容易被漏标标完一轮后最好把图片缩小看一遍整体检查有没有遗漏的密集小目标区域。2.2 类别体系设计与一致性维护类别设计有两个极端要避免太粗和太细。太粗比如把所有“车”都归一类那模型分不清轿车和卡车实际用的时候满足不了需求太细比如把“红色轿车”“蓝色轿车”分开类别数爆炸每个类的样本又少模型根本学不好。合理的做法是按业务需求定类别粒度每个类别至少保证有几百个实例太少的话考虑合并或者补充数据。类别名一旦定下来就要严格统一。我遇到过团队成员把“person”写成“Person”“people”“pedestrian”的情况最后XML里五花八门训练时类别映射全乱。解决办法是维护一份classes.txt所有人从这里复制类别名标注工具加载同一份文件。标注完成后用脚本统计所有XML里出现过的类别名和classes.txt比对多出来的或者拼写不一致的全部揪出来修正。类别顺序也有讲究。VOC本身不强制类别顺序但训练框架通常按你提供的类别列表来映射标签。我习惯把出现频率高的类别放前面这样调试时看输出更直观。类别列表确定后后续所有环节——标注、校验、划分、训练配置——都用同一份不要中途改改了就要全链路同步。2.3 标注质量抽检与返工机制全量检查标注质量不现实但完全不检查就是赌博。我的做法是分层抽检先随机抽5%的图片做精细检查看框的精度和类别是否正确再针对每个类别单独抽一批看有没有系统性偏差。如果某个类别的错误率明显偏高就扩大抽检比例必要时整类返工。抽检时我关注几个指标漏标率有没有目标没框、误标率框了不该框的、类别错误率、框的精度。前三个靠人眼比对框的精度可以写个脚本算一下框的面积分布如果某个类别的框面积异常集中或者异常分散可能就有问题。比如“行人”的框面积应该有大有小如果全是差不多大小可能是标注时偷懒用了固定尺寸。返工是难免的关键是要有记录。我会建一个返工清单记录哪张图、哪个框、什么问题、谁改的。这样既能追踪进度也能在后续复盘时知道哪些环节容易出错针对性改进流程。返工后的数据要重新走一遍校验脚本确保修正没有引入新问题。3. 实操全流程从原始图片到可训练数据集前面讲了思路和细节这一章直接上实操。我按顺序把每个步骤的命令、脚本和参数都列出来你可以直接照着跑。整个流程我封装成了几个Python脚本放在项目根目录的tools文件夹下依次执行即可。3.1 图片预处理与批量重命名第一步是把原始图片收集起来统一格式和命名。假设原始图片散落在多个文件夹格式有jpg、png、bmp。先全部复制到一个临时目录然后跑重命名和转换脚本。import os import cv2 import glob src_dir raw_images dst_dir dataset/JPEGImages prefix obj os.makedirs(dst_dir, exist_okTrue) files [] for ext in [*.jpg, *.jpeg, *.png, *.bmp]: files.extend(glob.glob(os.path.join(src_dir, **, ext), recursiveTrue)) files.sort() mapping {} for idx, f in enumerate(files): img cv2.imread(f) if img is None: print(f读取失败跳过: {f}) continue new_name f{prefix}_{idx1:06d}.jpg dst_path os.path.join(dst_dir, new_name) cv2.imwrite(dst_path, img, [cv2.IMWRITE_JPEG_QUALITY, 95]) mapping[new_name] f with open(rename_mapping.txt, w, encodingutf-8) as fw: for k, v in mapping.items(): fw.write(f{k}\t{v}\n) print(f共处理 {len(mapping)} 张图片)这段脚本做了三件事递归找图、统一转JPEG并重命名、记录映射关系。质量参数95是我常用的值再高文件会很大再低可能有可见压缩。跑完后检查一下JPEGImages里的图片数量是否和预期一致有没有读取失败的。注意如果原始图片里有灰度图cv2.imread默认读成三通道保存后也是三通道这没问题。但如果原图是四通道带透明的PNG读进来是四通道直接保存成JPEG会报错或丢通道需要先转成三通道。稳妥做法是判断img.shape[2]等于4就做一次cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)。3.2 标注执行与XML生成图片准备好后用LabelImg打开JPEGImages目录开始标注。启动命令labelImg dataset/JPEGImages dataset/Annotations/predefined_classes.txt第一个参数是图片目录第二个参数是类别定义文件第三个参数是标注保存目录。标注时注意几个操作习惯用快捷键W画框CtrlS保存D下一张A上一张。每标完一批就保存一次避免软件崩溃丢数据。标注完成后Annotations目录下应该有一批和图片同名的XML。打开一个看看结构annotation folderJPEGImages/folder filenameobj_000001.jpg/filename size width1920/width height1080/height depth3/depth /size object nameperson/name poseUnspecified/pose truncated0/truncated difficult0/difficult bndbox xmin100/xmin ymin200/ymin xmax300/xmax ymax500/ymax /bndbox /object /annotation这里size里的宽高必须和实际图片一致object可以有多个。truncated表示目标是否被图片边缘截断difficult表示是否难以识别。这两个字段在训练时会影响损失计算标的时候要如实填。LabelImg默认都填0如果有截断或遮挡严重的目标需要手动改或者写脚本批量处理。3.3 标注校验脚本与常见错误修复标完不校验等于白标。我写了一个校验脚本检查项包括XML和图片是否一一对应、坐标是否越界、类别名是否在允许列表内、框的宽高是否大于0、图片尺寸是否和XML记录一致。import os import xml.etree.ElementTree as ET from PIL import Image img_dir dataset/JPEGImages ann_dir dataset/Annotations allowed_classes set(open(predefined_classes.txt).read().split()) errors [] for xml_file in os.listdir(ann_dir): if not xml_file.endswith(.xml): continue tree ET.parse(os.path.join(ann_dir, xml_file)) root tree.getroot() filename root.find(filename).text img_path os.path.join(img_dir, filename) if not os.path.exists(img_path): errors.append(f{xml_file}: 对应图片不存在) continue img Image.open(img_path) w, h img.size size root.find(size) if int(size.find(width).text) ! w or int(size.find(height).text) ! h: errors.append(f{xml_file}: 尺寸不一致) for obj in root.findall(object): name obj.find(name).text if name not in allowed_classes: errors.append(f{xml_file}: 非法类别 {name}) bbox obj.find(bndbox) xmin int(bbox.find(xmin).text) ymin int(bbox.find(ymin).text) xmax int(bbox.find(xmax).text) ymax int(bbox.find(ymax).text) if xmin 0 or ymin 0 or xmax w or ymax h: errors.append(f{xml_file}: 坐标越界) if xmax xmin or ymax ymin: errors.append(f{xml_file}: 框宽高非法) for e in errors: print(e) print(f共发现 {len(errors)} 个问题)跑完这个脚本把列出的问题逐个修掉。常见问题里坐标越界最多通常是标注时拖出了图片边界类别名不一致次之靠统一类别文件解决尺寸不一致一般是图片被替换过但XML没更新重新标注即可。3.4 数据集划分与ImageSets生成校验通过后把数据集划分成训练集、验证集、测试集。比例我一般用7:2:1如果数据量少就用8:1:1保证验证和测试有足够样本。划分时要随机打乱但固定随机种子保证可复现。import os import random random.seed(42) ann_dir dataset/Annotations img_dir dataset/JPEGImages out_dir dataset/ImageSets/Main os.makedirs(out_dir, exist_okTrue) names [f[:-4] for f in os.listdir(ann_dir) if f.endswith(.xml)] names.sort() random.shuffle(names) n len(names) n_train int(n * 0.7) n_val int(n * 0.2) train names[:n_train] val names[n_train:n_trainn_val] test names[n_trainn_val:] def write_list(path, items): with open(path, w) as f: f.write(\n.join(items)) write_list(os.path.join(out_dir, train.txt), train) write_list(os.path.join(out_dir, val.txt), val) write_list(os.path.join(out_dir, test.txt), test) write_list(os.path.join(out_dir, trainval.txt), train val) print(ftrain:{len(train)} val:{len(val)} test:{len(test)})划分完检查一下三个列表有没有重叠总数是否等于图片总数。trainval.txt是训练加验证的合集有些框架需要这个文件。划分结果一旦确定就固定下来后续调参对比时用同一套划分否则指标没有可比性。4. 常见问题排查与避坑经验实录这一章是我这些年踩坑攒下来的经验很多是文档里不会写的。你遇到问题时可以先来这里对照能省不少时间。4.1 标注与训练不匹配的典型症状模型训练时如果出现loss不下降、指标异常、报错中断先回头查数据。我整理了一张症状对照表症状可能原因排查方法训练报错找不到图片文件名和XML里的filename不一致比对JPEGImages和Annotations的文件名loss突然变NaN坐标越界或宽高为0跑校验脚本查非法框某类别指标始终为0该类别样本太少或类别名拼写不一致统计各类别实例数检查类别名验证指标远低于训练训练集和验证集分布差异大检查划分是否随机各类别在划分中的比例框的位置整体偏移XML里size和实际图片尺寸不一致比对图片实际宽高和XML记录这张表我基本每次做新数据集都会过一遍尤其是类别指标为0的情况十有八九是类别名不一致导致的。统计类别实例数也很重要如果某个类只有几十个实例模型很难学好要么补数据要么合并类别。4.2 提升标注效率的实操技巧标注是体力活但有些技巧能明显提速。第一先标一批做试点把规范跑通再批量标避免标了几千张发现规范有问题要全部返工。第二用快捷键LabelImg的W画框、CtrlS保存、D下一张熟练后一张图几秒钟。第三相似场景的图片连续标比如都是街景就一起标减少类别切换的思维成本。第四定期保存和备份标注数据丢了真的会崩溃。还有一个技巧是预标注。如果已经有一个粗略的模型可以先用它跑一遍推理把预测框导出成XML然后人工在LabelImg里修正。这样比从零画框快很多尤其适合目标密集的场景。预标注的框可能不准但至少给了起点人工只需要调整而不是全画。4.3 数据增强与VOC格式的配合VOC数据集做完后训练时通常会做数据增强。要注意的是增强操作要同时作用于图片和框。比如水平翻转图片翻转后框的坐标也要跟着变xmin_new width - xmax_oldxmax_new width - xmin_old。如果只翻转图片不改框模型就学废了。我习惯在训练框架的数据加载环节做增强而不是提前生成增强后的图片。这样每次epoch看到的增强结果都不同相当于无限扩充数据。但要注意增强的强度翻转、缩放、色彩抖动这些常规操作没问题裁剪要小心裁到框外面会导致框不完整。如果要做裁剪增强确保裁剪后至少保留框的一部分并相应调整坐标。提示VOC格式本身不存储增强信息增强是训练时动态做的。所以制作VOC数据集时只需要保证原始标注准确增强逻辑放在训练代码里。4.4 数据集版本管理与复用一个项目往往要迭代多轮数据集也会不断补充和修正。我建议用版本号管理比如dataset_v1、dataset_v2每次大改就升版本并记录改了什么。这样出问题时能回退到之前的版本也能对比不同版本对模型效果的影响。复用方面如果多个项目用相似的类别可以建一个基础数据集然后按需筛选子集。比如基础数据集有“人、车、狗、猫”项目A只需要“人、车”那就从基础数据集的XML里过滤出包含这两类的图片和标注生成新的ImageSets。这样不用重复标注省时省力。筛选脚本按类别过滤XML保留包含目标类别的图片重新生成列表即可。5. 从VOC到训练衔接环节的注意事项数据集做完最后一步是确认它能被训练框架正确读取。不同框架对VOC的读取方式略有差异但核心都是解析XML和ImageSets。我习惯在正式训练前跑一个小测试用几行代码加载一张图和对应的XML打印出框的坐标和类别确认解析无误。如果框架要求提供类别列表文件确保列表顺序和XML里的类别名对应。有的框架按字母序排类别有的按你提供的顺序这个要看清文档。类别顺序错了模型输出的类别索引就全乱了指标会莫名其妙地差。另外训练前确认图片路径配置正确。VOC标准里XML的folder字段写的是JPEGImages但实际路径可能因项目结构不同而变化。有的框架忽略这个字段直接用配置的路径拼接有的会读这个字段。稳妥做法是让XML里的folder和实际目录名一致避免路径解析出错。最后如果数据集要分享给其他人用打包时把JPEGImages、Annotations、ImageSets和类别文件一起打包并附一份简短的说明写清楚类别定义、标注规范、划分比例。这样别人拿到就能直接用不用再来问你。我吃过这个亏数据集传出去后对方反复问细节不如一开始就写清楚。这套流程我用了很多次从几百张的小数据集到上万张的项目都跑通过。核心就一句话规范先行校验兜底版本管理。把这三件事做好VOC训练集的制作就不会出大问题。后面模型效果好不好数据质量占一大半所以在标注和校验上多花的时间最终都会在训练指标上省回来。

相关新闻

数据标准化变换方法详解:Z-Score、Min-Max与Robust Scaling实战指南

数据标准化变换方法详解:Z-Score、Min-Max与Robust Scaling实战指南

1. 数据标准化变换到底在解决什么问题很多人第一次接触数据标准化变换,是在做特征工程或者跑机器学习模型的时候。教程里一句“对数据进行标准化处理”,然后甩出一行StandardScaler().fit_transform(X),看起来轻描淡写,但真正到了…

2026/10/15 10:29:26 阅读更多 →
Python随机抽奖系统实现与优化指南

Python随机抽奖系统实现与优化指南

1. 项目概述"L1-085 试试手气"是一个典型的Python编程练习项目,通常出现在编程入门课程或算法练习平台中。这个项目名称本身就暗示了它与随机性和概率有关,很可能是通过Python实现某种随机选择或抽奖功能的练习。这类项目对于Python初学者特别…

2026/10/15 10:29:26 阅读更多 →
IDEA快速生成Java实体类:原理、配置与工程实践

IDEA快速生成Java实体类:原理、配置与工程实践

1. 为什么“用IDEA快速生成实体类”这件事值得专门写一篇长文在日常开发中,我几乎每天都要和实体类打交道——不管是对接数据库表、接收前端JSON、解析第三方API响应,还是做DTO转换,第一件事往往就是先建一个Java类。以前靠手敲:p…

2026/10/15 10:29:26 阅读更多 →

最新新闻

Hyper-Frames:无标签视频+里程计自监督预训练,实现低成本运动预测

Hyper-Frames:无标签视频+里程计自监督预训练,实现低成本运动预测

做自动驾驶、移动机器人、无人机导航的同行,应该都有一段被数据集标注反复折磨的经历。最近 Waymo Research 放出的 Hyper-Frames 框架,让我终于看到一条不太一样的路:不用一开始就堆人天去标框、标轨迹、标地图,用无标签视频加里…

2026/10/15 12:59:25 阅读更多 →
Wand图像批处理实战:ImageMagick的Python绑定与PIL替代方案

Wand图像批处理实战:ImageMagick的Python绑定与PIL替代方案

1. 为什么我要认真聊聊Wand这个模块 第一次接触Wand是在处理一批商品图的时候。运营那边丢过来三百多张图片,要求统一裁成正方形、加白色边框、压缩到指定体积以下,还要把每张图的平均色提取出来做配色统计。我当时第一反应是用PIL,但写着写着…

2026/10/15 12:59:25 阅读更多 →
轴承行业竞价内卷加剧,杭州巨宇科技GEO优化让品牌被AI看见

轴承行业竞价内卷加剧,杭州巨宇科技GEO优化让品牌被AI看见

当空压机设备厂商向豆包提问"空压机轴承生产厂家哪家靠谱",向DeepSeek询问"精密轴承供应商推荐、高速轴承哪个品牌好",向Kimi搜索"轴承型号怎么对应、P4级精度是什么水平"时,AI给出的专业回答里,你…

2026/10/15 12:59:25 阅读更多 →
CHAN、Taylor、AOA定位算法实战:从公式到融合避坑指南

CHAN、Taylor、AOA定位算法实战:从公式到融合避坑指南

简介:这份资源围绕无线通信与导航系统中的经典定位算法展开,面向从事物联网、雷达、卫星导航及无线网络定位开发的学习者与研究人员,重点讲解CHAN、Taylor与AOA三种基本方法的原理与实现思路。压缩包共37个文件,以m脚本与mat文件为…

2026/10/15 12:59:25 阅读更多 →
Logstash数据入库MySQL/PostgreSQL:logstash-output-jdbc在线与离线安装全攻略

Logstash数据入库MySQL/PostgreSQL:logstash-output-jdbc在线与离线安装全攻略

Logstash的数据要写进MySQL或者PostgreSQL,很多人在第一步就卡住了:官方自带的输出插件只有elasticsearch、file、stdout这些,偏偏没有关系型数据库。社区里用得最多的补位方案就是logstash-output-jdbc。这个插件本身不难装,但“…

2026/10/15 12:59:25 阅读更多 →
C++结构体详解:定义、使用与最佳实践

C++结构体详解:定义、使用与最佳实践

1. 结构体基础概念解析在C编程中,结构体(struct)是一种将不同类型的数据组合成一个整体的复合数据类型。它允许我们将多个相关的变量打包成一个逻辑单元,这在处理复杂数据时特别有用。比如要记录一个班级的学生信息,每个学生有学号、姓名、成…

2026/10/15 12:58:24 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →