交通标志识别毕业设计:Python+CNN从数据到部署全流程
简介这份资源是Python实现的基于CNN深度学习网络的交通标志识别项目源码面向计算机相关专业的毕业设计、课程设计与期末大作业需求者也适合希望入门卷积神经网络图像分类的开发者。项目已通过导师指导并获得高分评价下载后无需修改即可直接运行能帮助读者省去从零搭建模型与调试环境的时间。压缩包共19个文件约18.06MB包含4个Python脚本分别负责GUI交互、图像裁剪与分类推理2个h5模型文件提供训练好的权重另有11张png示例图片、requirements.txt依赖清单及.gitignore等配置结构清晰、便于二次开发。目前已有479人学习下载读者可据此掌握CNN交通标志识别的完整流程包括数据预处理、模型加载、界面调用与结果展示并参考现有代码快速完成自己的课题或扩展实验。1. 交通标志识别为什么成了深度学习毕业设计的“硬骨头”拿一个 zip 包做毕业设计最怕的不是代码跑不起来而是跑起来了却讲不清为什么这么设计。交通标志识别这个题目表面看是“分类任务”实际落地时会撞上三件事类别极度不均衡限速 30 和限速 80 的样本数能差十倍、实拍图光照和遮挡差异大、以及训练完发现模型在测试集上 99% 但换个路口就翻车。Python 加 CNN 的组合之所以成为这类课题的主流是因为它能把数据增强、迁移学习、可视化排查串成一条完整链路而不是只丢一个网络结构给你。这篇笔记面向正在做交通标志识别毕业设计、或者想用一份源码快速跑通 baseline 的人从数据组织讲到训练调参再到部署前的验证技巧把每一步的参数含义和踩坑点摊开说。2. 交通标志数据集怎么组织才能让 CNN 真正学到东西2.1 先搞清楚 GTSRB 和 CIFAR-10 的区别在哪很多人拿到源码第一反应是“数据集呢”然后随手用 CIFAR-10 跑一遍发现准确率挺高就交差了。这是典型的翻车起点。CIFAR-10 是 32×32 的通用物体分类交通标志在真实场景里是 30×30 到 200×200 不等的裁剪图且 GTSRBGerman Traffic Sign Recognition Benchmark有 43 类、超过 5 万张训练图类别分布从每类 200 多张到 2000 多张不等。如果你的源码里写的是num_classes10那它大概率不是为交通标志准备的需要先改配置。常见做法是下载 GTSRB 的 Train 和 Test 两个压缩包解压后得到按类别编号的文件夹结构。Train 里每个子文件夹名就是类别 IDTest 里有一份 CSV 标注文件。不要直接把所有图混在一起做随机划分因为 GTSRB 的 Test 集是官方切分好的混用会导致你的验证集和测试集分布不一致最后答辩时被问“你的测试集怎么来的”会很难解释。2.2 用 Python 把散图整理成 CNN 能吃的目录结构下面这段脚本把 GTSRB 的 Train 文件夹按 8:2 切成 train/val并生成对应的标签映射文件。注意split_ratio和random_seed这两个参数前者控制验证集比例后者保证每次运行切分结果一致方便复现。import os import shutil import random from pathlib import Path def split_dataset(src_dir, dst_dir, split_ratio0.2, seed42): random.seed(seed) src_path Path(src_dir) dst_path Path(dst_dir) # 创建目标目录 for subset in [train, val]: (dst_path / subset).mkdir(parentsTrue, exist_okTrue) class_dirs sorted([d for d in src_path.iterdir() if d.is_dir()]) for class_dir in class_dirs: images list(class_dir.glob(*.png)) list(class_dir.glob(*.ppm)) random.shuffle(images) val_count int(len(images) * split_ratio) for i, img in enumerate(images): subset val if i val_count else train target dst_path / subset / class_dir.name target.mkdir(parentsTrue, exist_okTrue) shutil.copy(img, target / img.name) print(f总类别数: {len(class_dirs)}) print(f训练集路径: {dst_path / train}) print(f验证集路径: {dst_path / val}) if __name__ __main__: split_dataset(./GTSRB/Train, ./data_split, split_ratio0.2, seed42)逻辑说明先按类别遍历每个类别内部打乱后按比例切分保证每个类在训练集和验证集里都有样本。seed42是习惯用法换成任意整数都行关键是固定住。split_ratio0.2意味着验证集占 20%如果某个类样本少于 10 张建议改成 0.3 或做分层抽样否则验证集里可能一个样本都没有。参数说明src_dir指向原始 GTSRB Train 文件夹dst_dir是输出目录。脚本不会删除原文件只是复制所以磁盘空间要留够。如果图片格式是.ppmOpenCV 和 PIL 都能读但后续 DataLoader 里要确认img.convert(RGB)否则三通道会变成单通道。2.3 数据增强不是越多越好交通标志有它的边界交通标志的增强策略和自然图像不一样。随机裁剪不能太狠因为标志本身占图比例大裁多了可能把红圈裁掉一半颜色抖动也要克制红色禁令标志的色相偏移超过 15 度就可能变成另一个类别。我一般用这几档随机旋转 ±10 度、亮度对比度微调 0.1、水平翻转慎用左转和右转标志翻转后语义就反了。from torchvision import transforms train_transform transforms.Compose([ transforms.Resize((48, 48)), transforms.RandomRotation(10), transforms.ColorJitter(brightness0.1, contrast0.1), transforms.ToTensor(), transforms.Normalize(mean[0.340, 0.312, 0.321], std[0.272, 0.260, 0.266]) ]) val_transform transforms.Compose([ transforms.Resize((48, 48)), transforms.ToTensor(), transforms.Normalize(mean[0.340, 0.312, 0.321], std[0.272, 0.260, 0.266]) ])这里的 mean 和 std 是 GTSRB 训练集统计出来的经验值直接用 ImageNet 的均值也能跑但收敛会慢一点。Resize((48, 48))是常见选择32×32 会丢细节64×64 对毕业设计的算力要求偏高。如果你的源码里写的是 32可以改成 48 试试通常能涨 1 到 2 个百分点。3. CNN 网络结构选型从 LeNet 到 ResNet 的取舍3.1 为什么毕业设计不建议直接上 ResNet-50ResNet-50 有 2500 万参数GTSRB 训练集只有 5 万张图直接训会严重过拟合。我见过太多源码包一上来就models.resnet50(pretrainedTrue)然后冻结所有层只训全连接准确率确实能到 95% 以上但答辩时老师问“卷积层学了什么”就答不上来。更合理的做法是用一个 4 到 6 层的自定义 CNN参数量控制在 100 万以内既能讲清楚每层的作用又能在一张 6GB 显存的卡上跑起来。一个典型的交通标志 CNN 结构长这样输入 48×48×3第一层卷积 32 个 3×3 核ReLU最大池化 2×2第二层 64 个 3×3 核ReLU池化第三层 128 个 3×3 核ReLU池化然后展平接 256 维全连接Dropout 0.5最后输出 43 类。这个结构在 GTSRB 上训 30 个 epoch 能到 97% 左右而且每一层的特征图都能可视化出来讲。3.2 用 PyTorch 定义一个可解释的交通标志 CNNimport torch import torch.nn as nn class TrafficSignCNN(nn.Module): def __init__(self, num_classes43): super(TrafficSignCNN, self).__init__() self.features nn.Sequential( nn.Conv2d(3, 32, kernel_size3, padding1), nn.BatchNorm2d(32), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), nn.Conv2d(32, 64, kernel_size3, padding1), nn.BatchNorm2d(64), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), nn.Conv2d(64, 128, kernel_size3, padding1), nn.BatchNorm2d(128), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), ) self.classifier nn.Sequential( nn.Dropout(0.5), nn.Linear(128 * 6 * 6, 256), nn.ReLU(inplaceTrue), nn.Dropout(0.5), nn.Linear(256, num_classes) ) def forward(self, x): x self.features(x) x x.view(x.size(0), -1) x self.classifier(x) return x if __name__ __main__: model TrafficSignCNN(num_classes43) dummy torch.randn(8, 3, 48, 48) out model(dummy) print(f输出维度: {out.shape}) # 应为 (8, 43)逻辑说明BatchNorm2d放在卷积和 ReLU 之间是标准做法能加速收敛。padding1保证 3×3 卷积后特征图尺寸不变只有池化层在降维。三次池化后 48×48 变成 6×6所以全连接输入是128 * 6 * 6。如果你把输入改成 32×32这里要改成128 * 4 * 4否则会报维度不匹配。参数说明num_classes43对应 GTSRB 的类别数如果只做 10 类子集就改成 10。Dropout(0.5)在全连接前和中间各加一次防止过拟合。学习率初始设 0.001用 Adam 优化器每 10 个 epoch 乘 0.1。3.3 训练循环里必须监控的三个指标不要只看 loss。交通标志识别要同时盯训练准确率、验证准确率、以及每类的召回率。如果验证准确率比训练低超过 5 个百分点说明过拟合了加 Dropout 或减层。如果某一类召回率特别低比如限速 80 经常被认成限速 60那就是分辨率不够把输入从 32 提到 48 通常能解决。def train_one_epoch(model, loader, criterion, optimizer, device): model.train() running_loss 0.0 correct 0 total 0 for images, labels in loader: images, labels images.to(device), labels.to(device) optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step() running_loss loss.item() * images.size(0) _, predicted torch.max(outputs, 1) total labels.size(0) correct (predicted labels).sum().item() epoch_loss running_loss / total epoch_acc correct / total return epoch_loss, epoch_acc这段代码里loss.item() * images.size(0)是为了按样本数加权平均避免最后一个 batch 不满时 loss 被低估。torch.max(outputs, 1)返回每行最大值和索引索引就是预测类别。验证循环把model.train()换成model.eval()并加torch.no_grad()上下文否则显存会爆。4. 训练参数怎么调学习率、批次大小和优化器的实战组合4.1 学习率不是玄学用余弦退火比阶梯下降稳阶梯下降StepLR在交通标志任务上容易在后期震荡因为学习率突然砍半会导致 loss 反弹。余弦退火CosineAnnealingLR让学习率平滑降到接近零配合 warmup 前 5 个 epoch 从 0 线性升到初始值收敛曲线会好看很多。初始学习率设 0.001最小设 1e-5周期设 30 个 epoch。from torch.optim.lr_scheduler import CosineAnnealingLR, LinearLR, SequentialLR optimizer torch.optim.Adam(model.parameters(), lr0.001, weight_decay1e-4) warmup LinearLR(optimizer, start_factor0.1, total_iters5) cosine CosineAnnealingLR(optimizer, T_max25, eta_min1e-5) scheduler SequentialLR(optimizer, schedulers[warmup, cosine], milestones[5])weight_decay1e-4是 L2 正则等价于在 loss 里加参数平方惩罚能压住过拟合。start_factor0.1表示 warmup 起点是初始学习率的 10%5 个 epoch 后到 100%然后余弦退火 25 个 epoch。总训练轮数就是 30。4.2 批次大小和显存的关系别盲目上 256批次大小影响梯度估计的噪声。GTSRB 有 43 类批次太小比如 16会导致每个 batch 里类别分布不均梯度方向抖动大批次太大比如 256虽然稳定但显存吃紧而且泛化可能变差。我一般用 64 或 128配合num_workers4和pin_memoryTrue加速数据加载。from torch.utils.data import DataLoader from torchvision.datasets import ImageFolder train_dataset ImageFolder(./data_split/train, transformtrain_transform) val_dataset ImageFolder(./data_split/val, transformval_transform) train_loader DataLoader(train_dataset, batch_size64, shuffleTrue, num_workers4, pin_memoryTrue) val_loader DataLoader(val_dataset, batch_size64, shuffleFalse, num_workers4, pin_memoryTrue)shuffleTrue只在训练集开验证集必须关掉否则评估结果不可复现。num_workers在 Windows 上设 0 或 2设 4 以上可能报错Linux 上可以设 4 到 8。pin_memoryTrue在 GPU 训练时能减少数据传输时间CPU 训练时关掉。4.3 早停和模型保存别等训完 100 个 epoch 才看结果毕业设计的算力有限早停能省时间。监控验证集准确率如果连续 7 个 epoch 没提升就停并保存验证准确率最高的那个模型权重。不要保存最后一个 epoch 的权重因为后期可能过拟合。best_acc 0.0 patience 7 counter 0 for epoch in range(30): train_loss, train_acc train_one_epoch(model, train_loader, criterion, optimizer, device) val_loss, val_acc validate(model, val_loader, criterion, device) scheduler.step() if val_acc best_acc: best_acc val_acc torch.save(model.state_dict(), best_model.pth) counter 0 else: counter 1 if counter patience: print(f早停于 epoch {epoch}, 最佳验证准确率: {best_acc:.4f}) break print(fEpoch {epoch}: train_acc{train_acc:.4f}, val_acc{val_acc:.4f})torch.save(model.state_dict(), ...)只存参数不存网络结构加载时需要用同样的类定义实例化后再load_state_dict。如果存整个模型用torch.save(model, ...)但那样文件大且依赖类定义路径不推荐。5. 避坑与排查交通标志识别源码跑不通的五个典型场景5.1 报错“CUDA out of memory”但显存明明够现象batch_size 设 64显卡 8GB跑第一个 epoch 就 OOM。原因验证循环没加torch.no_grad()导致计算图一直累积。解决在验证函数开头加with torch.no_grad():并且model.eval()要放在循环外。5.2 训练准确率一直卡在 5% 左右现象loss 不降准确率接近随机猜43 类随机约 2.3%。原因标签没对齐。ImageFolder 按文件夹名排序生成类别索引如果你的文件夹名是00000到00042排序后没问题但如果文件夹名是0到42混着10和2排序会变成0, 10, 11, ..., 2, 20, ...标签就乱了。解决统一用零填充的文件夹名或者手动指定class_to_idx。5.3 验证集准确率比训练集高现象训练准确率 92%验证 95%。原因Dropout 在训练时开启、验证时关闭如果验证集太小且分布简单就会出现这种反常。解决检查验证集是否和训练集有重叠图片用split_dataset时确认shutil.copy没有把同一张图复制到两个目录。另外把 Dropout 从 0.5 降到 0.3 试试。5.4 预测时所有图片都输出同一类现象加载模型推理不管输入什么图输出都是“限速 50”。原因归一化参数不匹配。训练时用了 GTSRB 的 mean/std推理时用了 ImageNet 的导致输入分布偏移。解决把训练时的 mean 和 std 存成 JSON推理时读同一份。5.5 数据增强后图片出现黑边现象随机旋转 10 度后图片角落填充黑色训练时模型学到黑边特征。原因RandomRotation默认fill0。解决改成transforms.RandomRotation(10, fill128)用灰色填充减少黑边干扰。或者用RandomAffine配合padding_modereflect。6. 把模型推到 99% 之后用混淆矩阵和 Grad-CAM 做最后验证训练到 97% 以上时准确率已经很难再涨这时候该做的是验证模型到底学到了什么。我习惯在测试集上跑一遍混淆矩阵找出最容易混的类别对。GTSRB 里经典的混淆是“限速 80”和“限速 60”因为数字 8 和 6 在低分辨率下轮廓相似。如果混淆矩阵显示这两类互相误判超过 5%就把输入分辨率提到 64×64或者对这两类单独做数据增强。from sklearn.metrics import confusion_matrix import seaborn as sns import matplotlib.pyplot as plt def plot_confusion(model, loader, device, num_classes43): model.eval() all_preds [] all_labels [] with torch.no_grad(): for images, labels in loader: images images.to(device) outputs model(images) _, preds torch.max(outputs, 1) all_preds.extend(preds.cpu().numpy()) all_labels.extend(labels.numpy()) cm confusion_matrix(all_labels, all_preds) plt.figure(figsize(14, 12)) sns.heatmap(cm, annotFalse, cmapBlues) plt.xlabel(Predicted) plt.ylabel(True) plt.savefig(confusion_matrix.png, dpi150) plt.close() # 打印混淆最严重的前五对 errors [] for i in range(num_classes): for j in range(num_classes): if i ! j and cm[i][j] 0: errors.append((cm[i][j], i, j)) errors.sort(reverseTrue) for count, true_cls, pred_cls in errors[:5]: print(f真实 {true_cls} 被误判为 {pred_cls}: {count} 次) plot_confusion(model, val_loader, device)这段代码输出混淆矩阵热力图和误判最多的五对类别。annotFalse是因为 43×43 太密标数字会糊。如果你只做 10 类可以改成annotTrue。另一个工具是 Grad-CAM它能告诉你模型在看图片的哪个区域。交通标志识别里如果 Grad-CAM 高亮区域落在标志内部而不是背景说明模型学到了正确特征。如果高亮在背景的树或天空上那模型就是靠背景作弊换个场景就废。Grad-CAM 的实现需要 hook 到目标卷积层代码稍长但 PyTorch 的torchcam库可以一行调用。我一般把 Grad-CAM 图放在答辩 PPT 里比单纯报准确率有说服力得多。最后说一个我自己的习惯每次改完网络结构或数据增强先跑 5 个 epoch 看验证准确率有没有超过上一版的同期水平如果没有就回退。不要等训完 30 个 epoch 才发现改错了那是真的后悔药都没得吃。交通标志识别这个方向数据质量比模型深度重要输入分辨率比网络层数重要混淆矩阵比准确率数字重要。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Java图形打印训练:培养Android开发必备的坐标逻辑思维

