基于深度学习的农作物病虫害识别系统:源码、教程与论文参考
简介这份资源是面向高校学生与深度学习入门者的常见农作物病虫害识别系统完整项目包对应高分毕业设计涵盖从数据收集、视觉显著性处理到卷积神经网络云训练的完整链路并涉及Inception-V3、MobileNet-V2等经典模型适合需要完成课程设计、毕业设计或想系统实践图像分类的读者。压缩包共281个文件约522.63MB包含14个Python源码、8个Vue与7个JavaScript前端文件、34张png图表、107个txt说明及多份pdf、docx论文与技术路线图文档源码、教程与论文配套齐全。目前已有2898人学习下载。读者可据此获得一套经导师指导并通过的完整方案包括数据处理流程、模型训练代码、前端展示界面与论文写作参考便于快速复现实验、理解网络结构与超参数设置并在此基础上完成二次开发或撰写自己的毕业设计。1. 从一份能跑通的病虫害识别源码说起去年帮一个学弟看他的毕业设计打开压缩包我就愣住了三个版本的代码混在一起requirements.txt 里写着一堆互相冲突的版本号README 只有一行“运行 main.py”。他跟我说网上找的“深度学习病虫害识别”资源十个里有八个跑不起来剩下两个跑起来准确率只有 40%。这不是个例。农作物病虫害识别这个方向因为数据集相对规整、模型结构成熟成了毕业设计的热门选题但真正能跑通、能改、能写进论文的完整资源并不多。这份基于深度学习的常见农作物病虫害识别系统包含源码、教程和论文参考覆盖了从数据预处理到模型训练再到界面演示的完整链路适合正在做相关毕业设计、课程设计或者想快速搭一个图像分类原型的开发者。它解决的核心问题是让你不用从零攒数据集、调网络结构、写界面直接在一个可复现的基线上做二次开发。2. 先搞清楚识别系统的技术底座CNN 怎么把叶片照片变成病虫害标签拿到一份深度学习项目最怕的就是把它当黑匣子跑一遍就完事。病虫害识别本质上是一个细粒度图像分类问题——不同病害在叶片上的表现差异可能只是几个斑点的大小和颜色这对模型的特征提取能力要求比普通猫狗分类高得多。这份资源用的是卷积神经网络路线常见做法是 ResNet 或 MobileNet 做骨干配合数据增强和迁移学习。下面把关键环节拆开讲。2.1 数据集结构与类别不平衡的处理逻辑病虫害数据集通常按“作物-病害”两级目录组织比如data/train/玉米-锈病/、data/train/玉米-健康/。这份资源的目录结构大概率也是这个套路因为 PyTorch 的ImageFolder和 TensorFlow 的image_dataset_from_directory都默认这种格式。但真实场景里有个绕不开的问题健康样本往往比病害样本多某些罕见病害可能只有几十张图。直接训练会导致模型偏向多数类在验证集上看着准确率不错实际对少数类几乎没识别能力。常见做法是在 DataLoader 里加WeightedRandomSampler给每个类别按样本数反比赋权重。代码大概长这样import os from torch.utils.data import WeightedRandomSampler from torchvision import datasets # 加载训练集ImageFolder 自动按目录名映射标签 train_dataset datasets.ImageFolder(rootdata/train, transformtrain_transform) # 统计每个类别的样本数 class_counts [0] * len(train_dataset.classes) for _, label in train_dataset.samples: class_counts[label] 1 # 按样本数反比计算权重样本越少权重越高 class_weights [1.0 / c for c in class_counts] sample_weights [class_weights[label] for _, label in train_dataset.samples] # 用 WeightedRandomSampler 替换默认的随机采样 sampler WeightedRandomSampler( weightssample_weights, num_sampleslen(sample_weights), replacementTrue # 允许重复采样少数类 )这段代码的逻辑是先遍历train_dataset.samples拿到每张图的标签统计出每个类别的总数然后对每个类别取倒数作为权重样本越少权重越大最后用WeightedRandomSampler让 DataLoader 在每次 epoch 中按权重采样少数类会被更频繁地抽到。参数replacementTrue表示有放回采样这是必须的否则少数类样本抽完就没了。num_samples一般设成和训练集总数一致保证每个 epoch 看到的图片数量和正常训练差不多。注意如果验证集也做同样的采样评估结果会失真。验证集必须用原始分布才能反映模型在真实场景下的表现。2.2 迁移学习与冻结层的选择从零训练一个 ResNet 在几千张图上很容易过拟合所以这份资源大概率用了预训练权重。关键决策是冻结多少层。常见做法是只替换最后的全连接层然后分阶段解冻先冻结骨干只训练分类头等 loss 稳定后再解冻最后几个 block 做微调。代码结构如下import torchvision.models as models import torch.nn as nn # 加载预训练 ResNet18weights 参数指定使用 ImageNet 预训练权重 model models.resnet18(weightsmodels.ResNet18_Weights.IMAGENET1K_V1) # 冻结骨干网络的所有参数 for param in model.parameters(): param.requires_grad False # 替换最后的全连接层输出维度改为病虫害类别数 num_classes len(train_dataset.classes) model.fc nn.Linear(model.fc.in_features, num_classes) # 此时只有 model.fc 的参数需要训练 optimizer torch.optim.Adam(model.fc.parameters(), lr1e-3)第一阶段的lr可以设大一点比如1e-3因为只训练分类头收敛快。等验证集准确率不再上升后解冻model.layer4把学习率降到1e-4继续训练。这个策略比一上来就全网络微调更稳血泪经验是小数据集上直接全量微调前几个 epoch 验证集准确率会剧烈震荡甚至比只训练分类头还差。2.3 训练循环里的关键参数与日志监控训练脚本里最容易被忽视的是日志。很多人跑完只看最后一行准确率中间 loss 怎么变的完全不知道。建议在训练循环里每个 epoch 记录 train_loss、val_loss、val_acc画成曲线一眼就能看出过拟合还是欠拟合。核心代码片段for epoch in range(num_epochs): model.train() running_loss 0.0 for images, labels in train_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) # 验证阶段 model.eval() val_correct 0 val_total 0 with torch.no_grad(): for images, labels in val_loader: images, labels images.to(device), labels.to(device) outputs model(images) _, predicted torch.max(outputs, 1) val_total labels.size(0) val_correct (predicted labels).sum().item() train_loss running_loss / len(train_dataset) val_acc val_correct / val_total print(fEpoch {epoch1}/{num_epochs} | Loss: {train_loss:.4f} | Val Acc: {val_acc:.4f})criterion一般用CrossEntropyLoss如果类别不平衡严重可以加weight参数传入类别权重。optimizer.zero_grad()的位置必须在反向传播之前这是 PyTorch 的固定套路但新手经常写成loss.backward()之后才清零导致梯度累积loss 曲线像心电图。3. 把源码跑起来环境配置、数据准备与训练启动理论清楚了接下来是动手环节。这份资源能不能在你的机器上跑通取决于三个东西Python 环境、数据集路径、以及有没有 GPU。下面按顺序走一遍。3.1 环境依赖的版本对齐深度学习项目最玄学的地方就是版本兼容。PyTorch、CUDA、torchvision 三者版本必须匹配否则 import 就报错。常见做法是先用conda建一个干净环境然后按官方对应关系装。假设资源里用的是 PyTorch 1.12 CUDA 11.3命令如下# 创建虚拟环境指定 Python 版本 conda create -n pest_recognition python3.8 -y conda activate pest_recognition # 安装 PyTorch 和 torchvision注意 cudatoolkit 版本要和驱动匹配 conda install pytorch1.12.1 torchvision0.13.1 cudatoolkit11.3 -c pytorch -y # 安装其他依赖 pip install opencv-python pillow matplotlib scikit-learn tqdm如果你没有 GPU把cudatoolkit去掉装 CPU 版本的 PyTorch 也能跑只是训练慢。验证安装是否成功import torch print(torch.__version__) print(torch.cuda.is_available()) # 有 GPU 返回 Truetorch.cuda.is_available()返回 False 的话检查显卡驱动版本是否支持当前 CUDA。常见坑是驱动太旧装完 CUDA 11.3 但驱动只支持到 11.1这时候要么升级驱动要么降 CUDA 版本。3.2 数据集划分与路径配置资源里一般会附带数据集或者给出下载方式。拿到数据后按train/val/test划分比例常见是 7:2:1 或 8:1:1。如果原始数据没有划分用脚本切import os import shutil import random def split_dataset(src_dir, dst_dir, split_ratio(0.7, 0.2, 0.1)): 按比例划分数据集保持类别目录结构 classes os.listdir(src_dir) for cls in classes: cls_path os.path.join(src_dir, cls) images os.listdir(cls_path) random.shuffle(images) n_train int(len(images) * split_ratio[0]) n_val int(len(images) * split_ratio[1]) for i, img in enumerate(images): if i n_train: subset train elif i n_train n_val: subset val else: subset test # 创建目标目录并复制图片 dst_path os.path.join(dst_dir, subset, cls) os.makedirs(dst_path, exist_okTrue) shutil.copy(os.path.join(cls_path, img), os.path.join(dst_path, img)) split_dataset(raw_data, data)split_ratio三个数分别对应训练、验证、测试的比例加起来必须等于 1。random.shuffle保证每个类别的图片被随机分配避免按文件名顺序切导致某个子集全是同一批拍摄的图片。划分完之后训练脚本里的data/train、data/val路径就能直接用了。3.3 启动训练与断点续训配置好路径后直接运行训练脚本python train.py --data_dir data --epochs 50 --batch_size 32 --lr 1e-3 --gpu 0参数说明--epochs是总训练轮数小数据集一般 30 到 50 轮就够--batch_size受显存限制8G 显存跑 ResNet18 可以设 32跑 ResNet50 建议降到 16--lr初始学习率配合余弦退火调度器效果更好。如果训练中断了资源里如果有--resume参数可以加载上次保存的 checkpoint 继续python train.py --resume checkpoints/model_epoch_30.pth断点续训的关键是 checkpoint 里要保存 optimizer 的 state_dict否则优化器动量信息丢失loss 会突然跳一下。常见做法是每个 epoch 存一次文件名带 epoch 数方便回滚。4. 避坑与排查那些让准确率卡在 60% 的细节跑通不等于跑好。下面这几条是实际调试中最常翻车的地方每条按现象、原因、解决来写。4.1 验证集准确率远高于测试集现象训练时验证集准确率 95%换测试集一跑只有 70%。原因通常是数据泄漏——同一张叶片的多角度照片被分到了训练集和验证集模型记住了背景而不是病害特征。解决划分数据集时按“拍摄批次”或“原始图片 ID”分组确保同一株植物的照片只出现在一个子集里。如果数据没有批次信息至少用ImageFolder之前先做一次文件级去重。4.2 Loss 不下降且输出全为同一类现象训练几个 epoch 后 loss 几乎不变预测结果全是样本最多的那个类别。原因可能是学习率太大导致梯度爆炸或者数据标签没对上。解决先把学习率降到1e-4试一轮然后检查ImageFolder的class_to_idx映射确认标签和目录名一致。常见坑是目录名里有中文或空格ImageFolder按字典序排序后标签顺序和你以为的不一样。4.3 GPU 显存溢出但 batch_size 已经很小现象CUDA out of memory但 batch_size 已经降到 8 了。原因可能是图片分辨率太高比如原始图片是 4000x3000直接 resize 到 224 之前先被加载成了张量。解决在 Dataset 的__getitem__里用 PIL 打开图片后立即 resize不要先转成 numpy 数组再处理。另外检查是否有残留的 tensor 没释放在验证循环里加torch.cuda.empty_cache()。4.4 数据增强把病害特征增没了现象加了随机裁剪和颜色抖动后验证集准确率反而下降。原因病虫害识别的关键特征就是病斑的颜色和形状过度颜色抖动会让模型学不到有效特征。解决把ColorJitter的强度调低或者只用随机水平翻转和轻微旋转。常见做法是训练集用RandomResizedCropRandomHorizontalFlip验证集只做ResizeCenterCrop不要加任何随机变换。4.5 保存的模型加载后预测结果乱跳现象训练完保存模型重新加载做推理同一张图两次预测结果不一样。原因保存时没设model.eval()Dropout 和 BatchNorm 还在训练模式。解决推理前必须调model.eval()并且用with torch.no_grad():包住前向传播。另外保存 checkpoint 时推荐保存state_dict而不是整个模型对象避免 pickle 反序列化时的版本兼容问题。5. 从能跑到好用模型导出、界面集成与论文图表生成把模型训练到 90% 准确率只是第一步毕业设计还得有演示界面和论文素材。这一章讲两个进阶操作把 PyTorch 模型导出成 ONNX 方便部署以及用 Grad-CAM 生成热力图放进论文。5.1 导出 ONNX 并验证推理一致性ONNX 的好处是跨框架部署比如用 OpenCV 的 DNN 模块直接加载不依赖 PyTorch 环境。导出代码如下import torch import torch.onnx # 加载训练好的模型 model models.resnet18(weightsNone) model.fc nn.Linear(model.fc.in_features, num_classes) model.load_state_dict(torch.load(checkpoints/best_model.pth)) model.eval() # 构造一个示例输入batch_size13 通道224x224 dummy_input torch.randn(1, 3, 224, 224) # 导出 ONNX 模型 torch.onnx.export( model, dummy_input, pest_recognition.onnx, input_names[input], output_names[output], dynamic_axes{input: {0: batch_size}, output: {0: batch_size}}, opset_version11 )dynamic_axes参数让导出的模型支持动态 batch_size推理时可以一次传多张图。opset_version11是兼容性比较好的版本太低不支持某些算子太高有些推理引擎不认。导出后用onnxruntime验证一下输出是否和 PyTorch 一致import onnxruntime as ort import numpy as np sess ort.InferenceSession(pest_recognition.onnx) input_name sess.get_inputs()[0].name # 用同样的 dummy_input 做推理 onnx_output sess.run(None, {input_name: dummy_input.numpy()}) # 对比 PyTorch 输出 with torch.no_grad(): torch_output model(dummy_input).numpy() print(np.allclose(onnx_output[0], torch_output, atol1e-4))atol1e-4是允许的数值误差浮点运算在不同框架下会有微小差异只要在 1e-4 以内就算一致。如果差得远检查导出时是否漏了model.eval()。5.2 用 Grad-CAM 生成热力图放进论文论文里如果只有准确率表格会显得单薄加几张热力图能直观说明模型关注的是病斑区域而不是背景。Grad-CAM 的实现不复杂核心是拿到目标层的梯度并做全局平均池化。这里给一个精简版import cv2 import numpy as np import torch import torch.nn.functional as F class GradCAM: def __init__(self, model, target_layer): self.model model self.target_layer target_layer self.gradients None self.activations None # 注册钩子前向传播时保存特征图反向传播时保存梯度 target_layer.register_forward_hook(self.save_activation) target_layer.register_full_backward_hook(self.save_gradient) def save_activation(self, module, input, output): self.activations output.detach() def save_gradient(self, module, grad_input, grad_output): self.gradients grad_output[0].detach() def generate(self, input_tensor, class_idxNone): self.model.eval() output self.model(input_tensor) if class_idx is None: class_idx output.argmax(dim1).item() # 反向传播求目标类别的梯度 self.model.zero_grad() output[0, class_idx].backward() # 梯度做全局平均池化得到权重 weights self.gradients.mean(dim(2, 3), keepdimTrue) # 特征图加权求和 cam (weights * self.activations).sum(dim1, keepdimTrue) cam F.relu(cam) # 归一化到 0-1 cam cam - cam.min() cam cam / (cam.max() 1e-8) return cam.squeeze().cpu().numpy() # 使用示例target_layer 一般选 model.layer4 的最后一个 block grad_cam GradCAM(model, model.layer4[-1]) heatmap grad_cam.generate(input_tensor) # 把热力图叠加到原图上 img cv2.imread(test_leaf.jpg) img cv2.resize(img, (224, 224)) heatmap cv2.resize(heatmap, (224, 224)) heatmap np.uint8(255 * heatmap) heatmap cv2.applyColorMap(heatmap, cv2.COLORMAP_JET) overlay cv2.addWeighted(img, 0.6, heatmap, 0.4, 0) cv2.imwrite(gradcam_result.jpg, overlay)target_layer选model.layer4[-1]是因为这一层感受野足够大能覆盖整个叶片区域同时保留了空间信息。register_full_backward_hook在 PyTorch 1.8 之后替代了旧的register_backward_hook行为更稳定。生成的热力图红色区域就是模型判断为病害的关键区域如果红色集中在叶片边缘而不是病斑上说明模型可能学到了错误的特征需要回头检查数据增强或重新标注。从那以后我每次拿到一个新的分类项目都会先跑一遍 Grad-CAM 看模型到底在“看”哪里再决定要不要调数据增强策略。这个习惯帮我省了很多盲目调参的时间。希望这份资源能帮你把毕业设计顺利推下去少走几个我踩过的坑。本文还有配套的精品资源点击获取

