Python深度学习CNN水果识别系统实战:从数据集到部署全流程
简介这份资源是面向计算机相关专业学生与项目实战学习者的深度学习实战项目以Python结合CNN卷积神经网络实现水果图像识别可直接用于毕业设计、期末大作业或课程实践难度适中适合具备一定Python与机器学习基础、希望完整跑通一个图像分类项目的读者。压缩包共约2000个文件整体114.65MB以C与头文件为主配合HTML页面、Python脚本、Markdown与TXT说明文档以及答辩用PPT和PDF资料覆盖模型训练、界面展示与答辩汇报等环节。目前已有149人学习下载。项目源码经本地编译调试可正常运行并附有导师认可的高分答辩材料评审分达98分。读者可据此掌握CNN网络搭建、数据集处理、模型训练与识别效果验证的完整流程同时借助答辩PPT梳理设计思路与创新点为毕业设计答辩和项目复盘提供可直接参考的范例。1. 从一份毕业设计标题说起水果识别系统到底在做什么每年到了毕设选题季总有一批同学盯着「Python 基于深度学习 CNN 的水果识别系统」这个题目反复权衡。原因很直接它同时踩中了几个刚需——Python 入门门槛低、CNN 是深度学习里最经典的网络结构、水果分类的数据集又足够好找最后还能落成一个能演示、能答辩、能写进论文的完整系统。但真正动手之后翻车点往往不在模型本身而在数据怎么组织、训练怎么调、界面怎么接、答辩怎么讲。这个系统的本质是一个图像多分类任务输入一张水果照片输出它属于哪一类苹果、香蕉、橙子、草莓……。技术栈通常是 Python PyTorch 或 TensorFlow/Keras模型用卷积神经网络前端可能配一个 PyQt 或 Flask 的界面做演示。它适合两类人一类是第一次做完整深度学习项目的学生想走通「数据→训练→评估→部署」全流程另一类是有一定基础、想拿它当模板改造成蔬菜识别、垃圾分类、零件缺陷检测的从业者。下面我按实际做项目的顺序把这条链路拆开讲清楚包括每一步的参数、代码和踩过的坑。2. 数据集准备与目录结构别让脏数据毁掉整个训练2.1 水果数据集从哪来、怎么筛常见做法是先用公开数据集打底比如 Kaggle 上的 Fruits-360它包含一百多种水果、共几万张 100×100 的图片按类别分好文件夹拿来就能用。但直接全量训练并不划算类别太多会导致混淆严重而且毕设演示根本用不到一百类。我一般会先做一次类别裁剪挑 10 到 20 个外观差异明显、样本量均衡的类别比如苹果、香蕉、橙子、葡萄、西瓜、草莓、菠萝、芒果。筛选时重点看三件事每类样本数是否接近差距超过 5 倍就要警惕、图片是否有明显重复、背景是否过于单一。如果全是纯白背景模型学到的可能是背景而不是水果本身换一张真实场景照片就废了。所以最好混入一部分自然背景的图片或者做数据增强来补。目录结构建议直接按ImageFolder的约定来这样后面用 PyTorch 的datasets.ImageFolder一行就能加载dataset/ ├── train/ │ ├── apple/ # 每类一个文件夹 │ ├── banana/ │ ├── orange/ │ └── ... ├── val/ │ ├── apple/ │ └── ... └── test/ ├── apple/ └── ...训练集、验证集、测试集按 7:1.5:1.5 或 8:1:1 划分。注意验证集和测试集必须从同一批原始数据里随机切分不能拿网图单独凑否则评估结果会虚高。2.2 用 Python 做数据清洗和划分拿到原始数据后先跑一段脚本检查损坏图片和尺寸异常这一步能省掉后面训练时莫名其妙的报错import os from PIL import Image from pathlib import Path def check_images(root_dir): bad_files [] sizes {} for img_path in Path(root_dir).rglob(*.jpg): try: with Image.open(img_path) as im: im.verify() # 验证文件完整性 w, h im.size sizes.setdefault((w, h), 0) sizes[(w, h)] 1 except Exception as e: bad_files.append((str(img_path), str(e))) print(f损坏图片数量: {len(bad_files)}) for f, e in bad_files[:10]: print(f, e) # 打印尺寸分布判断是否需要统一缩放 for k, v in sorted(sizes.items(), keylambda x: -x[1])[:5]: print(f尺寸 {k}: {v} 张) check_images(dataset/raw)这段代码做两件事im.verify()会检查图片文件是否被截断或损坏损坏的直接列出来删掉统计尺寸分布是为了决定预处理策略。如果尺寸五花八门就在transforms里统一Resize到 224×224配合 ResNet 等预训练模型或 100×100自己搭小 CNN 时够用。参数上有个经验值输入尺寸不要小于 64×64否则细节丢失严重也不要盲目上 512×512显存和训练时间会成倍增长而水果分类这种任务 224 已经绰绰有余。2.3 数据增强小数据集的后悔药如果每类只有几百张必须做增强。常用的组合是随机水平翻转、随机旋转 ±15 度、颜色抖动、随机裁剪。用 torchvision 写出来是这样from torchvision import transforms train_tf transforms.Compose([ transforms.Resize((224, 224)), transforms.RandomHorizontalFlip(p0.5), # 水平翻转 transforms.RandomRotation(15), # 旋转 ±15 度 transforms.ColorJitter(0.2, 0.2, 0.2, 0.05), # 亮度/对比度/饱和度/色调 transforms.RandomResizedCrop(224, scale(0.8, 1.0)), # 随机裁剪 transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], # ImageNet 均值 [0.229, 0.224, 0.225]) # ImageNet 标准差 ]) val_tf transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ])注意验证集和测试集只做 Resize 和 Normalize绝不能加随机增强否则每次评估结果都在变没法比较。Normalize里的均值方差用 ImageNet 的统计值是常规操作即使你的数据集不是 ImageNet这样归一化也能加速收敛。如果自己从零训练且数据量很大可以换成自己数据集的均值方差但收益有限。3. CNN 模型搭建从自己写到迁移学习怎么选3.1 一个能跑通的最小 CNN 结构如果答辩要求「自己设计网络」那就搭一个 4 层卷积的小网络结构清晰、参数量可控在水果分类上准确率能到 90% 以上import torch import torch.nn as nn class FruitCNN(nn.Module): def __init__(self, num_classes10): super().__init__() self.features nn.Sequential( # 输入 3×224×224 nn.Conv2d(3, 32, kernel_size3, padding1), nn.BatchNorm2d(32), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), # 112×112 nn.Conv2d(32, 64, kernel_size3, padding1), nn.BatchNorm2d(64), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), # 56×56 nn.Conv2d(64, 128, kernel_size3, padding1), nn.BatchNorm2d(128), nn.ReLU(inplaceTrue), nn.MaxPool2d(2), # 28×28 nn.Conv2d(128, 256, kernel_size3, padding1), nn.BatchNorm2d(256), nn.ReLU(inplaceTrue), nn.AdaptiveAvgPool2d(1) # 全局平均池化 → 256×1×1 ) self.classifier nn.Sequential( nn.Dropout(0.5), nn.Linear(256, num_classes) ) def forward(self, x): x self.features(x) x torch.flatten(x, 1) return self.classifier(x)几个关键点每个卷积后接BatchNorm能让训练稳定很多尤其是学习率稍大的时候AdaptiveAvgPool2d(1)替代全连接层可以减少参数量、降低过拟合Dropout(0.5)放在分类头前面是标配。卷积核统一用 3×3、padding1这样每层卷积不改变空间尺寸只靠池化降采样逻辑简单不容易算错。3.2 迁移学习小数据集上的最优解如果数据量不大每类几百张自己搭网络很容易过拟合。这时候用预训练的 ResNet18 或 MobileNetV3只替换最后的全连接层效果通常比自建网络高 5 到 10 个百分点import torchvision.models as models import torch.nn as nn def build_resnet18(num_classes10, freeze_backboneTrue): model models.resnet18(weightsmodels.ResNet18_Weights.IMAGENET1K_V1) if freeze_backbone: # 冻结除 fc 外的所有参数 for param in model.parameters(): param.requires_grad False # 替换分类头 in_features model.fc.in_features model.fc nn.Sequential( nn.Dropout(0.3), nn.Linear(in_features, num_classes) ) return modelfreeze_backboneTrue时只训练最后的全连接层训练快、不容易过拟合适合数据量小于 5000 张的情况。如果数据量上万可以把freeze_backbone设为False做全网络微调但学习率要调小一般设成 1e-4 到 1e-5否则预训练权重会被冲掉。选 ResNet18 还是 MobileNetV3如果答辩演示要在普通笔记本上跑MobileNetV3 推理更快、模型更小如果追求准确率且机器还行ResNet18 更稳。两者在水果分类这种任务上差距不大别在这上面纠结太久。3.3 损失函数与优化器的参数怎么设多分类任务用交叉熵损失优化器首选 AdamW 或 SGD。AdamW 收敛快、对学习率不敏感适合新手SGD 配合动量在充分调参后泛化可能略好但需要调学习率调度。我一般这样配import torch.optim as optim model build_resnet18(num_classes10, freeze_backboneTrue) criterion nn.CrossEntropyLoss(label_smoothing0.1) # 标签平滑防过拟合 optimizer optim.AdamW( filter(lambda p: p.requires_grad, model.parameters()), lr1e-3, weight_decay1e-4 ) scheduler optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max30)label_smoothing0.1是个便宜好用的技巧能缓解模型对训练标签的过度自信验证集准确率通常能涨一两个点。weight_decay1e-4是 L2 正则化的实现防止权重过大。学习率调度用余弦退火30 个 epoch 内从 1e-3 平滑降到接近 0比固定学习率效果好。注意filter(lambda p: p.requires_grad, ...)这行冻结骨干时只把需要更新的参数传给优化器否则会报错或浪费计算。4. 训练、评估与推理把模型跑起来并验证它真的能用4.1 训练循环的骨架与关键参数训练循环本身不复杂但有几个地方容易写错。下面是一个完整可用的版本import torch from torch.utils.data import DataLoader from torchvision import datasets def train_one_epoch(model, loader, criterion, optimizer, device): model.train() total_loss, correct, total 0, 0, 0 for imgs, labels in loader: imgs, labels imgs.to(device), labels.to(device) optimizer.zero_grad() outputs model(imgs) loss criterion(outputs, labels) loss.backward() optimizer.step() total_loss loss.item() * imgs.size(0) preds outputs.argmax(dim1) correct (preds labels).sum().item() total imgs.size(0) return total_loss / total, correct / total torch.no_grad() def evaluate(model, loader, criterion, device): model.eval() total_loss, correct, total 0, 0, 0 for imgs, labels in loader: imgs, labels imgs.to(device), labels.to(device) outputs model(imgs) loss criterion(outputs, labels) total_loss loss.item() * imgs.size(0) correct (outputs.argmax(1) labels).sum().item() total imgs.size(0) return total_loss / total, correct / total # 主训练流程 device torch.device(cuda if torch.cuda.is_available() else cpu) train_ds datasets.ImageFolder(dataset/train, transformtrain_tf) val_ds datasets.ImageFolder(dataset/val, transformval_tf) train_loader DataLoader(train_ds, batch_size32, shuffleTrue, num_workers4) val_loader DataLoader(val_ds, batch_size32, shuffleFalse, num_workers4) model build_resnet18(num_classeslen(train_ds.classes)).to(device) criterion nn.CrossEntropyLoss(label_smoothing0.1) optimizer optim.AdamW(filter(lambda p: p.requires_grad, model.parameters()), lr1e-3, weight_decay1e-4) scheduler optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max30) best_acc 0 for epoch in range(30): tr_loss, tr_acc train_one_epoch(model, train_loader, criterion, optimizer, device) val_loss, val_acc evaluate(model, val_loader, criterion, device) scheduler.step() print(fEpoch {epoch1}: train_acc{tr_acc:.4f} val_acc{val_acc:.4f}) if val_acc best_acc: best_acc val_acc torch.save(model.state_dict(), best_model.pth)batch_size32是显存和稳定性的折中显存不够就降到 16 或 8但太小会导致 BatchNorm 统计不准。num_workers4在 Windows 上有时会出问题如果报错就改成 0。保存模型时存state_dict()而不是整个模型对象加载时更灵活也不容易因为类定义变化而失败。4.2 评估指标别只看准确率准确率在类别均衡时够用但如果某类样本特别少就要看混淆矩阵和每类召回率from sklearn.metrics import classification_report, confusion_matrix import numpy as np torch.no_grad() def get_all_preds(model, loader, device): model.eval() all_preds, all_labels [], [] for imgs, labels in loader: imgs imgs.to(device) preds model(imgs).argmax(1).cpu().numpy() all_preds.extend(preds) all_labels.extend(labels.numpy()) return np.array(all_preds), np.array(all_labels) preds, labels get_all_preds(model, val_loader, device) print(classification_report(labels, preds, target_namesval_ds.classes)) print(confusion_matrix(labels, preds))classification_report会给出每类的 precision、recall、f1-score。如果某类 recall 明显低说明模型把它和别的类搞混了去看混淆矩阵是哪两类在互相误判再针对性补数据或调整增强策略。这一步在答辩时很加分因为能说明你不只是跑了个数字而是真的分析了模型行为。4.3 单张图片推理与界面接入训练完之后推理脚本要能加载模型、处理单张图片、输出类别和置信度from PIL import Image import torch.nn.functional as F def predict(image_path, model, class_names, device): model.eval() img Image.open(image_path).convert(RGB) tensor val_tf(img).unsqueeze(0).to(device) # 增加 batch 维度 with torch.no_grad(): logits model(tensor) probs F.softmax(logits, dim1)[0] conf, idx probs.max(0) return class_names[idx.item()], conf.item() class_names train_ds.classes label, conf predict(test.jpg, model, class_names, device) print(f预测: {label}, 置信度: {conf:.4f})val_tf必须和验证集用同一套预处理否则输入分布不一致预测会乱。unsqueeze(0)是补上 batch 维度因为模型期望输入是[N, C, H, W]。如果要做 PyQt 界面把predict函数包一层按钮点击时调用、把结果贴到 label 上就行界面代码不是难点别在这上面花太多时间。5. 避坑与排查那些让准确率上不去、演示翻车的真实原因5.1 训练准确率很高但验证准确率上不去现象训练集准确率冲到 99%验证集卡在 70% 左右不动。原因通常是过拟合或者训练集和验证集分布不一致。先检查验证集是不是从同一批数据里切的如果验证集全是网图、训练集全是白底图那模型学的是背景。解决办法统一数据来源加数据增强加 Dropout 和 weight_decay或者冻结骨干只训练分类头。如果这些做完还不行就是数据量太小考虑用预训练模型或收集更多数据。5.2 损失变成 NaN现象训练几个 batch 后 loss 突然变成 nan。原因一般是学习率太大、数据里有脏样本比如全黑图或标签越界、或者除零。排查顺序先把学习率降到 1e-4 试一轮再用前面的check_images脚本扫一遍数据最后检查label_smoothing和CrossEntropyLoss的输入维度是否匹配。如果用了混合精度训练NaN 概率会更高新手建议先关掉 AMP。5.3 类别不平衡导致某些类几乎不被识别现象苹果识别很准草莓几乎全错。原因就是草莓样本太少模型倾向于预测多数类。解决办法有三条一是对少数类做额外增强旋转、裁剪、颜色抖动拉满二是用WeightedRandomSampler让少数类被采样到的概率提高三是在损失函数里给少数类更高权重。最省事的是第二条from torch.utils.data import WeightedRandomSampler import numpy as np targets [s[1] for s in train_ds.samples] class_counts np.bincount(targets) weights 1.0 / class_counts[targets] sampler WeightedRandomSampler(weights, num_sampleslen(weights), replacementTrue) train_loader DataLoader(train_ds, batch_size32, samplersampler, num_workers4)注意用了sampler就不能再设shuffleTrue两者互斥。5.4 换一台机器演示就报错现象自己电脑上跑得好好的答辩教室的电脑一跑就崩。原因通常是路径写死、缺少依赖、或者 CUDA 版本不匹配。血泪经验答辩前一定在目标机器上完整跑一遍把模型保存成state_dict并单独存一份class_names用 json 或 txt推理脚本里不要依赖训练时的目录结构。如果教室机器没有 GPU提前把模型转到 CPU 上测一遍torch.load(map_locationcpu)这个参数别忘了。5.5 答辩 PPT 里只放准确率被问细节答不上来现象老师问「为什么选 ResNet18 不选 VGG」「数据增强具体加了哪些」「混淆矩阵里哪两类最容易混」答不上来就很尴尬。解决办法PPT 里除了最终准确率至少放一张训练/验证 loss 曲线、一张混淆矩阵、一张数据增强示例图。每个选择都准备一句理由比如「选 ResNet18 是因为它有残差连接、训练稳定且参数量比 VGG 小适合我们这种数据规模」。这些内容在论文里也要有对应段落别只贴代码。6. 进阶技巧把准确率再往上推一推的实操手段如果基础版本已经跑通、准确率到了 92% 左右想再往上走可以试下面几个手段按性价比排序。第一是测试时增强TTA。推理时对同一张图做多次变换原图、水平翻转、不同裁剪把预测概率平均。代码不复杂效果通常能涨 1 到 2 个点torch.no_grad() def predict_tta(image_path, model, class_names, device): model.eval() img Image.open(image_path).convert(RGB) tta_transforms [ val_tf, transforms.Compose([transforms.Resize((224, 224)), transforms.RandomHorizontalFlip(p1.0), transforms.ToTensor(), transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])]) ] probs torch.zeros(len(class_names)).to(device) for tf in tta_transforms: tensor tf(img).unsqueeze(0).to(device) probs F.softmax(model(tensor), dim1)[0] probs / len(tta_transforms) conf, idx probs.max(0) return class_names[idx.item()], conf.item()第二是模型集成。训练 ResNet18 和 MobileNetV3 两个模型推理时把 softmax 概率相加再取 argmax。代价是推理时间翻倍但准确率通常能再涨 2 个点左右。如果答辩允许这是个很稳的加分项。第三是错误分析驱动补数据。把验证集里预测错的样本全部导出来人工看它们错在哪是光照太暗、角度太偏、还是两类长得确实像。然后针对性补这类样本比盲目加数据有效得多。我一般会写个脚本把错分样本复制到单独文件夹按「真实类_预测类」命名一眼就能看出问题。最后说个习惯每次改完参数或结构都在验证集上跑一遍并记录结果用一个简单的 csv 或表格记下「改动内容、验证准确率、备注」。不然改到后面自己都忘了哪版最好只能从头再跑那种感觉比调参本身还折磨。这套流程走下来一个能演示、能答辩、能写进论文的水果识别系统就成型了后面换成蔬菜、花卉、零件改的只是数据集和类别数。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

百家CMS黑盒测试实战:从用例设计到缺陷提交全流程

百家CMS黑盒测试实战:从用例设计到缺陷提交全流程

接到“百家cms 黑盒测试”这个任务时,我第一反应不是翻源码,而是把系统装进测试环境,像普通网站管理员一样从登录页开始点。黑盒测试说白了,就是不关心系统内部用的是什么语言、表结构怎么设计、代码里有没有注释,只看…

2026/10/11 2:25:01 阅读更多 →
通达OA 2017授权机制解析与合法注册重建指南

通达OA 2017授权机制解析与合法注册重建指南

简介:本资源提供通达OA 2017版本的注册与授权支持文件,面向企业信息化管理员、OA系统实施人员及二次开发技术人员,用于解决正版授权受限、部署次数受限或功能模块被锁定等实际运维问题。压缩包共5个文件,含2个关键.dat授权数据文件…

2026/10/11 2:24:01 阅读更多 →
论文压缩包文件处理指南:命令行解压、编码转换与损坏修复

论文压缩包文件处理指南:命令行解压、编码转换与损坏修复

简介:面向FPGA脉压工程学习者的完整工程包,由作者在先前分享基础上补齐遗漏内容后重新整理发布,适合需要仿真验证、阅读工程代码与进阶实践的开发者和学生。压缩包共739个文件、约176.42MB,类型覆盖VHDL/Verilog源码(v…

2026/10/11 2:24:01 阅读更多 →

最新新闻

宽温磁环电感-40℃到150℃温冲后EMC失效的机理与验证流程

宽温磁环电感-40℃到150℃温冲后EMC失效的机理与验证流程

/* 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 3:08:24 阅读更多 →
BGP选路实战:四大属性调优实验与验证方法

BGP选路实战:四大属性调优实验与验证方法

相信点开这篇文章的朋友,八成都是被BGP那十几条选路规则折磨过的。我在刚接触BGP的时候也是一样,拿着文档死记硬背“优先选Weight、然后Local Preference、然后AS路径短……”可一到实际设备上,show完路由表就懵了——明明配置了MED&#xff…

2026/10/11 3:08:24 阅读更多 →
车内视角行人识别数据集与YOLOv8训练实战指南

车内视角行人识别数据集与YOLOv8训练实战指南

简介:车内视角行人识别数据集是一份面向目标检测与深度学习从业者的专用数据资源,基于BDD100K筛选并保留行人类别,图片数量共6470张,适合用于YOLO系列、Faster RCNN、SSD等模型的训练与评估。压缩包体积约421.52MB,包含…

2026/10/11 3:08:24 阅读更多 →
基于CNN的Landsat遥感影像地物分类实战与避坑指南

基于CNN的Landsat遥感影像地物分类实战与避坑指南

简介:面向遥感地物分类应用场景,该资源提供基于卷积神经网络的Landsat影像地物分类Python源码与项目说明,适合遥感科学与技术、地理信息科学、计算机视觉等专业方向学生用于课程设计、毕业设计或科研入门。压缩包内共10个文件,包含…

2026/10/11 3:08:24 阅读更多 →
iText7高清PNG转PDF:DPI设置、无损编码与Alpha通道保留指南

iText7高清PNG转PDF:DPI设置、无损编码与Alpha通道保留指南

简介:本资源是一份面向Java开发者的iText图片转PDF实战教程,聚焦解决将PNG等图像高质量生成PDF的常见需求,适用于需要文档导出、报告生成或打印适配的后端开发与工具类项目。压缩包共11个文件,含2个核心jar包(含iText.…

2026/10/11 3:08:24 阅读更多 →
Keil C51 9.61安装配置与LED点灯:51单片机入门完整教程

Keil C51 9.61安装配置与LED点灯:51单片机入门完整教程

/* 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 3:07:23 阅读更多 →

日新闻

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