鸟鸣识别基线复现:音频分类工程骨架与Shell调度
简介该资源是2018 LifeCLEF鸟种识别任务BirdCLEF-Baseline的完整设计源码面向参与生物声学识别、音频分类竞赛或深度学习入门的研究者与开发者用于解决鸟类叫声自动分类与提交文件生成问题。压缩包共40个文件约1.36MB以19个Python脚本为核心覆盖配置、训练、测试、评估与提交等环节另有15个文本文件存放标签集与eBird物种清单并包含Theano配置、Dockerfile、Shell启动脚本、许可证、说明文档及示例音频与图片便于快速复现实验环境。目录中datasets、model、utils、snapshots等模块划分清晰config.py、train.py、test.py、submission_soundscape.py等脚本串联起数据预处理、特征提取、模型训练与结果提交的完整流程音频处理与评估指标代码可直接参考。目前已有279人学习适合希望理解LifeCLEF赛题方案、借鉴音频特征工程与Theano/Lasagne建模思路的读者。1. 鸟鸣识别基线复现从 2018 LifeCLEF 任务看音频分类的工程骨架2018 年 LifeCLEF 的 BirdCLEF 子任务核心是给一段野外录音判断里面出现了哪些鸟种。这件事听起来像纯算法问题实际做起来一半工作量在音频预处理和文件组织上。我见过不少团队模型结构调得很漂亮结果卡在音频采样率不统一、标签文件对不上号白白烧掉两周。这个基线方案的价值就在于它用 Python 做特征提取和模型训练用 Shell 脚本把数据准备、切分、批量推理串成流水线把「能跑通」这件事先钉死。适合谁适合刚接触音频分类、想找一个可复现起点的人也适合做生物声学监测、环境声音识别的从业者把鸟种换成蛙类、虫鸣骨架基本不用大改。这个基线不追求 SOTA它追求的是可复现和可扩展。Python 侧负责 MFCC 或梅尔谱提取、CNN 分类器搭建、训练循环Shell 侧负责批量重采样、数据集划分、多折训练调度。两者通过约定好的目录结构和文件命名解耦你换模型不用动 Shell换数据源不用重写 Python。下面按「数据怎么组织 → 特征怎么提 → 模型怎么搭 → 训练怎么跑 → 坑在哪 → 怎么验证」的顺序拆开讲。2. 数据管线设计音频切分、重采样与标签对齐2.1 为什么先做音频切分而不是直接喂整段BirdCLEF 的录音来自野外自动录音设备单文件动辄十几分钟里面可能只有几秒有目标鸟叫其余是风声、雨声、虫鸣和其他鸟的背景音。直接把整段丢给模型信噪比极低而且标签是文件级的模型学到的可能是「这段录音里有这个鸟」而不是「这个叫声对应这个鸟」。常见做法是切分成固定长度片段比如 5 秒或 10 秒片段内如果包含目标鸟种标注区间就继承该标签否则归为背景类或丢弃。切分长度怎么定我一般看目标鸟种单次鸣叫的典型时长。多数鸣禽单次叫声在 0.5 到 3 秒之间5 秒窗口能覆盖一次完整鸣叫加上前后文同时不会让片段内混入太多无关事件。窗口之间可以留 50% 重叠增加正样本数量但要注意同一段录音的片段不能同时出现在训练集和验证集否则验证分数虚高。2.2 用 Shell 做批量重采样和格式统一原始录音的采样率五花八门有 44.1kHz 的有 22.05kHz 的也有 16kHz 的。模型输入要求统一所以第一步是全部重采样到同一个采样率。我一般选 22050Hz 或 16000Hz前者保留更多高频细节后者省内存。用 Shell 调 ffmpeg 批量处理比在 Python 里逐个读快得多也不占 Python 进程内存。#!/bin/bash # 批量重采样脚本把 raw_audio 下所有 wav 转成 22050Hz 单声道 # 输入目录data/raw_audio # 输出目录data/resampled # 参数说明 # -ar 22050 目标采样率 # -ac 1 单声道 # -sample_fmt s16 16位有符号整数兼容性最好 INPUT_DIRdata/raw_audio OUTPUT_DIRdata/resampled TARGET_SR22050 mkdir -p $OUTPUT_DIR find $INPUT_DIR -type f -name *.wav | while read -r file; do # 保持相对路径结构避免同名文件覆盖 rel_path${file#$INPUT_DIR/} out_path$OUTPUT_DIR/${rel_path%.wav}.wav mkdir -p $(dirname $out_path) ffmpeg -hide_banner -loglevel error -i $file \ -ar $TARGET_SR -ac 1 -sample_fmt s16 \ $out_path if [ $? -ne 0 ]; then echo FAILED: $file resample_errors.log fi done echo 重采样完成错误记录在 resample_errors.log这段脚本的逻辑是遍历输入目录下所有 wav 文件用 ffmpeg 转成统一采样率和单声道输出目录保持和输入相同的子目录结构。关键参数是-ar和-ac前者决定频率轴分辨率后者去掉立体声冗余。-sample_fmt s16是为了后续用 librosa 或 scipy 读取时不出格式兼容问题。错误日志单独记录因为野外录音偶尔有损坏文件ffmpeg 会直接报错退出不能让整个批处理中断。2.3 标签文件对齐CSV 里的时间区间怎么变成片段标签BirdCLEF 的标注通常是 CSV每行包含录音文件名、鸟种、开始时间、结束时间。切分之后每个片段要判断它和哪些标注区间有重叠。重叠超过片段时长的一定比例比如 50%才继承标签否则算背景。这个逻辑用 Python 写比 Shell 合适因为要做时间区间运算。import pandas as pd def assign_labels_to_segments(segments_df, annotations_df, overlap_threshold0.5): segments_df: 列包括 segment_id, file_name, start_sec, end_sec annotations_df: 列包括 file_name, species, start_sec, end_sec 返回带标签的片段表 labeled [] for _, seg in segments_df.iterrows(): seg_dur seg[end_sec] - seg[start_sec] # 找出同一文件下所有时间有重叠的标注 candidates annotations_df[ (annotations_df[file_name] seg[file_name]) (annotations_df[start_sec] seg[end_sec]) (annotations_df[end_sec] seg[start_sec]) ] assigned [] for _, ann in candidates.iterrows(): # 计算重叠时长 overlap_start max(seg[start_sec], ann[start_sec]) overlap_end min(seg[end_sec], ann[end_sec]) overlap_dur max(0, overlap_end - overlap_start) if overlap_dur / seg_dur overlap_threshold: assigned.append(ann[species]) # 去重一个片段可能同时有多个鸟种 labeled.append({ segment_id: seg[segment_id], file_name: seg[file_name], start_sec: seg[start_sec], end_sec: seg[end_sec], species: list(set(assigned)) if assigned else [background] }) return pd.DataFrame(labeled)这里的关键参数是overlap_threshold设太高会丢正样本设太低会引入噪声标签。我一般从 0.5 起步如果某类鸟的召回明显偏低再降到 0.3 试试。返回的species是列表因为一个片段里可能同时有两种鸟叫多标签分类比单标签更贴近实际。3. 特征提取与模型搭建MFCC、梅尔谱与轻量 CNN3.1 MFCC 还是梅尔谱选型理由和参数怎么定音频分类里最常见的两种输入表示是 MFCC 和梅尔谱图。MFCC 做了离散余弦变换把梅尔谱进一步压缩维度低、计算快适合数据量小、模型简单的场景。梅尔谱图保留了更多频带间的相关性适合 CNN 直接当图像处理。BirdCLEF 的基线里两种都有出现我一般先用梅尔谱因为 CNN 对二维纹理敏感梅尔谱的时频结构更直观。梅尔谱的参数n_mels取 64 或 128n_fft取 1024 或 2048hop_length取 512。采样率 22050Hz 时n_fft2048对应频率分辨率约 10.8Hzhop_length512对应时间步长约 23ms。这些参数不是玄学n_mels太小会丢失频带细节太大则增加计算量且容易过拟合。我一般从 64 起步数据量超过一万条片段再考虑 128。import librosa import numpy as np def extract_mel_spectrogram(file_path, sr22050, n_mels64, n_fft2048, hop_length512): 读取音频并提取对数梅尔谱 返回形状(n_mels, time_steps) y, _ librosa.load(file_path, srsr, monoTrue) # 预加重提升高频 y librosa.effects.preemphasis(y) # 梅尔谱 mel librosa.feature.melspectrogram( yy, srsr, n_melsn_mels, n_fftn_fft, hop_lengthhop_length ) # 转对数刻度压缩动态范围 log_mel librosa.power_to_db(mel, refnp.max) return log_melpreemphasis是可选步骤对鸟鸣这种高频丰富的信号有帮助但如果你发现模型对低频噪声敏感可以去掉。power_to_db把功率谱转成 dB 刻度避免大能量值主导梯度。返回的矩阵可以直接当单通道图像喂给 CNN。3.2 轻量 CNN 的结构和参数量控制音频片段切 5 秒梅尔谱尺寸大约是 64×21622050×5/512≈215。这个尺寸不大不需要 ResNet 级别的模型。我一般用 4 层卷积加 2 层全连接参数量控制在 50 万以内训练快也不容易过拟合。import torch import torch.nn as nn class BirdCNN(nn.Module): def __init__(self, n_mels64, n_classes50): super().__init__() self.conv_block nn.Sequential( # 输入: (1, 64, 216) nn.Conv2d(1, 32, kernel_size3, padding1), nn.BatchNorm2d(32), nn.ReLU(), nn.MaxPool2d(2), # (32, 32, 108) nn.Conv2d(32, 64, kernel_size3, padding1), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(2), # (64, 16, 54) nn.Conv2d(64, 128, kernel_size3, padding1), nn.BatchNorm2d(128), nn.ReLU(), nn.MaxPool2d(2), # (128, 8, 27) nn.Conv2d(128, 128, kernel_size3, padding1), nn.BatchNorm2d(128), nn.ReLU(), nn.AdaptiveAvgPool2d((1, 1)) # (128, 1, 1) ) self.classifier nn.Sequential( nn.Dropout(0.3), nn.Linear(128, n_classes) ) def forward(self, x): x self.conv_block(x) x x.view(x.size(0), -1) return self.classifier(x)AdaptiveAvgPool2d((1,1))把任意时间长度的特征图压成固定维度这样推理时片段长度有点波动也不影响。Dropout(0.3)是防过拟合的常规操作如果训练集很小可以加到 0.5。输出层不加 softmax因为训练用CrossEntropyLoss内部会做。3.3 数据增强时移、加噪和混响的取舍音频数据增强里时移和加噪最安全混响要谨慎。时移就是把片段在时间轴上随机平移不改变内容只改变起始位置。加噪是混入高斯白噪声或实际背景噪声信噪比控制在 10dB 到 20dB 之间。混响模拟野外环境但如果你的测试集本身混响不重加了反而掉点。def augment_audio(y, sr, noise_factor0.005, shift_max0.2): # 随机时移 shift int(np.random.uniform(-shift_max, shift_max) * len(y)) y_shifted np.roll(y, shift) # 加高斯噪声 noise np.random.randn(len(y_shifted)) y_noisy y_shifted noise_factor * noise # 裁剪到 [-1, 1] y_aug np.clip(y_noisy, -1.0, 1.0) return y_augnoise_factor控制噪声强度0.005 大约对应 20dB 信噪比比较温和。时移比例shift_max0.2表示最多平移片段长度的 20%再大可能把有效鸣叫移出窗口。4. 训练流水线与 Shell 调度多折训练和批量推理4.1 用 Shell 做 K 折训练调度单次训练只能得到一个模型验证集划分有随机性。K 折交叉验证能给出更稳的评估也能产出 K 个模型做集成。Shell 脚本负责按折生成数据划分文件然后依次调用 Python 训练脚本。#!/bin/bash # K 折训练调度脚本 # 参数FOLD 表示当前折数从 0 到 K-1 # 每折生成对应的 train/val 列表然后训练 K5 DATA_DIRdata/segments LABEL_CSVdata/labels.csv OUTPUT_DIRmodels for fold in $(seq 0 $((K-1))); do echo 开始第 $fold 折 # 生成当前折的训练和验证列表 python make_fold_split.py \ --label_csv $LABEL_CSV \ --fold $fold \ --k $K \ --output_dir $DATA_DIR/fold_$fold # 训练 python train.py \ --train_list $DATA_DIR/fold_$fold/train.csv \ --val_list $DATA_DIR/fold_$fold/val.csv \ --epochs 30 \ --batch_size 32 \ --lr 1e-3 \ --output_dir $OUTPUT_DIR/fold_$fold if [ $? -ne 0 ]; then echo 第 $fold 折训练失败跳过 continue fi done echo 所有折训练完成make_fold_split.py负责按录音文件划分而不是按片段划分避免同一录音的片段同时出现在训练和验证集。train.py接收列表文件内部用 Dataset 和 DataLoader 加载。--epochs 30是经验值如果验证损失在 15 轮内不降就可以早停。4.2 批量推理和结果格式化训练完 K 个模型后对测试集做推理每个模型输出概率然后平均。Shell 负责遍历测试文件Python 负责单文件推理。#!/bin/bash # 批量推理脚本 TEST_DIRdata/test_segments MODEL_DIRmodels OUTPUT_CSVsubmission.csv # 先清空输出文件 $OUTPUT_CSV for model_fold in $MODEL_DIR/fold_*; do echo 使用模型 $model_fold 推理 python inference.py \ --model_path $model_fold/best_model.pth \ --test_dir $TEST_DIR \ --output_csv pred_$(basename $model_fold).csv done # 合并多个模型的预测结果 python ensemble_predictions.py \ --input_pattern pred_fold_*.csv \ --output_csv $OUTPUT_CSV echo 推理完成结果写入 $OUTPUT_CSVinference.py里要注意测试时的梅尔谱参数必须和训练时完全一致包括sr、n_mels、n_fft、hop_length。我见过有人训练用 22050Hz推理用 16000Hz结果模型完全失效。ensemble_predictions.py做简单平均如果某些折的验证分数明显低可以加权平均。4.3 训练日志和中间检查点训练过程中要记录每轮的训练损失、验证损失、验证准确率。Shell 脚本可以把日志重定向到文件方便事后排查。python train.py \ --train_list ... \ --val_list ... \ --epochs 30 \ --output_dir $OUTPUT_DIR/fold_$fold \ 21 | tee $OUTPUT_DIR/fold_$fold/train.logtee同时输出到终端和文件。如果训练中途崩溃日志里能看到最后一条记录判断是数据问题还是显存问题。检查点我一般每 5 轮存一次加上最佳验证模型单独存一份。5. 避坑与排查鸟种识别基线里最容易翻车的五个点5.1 验证集分数很高测试集一塌糊涂现象K 折验证准确率 85%提交到测试集只有 40%。原因按片段随机划分同一段录音的片段同时进了训练和验证集模型记住了录音的背景噪声特征而不是鸟叫本身。解决按录音文件划分折确保同一文件的片段只出现在一个折里。make_fold_split.py里用file_name做分组而不是segment_id。5.2 某些鸟种永远预测不出来现象混淆矩阵里某几类召回率为零。原因类别不平衡稀有鸟种样本太少模型倾向于预测多数类。解决用加权采样或焦点损失。DataLoader里设WeightedRandomSampler权重和类别频率成反比。或者用FocalLoss替代CrossEntropyLoss让模型关注难分样本。5.3 训练损失震荡不收敛现象损失在 2.0 到 5.0 之间跳。原因学习率太大或者梅尔谱没有做归一化。解决学习率从 1e-3 降到 1e-4加ReduceLROnPlateau调度。梅尔谱做逐样本标准化减均值除标准差。另外检查preemphasis是否让数值范围失控。5.4 推理速度极慢现象测试集几千条片段推理跑了几个小时。原因逐文件调用librosa.load每次都要初始化。解决用torchaudio或soundfile批量读取或者预先把梅尔谱算好存成 npy 文件推理时直接加载。Shell 脚本可以并行调用多个 Python 进程按 CPU 核数分配。5.5 提交格式对不上现象本地评估没问题提交后系统报格式错误。原因CSV 列名、分隔符、概率值范围不符合要求。解决仔细看任务说明里的样例提交文件列名通常是recording_id,species,probability概率在 0 到 1 之间。用pandas.to_csv(indexFalse)输出不要带行号。6. 进阶技巧用混合精度和模型集成把基线再推一步基线跑通之后想再提点分数最直接的两个方向是混合精度训练和模型集成。混合精度用torch.cuda.amp显存占用降一半batch size 可以翻倍训练速度提升 30% 到 50%。对音频分类这种输入尺寸不大的任务收益很明显。from torch.cuda.amp import autocast, GradScaler scaler GradScaler() for batch in dataloader: inputs, labels batch inputs, labels inputs.cuda(), labels.cuda() optimizer.zero_grad() with autocast(): outputs model(inputs) loss criterion(outputs, labels) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()autocast自动把部分运算转成 float16GradScaler防止梯度下溢。注意loss要在autocast上下文里算scaler.step替代optimizer.step。如果出现 NaN 损失检查是否有除零或 log 零的操作梅尔谱转 dB 时加个极小值1e-10。模型集成方面除了 K 折平均还可以做快照集成同一折训练中保存验证损失最低的 3 个检查点推理时平均。这样不用额外训练白捡一点提升。我一般会对比 K 折平均和快照集成的验证分数选高的那个方案提交。验证方法上除了准确率建议看宏平均召回率和混淆矩阵。鸟种识别里稀有类的召回比整体准确率更重要因为评测通常用宏平均。如果宏平均召回低优先处理样本量少于 50 的类别过采样或单独训练一个二分类器。最后说个血泪经验音频分类的坑八成在数据管线两成在模型。我早期做类似任务时花了一周调模型结构最后发现是重采样时把立体声当单声道读左右声道混在一起相位抵消高频细节全没了。从那以后我习惯在特征提取前先画几张梅尔谱图肉眼检查确认鸟叫的时频结构清晰可见再往下走。这个习惯帮我省了至少三次返工。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