相关新闻

PHP+MySQL仿中关村在线攒机平台源码:兼容性校验与配置单分享

PHP+MySQL仿中关村在线攒机平台源码:兼容性校验与配置单分享

简介:这份源码包是一套基于PHP与MySQL实现的仿中关村在线模拟攒机平台,面向具备一定Web开发基础、希望完整实践电商类配置选型系统的开发者与学习者。用户可按需选择CPU、内存、硬盘、显卡等硬件,生成配置清单并实时计算总价,覆盖…

2026/10/9 18:15:02 阅读更多 →
第四章:向量数据库:解锁Embeddings价值的钥匙——用TaoToken统一Key跑通Faiss与MTEB评测

第四章:向量数据库:解锁Embeddings价值的钥匙——用TaoToken统一Key跑通Faiss与MTEB评测

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

2026/10/9 18:13:58 阅读更多 →
外部群消息智能路由:消息分层处理与精准推送的完整实践

外部群消息智能路由:消息分层处理与精准推送的完整实践

做社群运营、客户支持或者项目协作的人,基本都经历过这种场景:一个外部协作群,从早到晚消息不停,重要信息被“收到”“1”“哈哈”层层淹没,等你想翻聊天记录找关键内容,往往已经翻了三百条还没到底。试过置…

2026/10/9 18:13:57 阅读更多 →