Java图形打印训练:培养Android开发必备的坐标逻辑思维

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

2026/10/13 1:27:07 阅读更多 →
Maven Wrapper 实战:锁定构建版本,告别环境不一致

Maven Wrapper 实战:锁定构建版本,告别环境不一致

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

2026/10/13 1:27:07 阅读更多 →
工业控制系统Qt选型与开发实战:架构、通信与性能优化

工业控制系统Qt选型与开发实战:架构、通信与性能优化

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

2026/10/13 1:27:07 阅读更多 →

最新新闻

Reclilisib:从PI3K激动剂到选择性辐射保护剂的双重角色

Reclilisib:从PI3K激动剂到选择性辐射保护剂的双重角色

做肿瘤放疗研究的朋友应该都有过这种纠结:治疗窗口太窄,射线过去,肿瘤细胞和正常组织一起遭殃。我们这些年一直在找"选择性辐射保护剂"——最好能保护正常细胞,却不给肿瘤细胞留活路。我第一次注意到Reclilisib&#xf…

2026/10/13 2:18:27 阅读更多 →
MFC连接MySQL实战:ODBC封装、CRUD与避坑手册

MFC连接MySQL实战:ODBC封装、CRUD与避坑手册

简介:这是一套面向MFC桌面应用开发者的MySQL数据库访问示例工程,核心演示如何借助ODBC标准数据库接口,在C程序中完成连接建立、SQL查询、结果集遍历与数据更新等常用操作。压缩包内共含117个文件,压缩后约181KB;其中49…