SQL自动生成JSON:从表结构到接口数据的完整实战方案

SQL自动生成JSON:从表结构到接口数据的完整实战方案

简介:面向SQL Server开发与后端工程师,这份资料专门讲解如何用SQL语言自动生成JSON数据,解决分页查询结果转换为前端可调用格式的问题。内容先介绍JSON键值对结构及在数据交换中的用途,随后拆解核心实现步骤:声明Table…

2026/10/11 20:30:17 阅读更多 →
DataArc SynData Toolkit 配置文件 sdg.yaml 全字段详解:新手10分钟看懂数据合成每一步

DataArc SynData Toolkit 配置文件 sdg.yaml 全字段详解:新手10分钟看懂数据合成每一步

【免费下载链接】DataArc-SynData-Toolkit Synthetic Data Generation Platform By DataArcTech 项目地址: https://gitcode.com/gh_mirrors/da/DataArc-SynData-Toolkit 点击查看 免费下载 DataArc SynData Toolkit 是一款开源合成数据生成平台,而 con…

2026/10/11 20:30:17 阅读更多 →
VB6+SQL2000图书管理系统课设实战:借还书全流程可运行方案

VB6+SQL2000图书管理系统课设实战:借还书全流程可运行方案

简介:本资源是一份面向软件工程初学者与课程设计实践者的《图书管理系统》完整开发文档,聚焦需求分析、系统设计与实现全过程,适用于高校软件工程、信息系统分析与设计等课程的课程设计参考。文档详述三层架构(表现层/应用层/数据…

2026/10/11 20:30:17 阅读更多 →

最新新闻

改进版Q-learning实战:Double Q、n步回报与经验回放

改进版Q-learning实战:Double Q、n步回报与经验回放

简介:基于Q-learning的改进版强化学习算法项目,聚焦路径规划场景,面向MATLAB用户及强化学习入门者。项目针对经典Q-learning收敛慢的问题,融合学习率衰减、动态ε-greedy探索、经验回放、目标网络与双线性更新等改进策略&#xff…

2026/10/11 23:38:45 阅读更多 →
定时任务从Crontab到XXL-JOB:选型、实现与运维避坑指南

定时任务从Crontab到XXL-JOB:选型、实现与运维避坑指南

定时任务这个东西,我在不同项目里来来回回用了好多年。最早是拿 shell 脚本挂着 crontab 跑,后来做 PHP 后台管理系统时研究过 likeadmin 这类框架里定时任务的执行机制,再到现在维护 SpringCloud 集群,又得面对分布式定时任务怎么…

2026/10/11 23:38:45 阅读更多 →
VOC垃圾检测数据集14963张:Darknet训练YOLO全流程指南

VOC垃圾检测数据集14963张:Darknet训练YOLO全流程指南

简介:面向YOLOv3/v4/v5及Darknet框架训练需求,这份VOC格式垃圾分类数据集提供了完整的图片、标注与标签体系。数据集中包含14963张垃圾图片,每张均对应同名xml标注文件和yolo格式txt文件,合计44类全英文标签,并额外提供…

2026/10/11 23:38:45 阅读更多 →
社交网络链路预测实战:Python图算法与VGAE工程化指南

社交网络链路预测实战:Python图算法与VGAE工程化指南

简介:本资源是一套面向高校本科生与研究生的社交网络链路预测实践项目,适用于毕业设计、课程设计及科研入门场景,聚焦图神经网络与传统相似性指标在关系预测中的建模与对比分析。压缩包含345个文件,总大小33.94MB,其中…

2026/10/11 23:38:45 阅读更多 →
HarmonyOS 7 GridRow:折叠屏筛选面板断点抖动门禁【鸿蒙心迹】

HarmonyOS 7 GridRow:折叠屏筛选面板断点抖动门禁【鸿蒙心迹】

相册筛选页最难解释的状态异常,有时并不出现在网络请求上。用户只是把折叠屏展开、收回,再展开,原本已经勾好的“城市、夜景、建筑”仍然亮着,结果列表却突然刷新两遍。更糟糕的是,第一次请求还没回来,第二…

2026/10/11 23:38:45 阅读更多 →
Q-learning改进版全解析:目标网络、经验回放与Double Q实战

Q-learning改进版全解析:目标网络、经验回放与Double Q实战

简介:这份资源是基于Q-learning改进的强化学习算法实现,开发工具为MATLAB,面向路径规划与人工智能学习者,适合机器人导航、网格寻路、游戏AI等场景下的最优策略求解问题。ZIP压缩包共包含21个文件,以19个.m脚本为核心&…

2026/10/11 23:37:44 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

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