最新新闻

哈工大SSE第33题:5×5矩阵鞍点C语言实现详解

哈工大SSE第33题:5×5矩阵鞍点C语言实现详解

如果你正在刷哈工大 SSE 这套 C 语言编程练习,到第 33 题附近,大概率会撞上一个老熟脸:求 55 矩阵的鞍点。这道题说难不难,说简单也不简单,很多刚学完二维数组的同学会卡在这一题上。作为一个给 SSE 写过代码、也给学弟…

2026/10/10 20:49:33 阅读更多 →
零基础 4 小时学会用 AI 干实际工作:learn-opencode(OpenCode 中文实战课)完整学习路线图

零基础 4 小时学会用 AI 干实际工作:learn-opencode(OpenCode 中文实战课)完整学习路线图

文档教程 【免费下载链接】learn-opencode OpenCode 中文实战课源码与内容仓库:一课一页,覆盖入门到实战工作流。 项目地址: https://gitcode.com/gh_mirrors/le/learn-opencode 点击查看 免费下载 learn-opencode 是一门完全免费、开源的 O…

2026/10/10 20:49:33 阅读更多 →
Wolfram语言编程思维:从表达式到函数式,告别循环陷阱

Wolfram语言编程思维:从表达式到函数式,告别循环陷阱

先说一个我经常在群里看到的现象。很多人学过Python或者C语言之后,转来用Wolfram语言(也就是Mathematica),第一反应往往是:这个语言怎么连循环都写得这么别扭?其实不是Wolfram别扭,而是写这个语…