2026/10/13 2:18:27 阅读更多 →
从Java转运营第5天:用技术思维做抖音新号,先学会拆解对标账号

从Java转运营第5天:用技术思维做抖音新号,先学会拆解对标账号

今天是我从 Java 转运营的第 5 天,也是正式开始折腾抖音新号起号的日子。说实话,从写完第一版账号简介到研究“到底该发什么”,我踩的坑比写的需求还多。如果把起号比作一次系统上线,那我 Day05 最大的收获就是:先别急…

2026/10/13 2:18:27 阅读更多 →
安卓手机跑 Windows 应用完整指南:Winlator 安装、配置与排障实操

安卓手机跑 Windows 应用完整指南:Winlator 安装、配置与排障实操

安卓手机跑 Windows 应用完整指南:Winlator 安装、配置与排障实操 【免费下载链接】winlator Android application for running Windows applications with Wine and Box86/Box64 项目地址: https://gitcode.com/GitHub_Trending/wi/winlator 手机里下了个 .…

2026/10/13 2:18:27 阅读更多 →
eksctl v0.149.0 发布解析:AWS 区域环境变量修复与 eksctl-io 组织迁移

eksctl v0.149.0 发布解析:AWS 区域环境变量修复与 eksctl-io 组织迁移

云原生容器编排DevOps 【免费下载链接】eksctl The official CLI for Amazon EKS 项目地址: https://gitcode.com/gh_mirrors/ek/eksctl 点击查看 免费下载 本指南围绕 eksctl 官方 CLI 的 v0.149.0 发布说明展开,逐项解析该版本引入的功能更新、两个关…

2026/10/13 2:18:27 阅读更多 →
Win11升级后应用打不开?从升级机制到修复方案全解析

Win11升级后应用打不开?从升级机制到修复方案全解析

最近一段时间,我这边处理最多的求助不是软件本身崩溃,而是同一句话:升完 Win11 之后,XX 应用打不开了。有的是设备厂商的配置工具,点开就没反应;有的是行业软件启动后直接闪退;还有的是虚拟机一…

2026/10/13 2:17:27 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战: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/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →