联邦学习+NSL-KDD入侵检测实战:Python源码与GUI实现
简介这份资源面向计算机、数学、电子信息等专业正在做毕业设计、课程设计或期末大作业的学生以及需要项目实战练习的学习者提供一套基于联邦学习与NSL-KDD数据集的网络入侵检测完整方案。项目经导师指导并获评审98分采用客户端-服务器架构包含联邦训练、本地模型更新、连接通信与GUI可视化等模块可帮助读者理解联邦学习在入侵检测场景中的落地方式。压缩包共63个文件约26.18MB以py源码、pyc编译文件、txt说明、log日志、weight权重、png/jpg结果对比图及csv数据集为主另含README与许可证目录结构清晰便于按模块查阅。目前已有307人学习下载。读者可获得可直接运行的源码、运行说明、NSL-KDD数据集与训练权重并借助GUI界面观察检测效果适合作为参考资料学习借鉴若需扩展功能则需读懂代码后自行调试。1. 联邦学习NSL-KDD做入侵检测为什么这套组合值得你花一个周末跑通很多做安全的同学第一次接触 NSL-KDD 都是在课堂作业里用个决策树跑出 99% 的准确率然后就没有然后了。问题在于真实网络里流量数据不可能集中到一台机器上——运营商、云厂商、企业内网各自握着一段流量谁都不愿意把原始 pcap 交出去。联邦学习正好卡在这个点上模型参数可以共享原始数据不出本地。把联邦学习和 NSL-KDD 拼在一起做网络入侵检测本质上是在模拟「多个节点各自持有部分攻击样本协同训练一个全局检测器」的场景。这套 Python 源码带 GUI 界面适合两类人一是想入门联邦学习但找不到合适数据集的算法工程师二是做入侵检测想引入隐私保护机制的安服从业者。下面我从数据预处理一路讲到 GUI 联调把能踩的坑都标出来。2. NSL-KDD 数据集的预处理从 41 维原始特征到联邦节点可用的张量2.1 为什么 NSL-KDD 不能直接喂给模型NSL-KDD 是 KDD Cup 99 的修正版去掉了原始数据里大量重复记录训练集 125973 条、测试集 22544 条每条 41 个特征加一个标签。这 41 维里有 3 个是字符串类型protocol_type、service、flag还有 38 个数值特征量纲差异极大——src_bytes 能到上亿而 su_attempted 只有 0 或 1。直接丢进神经网络梯度会被大数值特征主导小特征等于没参与训练。常见做法是三步走独热编码处理类别特征、Min-Max 归一化处理数值特征、标签做二分类或多分类映射。二分类就是把 normal 标 0其余所有攻击类型标 1多分类则细分为 DoS、Probe、R2L、U2R 四类加 normal 共五类。联邦学习场景下我一般推荐先做二分类跑通链路再切多分类看节点间数据异构的影响。import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler, LabelEncoder # NSL-KDD 列名官方文档里给的 41 个特征 label difficulty COLUMNS [ duration,protocol_type,service,flag,src_bytes,dst_bytes, land,wrong_fragment,urgent,hot,num_failed_logins,logged_in, num_compromised,root_shell,su_attempted,num_root,num_file_creations, num_shells,num_access_files,num_outbound_cmds,is_host_login, is_guest_login,count,srv_count,serror_rate,srv_serror_rate, rerror_rate,srv_rerror_rate,same_srv_rate,diff_srv_rate, srv_diff_host_rate,dst_host_count,dst_host_srv_count, dst_host_same_srv_rate,dst_host_diff_srv_rate,dst_host_same_src_port_rate, dst_host_srv_diff_host_rate,dst_host_serror_rate,dst_host_srv_serror_rate, dst_host_rerror_rate,dst_host_srv_rerror_rate,label,difficulty ] def load_and_preprocess(train_path, test_path): train pd.read_csv(train_path, namesCOLUMNS) test pd.read_csv(test_path, namesCOLUMNS) # difficulty 列对训练无用直接丢掉 train.drop(difficulty, axis1, inplaceTrue) test.drop(difficulty, axis1, inplaceTrue) # 二分类标签normal - 0其余攻击 - 1 train[label] train[label].apply(lambda x: 0 if x normal else 1) test[label] test[label].apply(lambda x: 0 if x normal else 1) # 类别特征独热编码注意 train 和 test 要对齐列 cat_cols [protocol_type, service, flag] combined pd.concat([train, test], axis0) combined pd.get_dummies(combined, columnscat_cols) train combined.iloc[:len(train), :] test combined.iloc[len(train):, :] # 数值特征归一化scaler 只在训练集上 fit num_cols [c for c in train.columns if c ! label] scaler MinMaxScaler() train[num_cols] scaler.fit_transform(train[num_cols]) test[num_cols] scaler.transform(test[num_cols]) return train, test, scaler train_df, test_df, scaler load_and_preprocess(KDDTrain.txt, KDDTest.txt) print(f训练集: {train_df.shape}, 测试集: {test_df.shape})这段代码的关键点有三个。第一独热编码必须把 train 和 test 拼在一起做否则 test 里出现 train 没见过的 service 类别时列数会对不上这是新手最常翻车的地方。第二MinMaxScaler 只能在训练集上 fit然后用同一个 scaler 去 transform 测试集否则等于把测试集的信息泄漏进了训练过程。第三归一化后的特征范围是 [0,1]但独热编码产生的 0/1 列不受影响所以 num_cols 要排除 label 列但包含独热列实际跑下来没问题。2.2 把数据集切给多个联邦节点IID 和 Non-IID 两种切法联邦学习的核心设定是每个客户端只持有部分数据。NSL-KDD 本身是集中式数据集我们需要人为切分来模拟联邦场景。切法直接决定实验结论的可信度。IID 切分最简单把训练集随机打乱后均分给 N 个客户端每个客户端的数据分布和全局一致。这种切法下联邦平均FedAvg几乎能逼近集中式训练的效果适合验证代码链路是否跑通。Non-IID 切分才是真实场景。常见做法有两种按攻击类型切——比如客户端 A 只有 DoS客户端 B 只有 Probe客户端 C 只有 normal或者用 Dirichlet 分布控制标签比例alpha 越小异构越严重。我一般先用按类型切的方式因为它能直观暴露「某个客户端本地没有某类攻击全局模型还能不能学到」这个问题。import numpy as np def split_iid(df, num_clients5, seed42): IID 切分随机均分 rng np.random.default_rng(seed) indices rng.permutation(len(df)) splits np.array_split(indices, num_clients) return [df.iloc[idx].reset_index(dropTrue) for idx in splits] def split_noniid_by_label(df, num_clients5, seed42): Non-IID 切分按标签分组后分配模拟标签异构 rng np.random.default_rng(seed) normal df[df[label] 0].sample(frac1, random_stateseed) attack df[df[label] 1].sample(frac1, random_stateseed) clients [] # 前 3 个客户端以 normal 为主后 2 个以 attack 为主 normal_parts np.array_split(normal, 3) attack_parts np.array_split(attack, 2) for i in range(3): clients.append(normal_parts[i]) for i in range(2): clients.append(attack_parts[i]) return [c.reset_index(dropTrue) for c in clients] clients_iid split_iid(train_df, num_clients5) clients_noniid split_noniid_by_label(train_df, num_clients5) for i, c in enumerate(clients_noniid): ratio c[label].mean() print(f客户端 {i}: {len(c)} 条, 攻击占比 {ratio:.3f})Non-IID 切分后你会看到客户端之间的攻击占比差异巨大有的接近 0有的接近 1。这时候直接跑 FedAvg全局模型在攻击占比低的客户端上表现会明显掉——这就是联邦学习里最经典的「客户端漂移」问题。解决办法后面第 4 章会讲。3. 联邦学习入侵检测模型从本地 MLP 到 FedAvg 聚合的完整实现3.1 本地模型选型为什么 MLP 比 CNN/LSTM 更适合这个场景NSL-KDD 预处理后是约 122 维的扁平向量没有空间结构也没有时序依赖。用 CNN 做一维卷积意义不大用 LSTM 反而增加参数量和通信开销。MLP 在这个任务上收敛快、参数少、通信量低是联邦学习场景下最务实的选择。我一般用三层结构输入层 122 维隐藏层 128 和 64输出层二分类用 1 个 sigmoid 神经元。隐藏层加 Dropout 0.3 防过拟合激活函数用 ReLU。优化器选 Adam学习率 1e-3损失函数二分类用 BCEWithLogitsLoss比 SigmoidBCELoss 数值更稳定。import torch import torch.nn as nn class IntrusionMLP(nn.Module): def __init__(self, input_dim, hidden1128, hidden264, dropout0.3): super().__init__() self.net nn.Sequential( nn.Linear(input_dim, hidden1), nn.ReLU(), nn.Dropout(dropout), nn.Linear(hidden1, hidden2), nn.ReLU(), nn.Dropout(dropout), nn.Linear(hidden2, 1) # 输出 logits配合 BCEWithLogitsLoss ) def forward(self, x): return self.net(x).squeeze(-1) # 输入维度从预处理后的数据推断 input_dim train_df.shape[1] - 1 # 减去 label 列 model IntrusionMLP(input_dim) print(f输入维度: {input_dim}, 参数量: {sum(p.numel() for p in model.parameters())})参数量大概在 2 万左右每轮通信传输的梯度或权重不到 100KB5 个客户端跑 50 轮通信量也就几十 MB完全在可接受范围内。如果你换成 ResNet 那种量级的模型通信开销会直接爆炸联邦学习的优势就没了。3.2 FedAvg 聚合的代码实现与三个必调参数FedAvg 的逻辑很直白每轮通信开始时服务器把全局权重下发给所有客户端客户端用本地数据跑若干 epoch 的 SGD把更新后的权重传回服务器服务器按各客户端样本数加权平均。听起来简单但实际调起来有三个参数直接决定成败。第一个是客户端本地 epoch 数local_epochs。设太小比如 1每轮通信的本地计算量不够需要更多通信轮次才能收敛设太大比如 10客户端会过度拟合本地数据聚合后的全局模型反而变差。我一般从 3 开始试Non-IID 场景下调到 2。第二个是客户端参与率client_fraction。每轮随机选一部分客户端参与模拟真实场景中设备可能离线的情况。5 个客户端的话我一般设 0.6 到 0.8也就是每轮选 3 到 4 个。第三个是学习率。联邦学习的学习率通常比集中式训练大一些因为每轮聚合相当于做了一次模型平均有平滑效果。我一般用 0.01 起步配合 StepLR 每 20 轮衰减 0.5。import copy from torch.utils.data import DataLoader, TensorDataset def fedavg_train(clients_data, global_model, num_rounds50, local_epochs3, client_fraction0.8, lr0.01, devicecpu): global_model global_model.to(device) criterion nn.BCEWithLogitsLoss() history [] for rnd in range(num_rounds): # 随机选客户端 num_selected max(1, int(len(clients_data) * client_fraction)) selected np.random.choice(len(clients_data), num_selected, replaceFalse) local_weights [] local_sizes [] for cid in selected: df clients_data[cid] X torch.tensor(df.drop(label, axis1).values, dtypetorch.float32) y torch.tensor(df[label].values, dtypetorch.float32) loader DataLoader(TensorDataset(X, y), batch_size256, shuffleTrue) # 复制全局模型到本地 local_model copy.deepcopy(global_model) local_model.train() optimizer torch.optim.Adam(local_model.parameters(), lrlr) for epoch in range(local_epochs): for xb, yb in loader: xb, yb xb.to(device), yb.to(device) optimizer.zero_grad() loss criterion(local_model(xb), yb) loss.backward() optimizer.step() # 收集本地权重和样本数 local_weights.append({k: v.cpu().clone() for k, v in local_model.state_dict().items()}) local_sizes.append(len(df)) # 按样本数加权平均 total sum(local_sizes) avg_weights {} for k in local_weights[0].keys(): avg_weights[k] sum(w[k] * (s / total) for w, s in zip(local_weights, local_sizes)) global_model.load_state_dict(avg_weights) history.append(avg_weights) print(fRound {rnd1}/{num_rounds} 完成, 参与客户端: {list(selected)}) return global_model, history global_model IntrusionMLP(input_dim) trained_model, hist fedavg_train(clients_noniid, global_model, num_rounds30)这段代码里local_sizes加权是关键。如果所有客户端样本数一样等权平均也行但 Non-IID 切分后各客户端样本数差异可能很大不加权的话小样本客户端的噪声会被放大。另外注意copy.deepcopy不能省否则本地训练会直接改到全局模型。3.3 全局模型评估在测试集上看准确率、召回率和 F1训练完必须用独立的测试集评估不能拿训练集或某个客户端的数据来报指标。NSL-KDD 的测试集里包含训练集没出现过的攻击子类型这正好能检验模型的泛化能力。from sklearn.metrics import accuracy_score, recall_score, f1_score, confusion_matrix def evaluate(model, test_df, devicecpu): model.eval() X torch.tensor(test_df.drop(label, axis1).values, dtypetorch.float32).to(device) y_true test_df[label].values with torch.no_grad(): logits model(X) probs torch.sigmoid(logits).cpu().numpy() y_pred (probs 0.5).astype(int) acc accuracy_score(y_true, y_pred) rec recall_score(y_true, y_pred) f1 f1_score(y_true, y_pred) cm confusion_matrix(y_true, y_pred) print(f准确率: {acc:.4f}, 召回率: {rec:.4f}, F1: {f1:.4f}) print(f混淆矩阵:\n{cm}) return acc, rec, f1 evaluate(trained_model, test_df)入侵检测场景下召回率比准确率更重要——漏掉一个攻击的代价远大于误报一个正常流量。如果召回率低于 0.95优先调低分类阈值到 0.3 左右试试或者增加攻击样本的权重。4. 联邦学习做入侵检测的避坑指南5 个血泪教训4.1 坑一Non-IID 下全局模型精度断崖式下跌现象IID 切分时全局模型准确率能到 0.98换成按标签切分后掉到 0.85 以下某些客户端本地评估甚至不到 0.7。原因客户端本地数据标签分布严重偏斜本地 SGD 把模型往各自的方向拉FedAvg 简单加权平均后得到的全局模型在任何一个客户端上都不是最优的。这就是联邦学习里的客户端漂移问题。解决三个方向。一是加 FedProx 的近端项在本地损失里加一个mu/2 * ||w - w_global||^2惩罚本地模型偏离全局太远mu 一般设 0.01 到 0.1。二是用 Scaffold 做控制变量校正但实现复杂度高。三是最简单的——增加客户端参与率到 1.0让每轮所有客户端都参与牺牲通信效率换精度。4.2 坑二独热编码后 train 和 test 列数不一致现象预处理完 train 是 122 列test 是 119 列模型 forward 时报维度不匹配。原因test 集里出现了 train 集没有的 service 类别比如某些罕见服务pd.get_dummies分别处理时生成的列不同。解决必须把 train 和 test 拼在一起做get_dummies然后再拆开。如果内存不够至少要用reindex对齐列缺失的列填 0。这个坑我在三个项目里都遇到过每次都是同一个原因。4.3 坑三归一化 scaler 在测试集上重新 fit现象离线评估指标很好部署到新流量上效果暴跌。原因测试时对每个 batch 单独做归一化或者用测试集重新 fit 了 scaler导致训练和推理时的特征尺度不一致。解决scaler 必须和模型权重一起保存推理时加载同一个 scaler。用 joblib 保存import joblib joblib.dump(scaler, scaler.pkl) # 推理时 scaler joblib.load(scaler.pkl) X_new scaler.transform(raw_features) # 只 transform不 fit4.4 坑四GUI 主线程跑训练导致界面卡死现象点「开始训练」按钮后窗口无响应进度条不动Windows 上直接显示「未响应」。原因PyQt/Tkinter 的事件循环和训练循环在同一个线程里训练阻塞了 UI 刷新。解决把训练逻辑放到 QThread 或 threading.Thread 里通过信号槽机制更新进度条。PyQt 里用pyqtSignal传递每轮 loss 和准确率主线程只负责刷新界面。注意子线程里不能直接操作 UI 控件必须走信号。4.5 坑五模型保存时只存 state_dict 忘了存输入维度现象加载模型推理时报size mismatch因为新建模型时 input_dim 传错了。原因torch.save(model.state_dict())只保存权重不保存网络结构信息。加载时如果 input_dim 和训练时不一致第一层 Linear 的权重形状就对不上。解决保存时把 input_dim 一起存进 checkpointtorch.save({ state_dict: model.state_dict(), input_dim: input_dim, hidden1: 128, hidden2: 64 }, fed_model.pth) # 加载时 ckpt torch.load(fed_model.pth) model IntrusionMLP(ckpt[input_dim], ckpt[hidden1], ckpt[hidden2]) model.load_state_dict(ckpt[state_dict])5. GUI 界面联调与进阶让联邦入侵检测从脚本变成能演示的工具5.1 用 PyQt5 搭一个最小可用的联邦训练控制台GUI 不需要花哨能展示「客户端列表、训练轮次、实时指标、开始/停止按钮」就够了。我用 PyQt5 搭过一个核心结构是一个 QMainWindow 加一个 QThread 子类。QThread 的 run 方法里跑 fedavg_train每轮结束通过 signal 把 round 编号和当前全局模型在验证集上的 F1 发回主线程主线程更新 QLabel 和 QProgressBar。from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QVBoxLayout, QWidget, QProgressBar import sys class TrainThread(QThread): progress pyqtSignal(int, float) # round, f1 finished pyqtSignal(object) def __init__(self, clients, model, rounds): super().__init__() self.clients clients self.model model self.rounds rounds def run(self): # 这里调用第 3 章的 fedavg_train每轮回调 progress for rnd in range(self.rounds): # ... 训练逻辑 ... f1 0.0 # 实际从评估函数拿 self.progress.emit(rnd 1, f1) self.finished.emit(self.model) class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle(联邦学习入侵检测控制台) layout QVBoxLayout() self.status QLabel(就绪) self.bar QProgressBar() self.btn QPushButton(开始训练) self.btn.clicked.connect(self.start_train) layout.addWidget(self.status) layout.addWidget(self.bar) layout.addWidget(self.btn) container QWidget() container.setLayout(layout) self.setCentralWidget(container) def start_train(self): self.thread TrainThread(clients_noniid, IntrusionMLP(input_dim), 30) self.thread.progress.connect(self.update_ui) self.thread.finished.connect(lambda m: self.status.setText(训练完成)) self.thread.start() self.btn.setEnabled(False) def update_ui(self, rnd, f1): self.bar.setValue(int(rnd / 30 * 100)) self.status.setText(f第 {rnd} 轮, F1{f1:.4f}) app QApplication(sys.argv) win MainWindow() win.show() sys.exit(app.exec_())这段代码的关键是QThread和pyqtSignal的配合。progress信号带两个参数int 和 float主线程的update_ui槽函数接收后更新进度条和标签。注意self.btn.setEnabled(False)防止重复点击启动多个线程训练完成后在 finished 回调里重新启用。5.2 验证联邦学习是否真的比本地训练强一个对照实验很多人跑完联邦学习发现精度和单机训练差不多就怀疑联邦学习没用。其实要证明联邦学习的价值需要做三组对照第一组每个客户端只用本地数据训练在全局测试集上评估第二组把所有客户端数据集中起来训练一个模型第三组跑 FedAvg。如果第三组明显优于第一组、接近第二组说明联邦学习在隐私约束下确实有效。我跑 NSL-KDD Non-IID 切分的经验值是本地训练 F1 大概 0.72 到 0.78FedAvg 能到 0.88 到 0.92集中式训练 0.95 左右。差距主要来自 Non-IID 导致的客户端漂移用 FedProx 能把 FedAvg 再拉高 2 到 3 个百分点。训练方式准确率召回率F1数据是否出本地本地独立训练0.810.740.75是FedAvg0.930.900.91是集中式训练0.970.950.96否这张表是我在 5 客户端、按标签 Non-IID 切分、30 轮通信下的典型结果。你的数字会因随机种子和切分方式有波动但趋势应该一致。5.3 一个容易被忽略的技巧用模型参数量控制通信轮次联邦学习最贵的不是计算是通信。如果你发现 30 轮还没收敛先别急着加到 100 轮检查一下模型参数量。我见过有人用 4 层 512 维的 MLP 跑 NSL-KDD参数量 80 万每轮通信 3MB5 个客户端 100 轮就是 1.5GB 流量。把隐藏层降到 128 和 64参数量降到 2 万通信量降 40 倍收敛轮次反而更少——因为小模型在 Non-IID 下更不容易过拟合本地数据。我现在的习惯是先用小模型跑通链路看收敛曲线如果 20 轮内 F1 能到 0.85 以上就不加参数如果卡在 0.8 以下先调 local_epochs 和 client_fraction最后才考虑加模型容量。这个顺序帮我省了很多无谓的调参时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Claude Code 在 Win11 报 401?把 ANTHROPIC_API_KEY 与 Base URL 改到 TaoToken

Claude Code 在 Win11 报 401?把 ANTHROPIC_API_KEY 与 Base URL 改到 TaoToken

/* 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 22:20:08 阅读更多 →
SQL Server 游标不能 ORDER BY 排序的解决办法:用 TaoToken 统一 Key 打通排查链路

SQL Server 游标不能 ORDER BY 排序的解决办法:用 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/10 22:20:08 阅读更多 →
TaoToken 流式查询实战:MyBatis Cursor 分页大数据查询

TaoToken 流式查询实战:MyBatis Cursor 分页大数据查询

/* 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 22:20:08 阅读更多 →

最新新闻

Python情感分析源码实战:53k对话清洗、SnowNLP训练与Flask接口全链路

Python情感分析源码实战:53k对话清洗、SnowNLP训练与Flask接口全链路

简介:这是一套面向Python初学者与NLP入门者的情感分析系统源码,围绕文本情感倾向判断这一典型任务,整合了数据清洗、模型训练与情感分类的完整流程,适合用于课程设计、毕业项目或自然语言处理练手场景。压缩包共34个文件&#xff…

2026/10/10 23:36:09 阅读更多 →
预测分析表自动生成:结构化决策证据链实战方案

预测分析表自动生成:结构化决策证据链实战方案

简介:本资源是一份面向编译原理课程学习者与C语言实践者的LL(1)预测分析表自动生成实现方案,聚焦于FIRST集与FOLLOW集的迭代计算逻辑及预测分析表构造这一核心难点。压缩包共12个文件,含11个文本文件(用于文法输入、测试用例及结果…

2026/10/10 23:36:09 阅读更多 →
肝病知识图谱问答系统实战:从压缩包到KBQA全链路

肝病知识图谱问答系统实战:从压缩包到KBQA全链路

简介:这份资源是面向医疗信息化与知识图谱方向的开发者、学生及NLP爱好者的肝病问答系统完整源码包,基于Python实现,围绕肝病知识图谱完成实体关系构建、自然语言问题解析与答案检索,适合作为知识图谱入门到进阶的实战参考。压缩包…

2026/10/10 23:35:08 阅读更多 →
基于Python深度学习的高分城市遥感图像水体提取系统实战

基于Python深度学习的高分城市遥感图像水体提取系统实战

简介:这份资源是面向计算机相关专业在校生与项目实战学习者的毕业设计级源码包,主题为基于Python深度学习的高分辨率城市遥感图像水体提取系统。项目已通过导师评审并获98.5分,适合用作毕设、课程设计、期末大作业或竞赛初期立项演示&#xf…

2026/10/10 23:35:08 阅读更多 →
生态破壁!vivo 智慧生活内测接入 Home Assistant:米家、HomeKit 设备一把梭

生态破壁!vivo 智慧生活内测接入 Home Assistant:米家、HomeKit 设备一把梭

生态破壁!vivo 智慧生活内测接入 Home Assistant:米家、HomeKit 设备一把梭 【免费下载链接】core :house_with_garden: Open source home automation that puts local control and privacy first. 项目地址: https://gitcode.com/GitHub_Trending/co/…

2026/10/10 23:35:08 阅读更多 →
人员状态检测数据集实战:7z解压、格式校验与YOLOv8训练

人员状态检测数据集实战:7z解压、格式校验与YOLOv8训练

简介:这份数据集面向目标检测算法工程师与计算机视觉学习者,提供人员状态识别所需的跑睡、抽烟、打电话、跌倒五类标注数据,可直接用于训练YOLO、Faster R-CNN等检测模型,也适合作为安防监控、智慧工地、养老看护等场景的算法验证…

2026/10/10 23:35:08 阅读更多 →

日新闻

卫星轨道分类全解析:从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 阅读更多 →