2026/10/10 20:49:33 阅读更多 →
旅游景点评论数据挖掘实战:从5万条评论中定位游客抱怨与改进点

旅游景点评论数据挖掘实战:从5万条评论中定位游客抱怨与改进点

简介:这份资源面向数据分析初学者与旅游行业从业者,围绕去哪儿网国庆期间景点数据展开实战演练,帮助读者掌握从数据清洗到业务洞察的完整分析流程。压缩包共7个文件,以5个html可视化页面为主,辅以1个xlsx原始数据表和1…

2026/10/10 20:49:33 阅读更多 →
LabVIEW目录压缩实战:基于7-Zip命令行的完整方案

LabVIEW目录压缩实战:基于7-Zip命令行的完整方案

做上位机开发的人应该都遇到过这种需求:把测试数据、日志、配置文件打包成压缩文件,好归档、好传输。LabVIEW的文件I/O函数能读写单个文件,但要说把整个目录压成一个zip包,翻遍函数面板也找不到现成的VI。这个功能说大不大&#x…

2026/10/10 20:49:33 阅读更多 →
MySQL二进制数据读写实战:BLOB字段选型、写入读取与避坑指南

MySQL二进制数据读写实战:BLOB字段选型、写入读取与避坑指南

做开发这些年,但凡跟文件打交道的业务,迟早会撞上一个问题:图片、PDF、序列化对象这些二进制数据,到底要不要直接塞进数据库?“Mysql实战——二进制数据读写”这个标题看着朴素,背后其实是数据库设计里一个…

2026/10/10 20:48:32 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/10 11:14: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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →