Mediapipe 3D骨架 + KNN 跌倒检测实现
简介面向智能医疗、养老监护与计算机视觉初学者这份资源是一套完整的跌倒检测实战项目基于Mediapipe提取人体3D骨架关键点并使用KNN算法对姿态进行分类判断是否发生跌倒。源码共9个文件包含3个Python脚本模型训练、姿态估计与KNN推理、2个CSV数据集、1个joblib模型文件、演示视频与动图以及说明文档整体压缩包仅7.98MB结构清晰便于快速上手和二次开发。项目覆盖Mediapipe模型加载、关键点解析、数据预处理、KNN参数调整与结果可视化等完整流程通过阅读源码可掌握骨骼关键点提取与分类算法结合的实现思路在智能监护场景中具备较强的参考价值。目前该资源已有259人学习适合需要从零构建跌倒检测原型或深入研究人体姿态识别应用的开发者。1. 跌倒检测为什么值得做Mediapipe 3D 骨架加 KNN 的轻量落地组合独居老人夜里起夜滑倒没人及时发现后果很严重。这类场景需要的不是录像回放而是自动判断「人是否已跌倒」并立刻告警的系统。用 Mediapipe 从单目摄像头提取人体 3D 骨架再用 KNN 算法对骨架特征分类是低成本做跌倒检测最常见的组合也是这个标题的核心。比端到端视频分类模型这个组合有两个实在的好处Mediapipe 开源跨平台普通摄像头就能拿 3D 骨架不用额外买深度相机KNN 训练成本低几十条标注样本就能跑出可用的分类器误检时也能反查是哪类特征错了。它适合独居老人监护、病房看护、工地安全监测等想快速上线的场景但边界也明显KNN 对样本分布敏感换机位、换人、换光线准确率都会往下掉。这篇笔记把 Mediapipe 骨架提取、特征设计、KNN 训练到排错的完整路径讲清楚照着做能跑通跑完也知道坑在哪。2. 方案选型为什么是 Mediapipe 3D 骨架 KNN而不是端到端 CNN2.1 Mediapipe 在骨架检测上的定位3D 关键点不是黑匣子Mediapipe Pose 是 Google 开源的人体姿态估计模块从单帧图像里给出 33 个关键点每个关键点带归一化的 x、y 像素坐标、z 深度值和 visibility 置信度。说它是「3D 骨架」指的就是它额外推断出了深度信息这个深度是相对摄像机位置的估值精度比不上深度相机但在跌倒检测这种「位置变化剧烈、方向大致确定」的场景里足够用。我一般把 Mediapipe 的输出分成两类来用。一是pose_landmarks坐标相对图像尺寸归一化适合画框、画点做可视化二是pose_world_landmarks坐标以骨盆中心为原点的 3D 相机坐标系x、y、z 三个维度不再受画面尺寸影响更适合算速度、角度和高度变化。跌倒检测的特征尽量从world_landmarks上取不要拿画面坐标直接算否则人的远近一变特征就失真。刚接触时容易把 Mediapipe 当成「识别是否跌倒」的黑匣子实际上它只负责把人体简化成 33 个点怎么判断是模型之外的事。这恰好是这个方案的优势骨架出来后你可以自己定义「什么算跌倒」。骨盆高度骤降、躯干角度接近水平、倒地后位移变小这三个条件都能写进逻辑里而不是像端到端 CNN 那样模型内部判断完你也说不清。2.2 KNN 参与分类的理由小样本、可解释、部署成本低KNNK 近邻算法的核心是一条未知样本去和训练集所有样本比距离取距离最近的 K 条投票决定类别。它没有显式训练过程没有反向传播和训练轮数本质上是在样本空间里做最朴素的近邻判断。用在跌倒检测上它正好和 Mediapipe 互补。第一跌倒样本天然难收集。真实跌倒图像很难大批量标注而 KNN 在小样本下表现相对稳定第二可解释性强。某次误检可以把误判样本的 K 个近邻调出来看到底是算成了「弯腰捡东西」还是「蹲下」就知道该补什么样本第三推理成本低。骨架特征只有几十维一个 KNN 分类器在树莓派级别的设备上也能实时跑不需要 GPU。真正的问题在特征KNN 把所有希望寄托在距离上两条样本在特征空间里挨得近就认为行为相同。这就要求喂给它的特征向量必须能区分跌倒和弯腰、蹲下、坐下这些干扰动作否则特征不辨K 值调得再细也白搭。2.3 这个组合的边界什么场景不建议用不是所有跌倒检测都适合这个方案。如果摄像头装在墙角人的躯干经常被桌子、床沿遮挡Mediapipe 关键点置信度会大幅下降骨架断断续续后面所有特征都失真如果要求遮挡条件下的高召回率或者要区分「晕倒但没倒」「靠墙慢慢滑坐」这类模糊行为KNN 在特征层面很难分建议直接换基于视频序列的时序模型或者毫米波雷达方案。另一个边界是视角。这个组合最舒服的视角是侧面或斜侧方能看到完整人像正上方俯视时 Mediapipe 对人体估计会变差因为俯瞰时关键点遮挡严重。架设摄像头尽量让躯干在画面里占足够比例成年人大概占画面高度的三分之一到一半。远距离小目标会频繁低于置信度阈值误检率也会跟着往上走。2.4 骨架方案对比Mediapipe、OpenPose 与 MMPose 的取舍方案输出部署成本适合场景Mediapipe Pose33 点 3D 坐标 置信度CPU 可实时跨平台快速落地、嵌入式、实时告警OpenPose25/135 点2D 为主依赖 Caffe计算量大实验室离线分析MMPose / RTMPose2D 关键点精度高需 GPU可自训练换视角换人频繁、追求精度总结一句话要快速跑通且设备一般选 Mediapipe要刷准确率且有 GPU考虑 RTMPose不要为了「看起来专业」上 OpenPose骨架更新率一掉后面 KNN 全受影响。Mediapipe 对 OpenCV 视频流有官方接口读摄像头、读视频文件、读图片都统一成帧处理代码不用为视频格式专门分叉。3. 跑通源码与 3D 骨架提取mediapipe 安装的关键步骤与最小代码3.1 mediapipe 安装的版本雷区与最小验证命令拿到项目源码解压后常见模块划分是数据采集、特征提取、KNN 训练、实时检测四部分。在跑这些代码之前先把环境钉死。我一般用 conda 创建干净虚拟环境Python 版本选 3.9conda create -n fall python3.9 -y conda activate fall pip install mediapipe0.10,1.0 numpy2.0 opencv-python scikit-learn这里第一个坑就是依赖冲突。mediapipe 对 protobuf、opencv 有版本约束最容易遇到的是 protobuf 版本冲突或 numpy 2.x 不兼容。把 mediapipe 限制在 0.10 到 1.0 之间是因为这个区间内solutions接口最稳定开箱即用的 Pose 模块能直接调用。装完用一条命令验证python -c import mediapipe as mp; print(mp.__version__); print(mp.solutions.pose)如果不报错说明基础环境通了。若提示缺少 libGL.so.1在 Debian 系执行apt install libgl1 libglib2.0-0Windows 上一般不会缺但要确认 Python 是 64 位。参数说明fall是环境名可自改四个包分别是姿态估计、数值计算、视频读取、KNN 训练必需的numpy 固定到 2.0 以下是为了避开 mediapipe 旧 wheel 的兼容问题。提示遇到 protobuf 报错时优先查 mediapipe 对应的 protobuf 版本约束不要单独把 protobuf 升到最新版。3.2 用 Mediapipe 提取 3D 骨架最小可运行代码环境就绪后用一段最小代码从摄像头读取画面并输出 33 个关键点的 3D 坐标import cv2 import mediapipe as mp mp_pose mp.solutions.pose pose mp_pose.Pose( static_image_modeFalse, model_complexity1, smooth_landmarksTrue, min_detection_confidence0.5, min_tracking_confidence0.5, ) cap cv2.VideoCapture(0) while cap.isOpened(): ret, frame cap.read() if not ret: break frame cv2.resize(frame, (640, int(frame.shape[0] * 640 / frame.shape[1]))) rgb cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) results pose.process(rgb) if results.pose_world_landmarks: lm results.pose_world_landmarks.landmark # 0 鼻子, 11/12 左右肩, 23/24 左右髋, 25/26 左右膝, 27/28 左右踝 print(fnose: {lm[0].x:.3f}, {lm[0].y:.3f}, {lm[0].z:.3f}) print(fleft_hip: {lm[23].x:.3f}, {lm[23].y:.3f}, {lm[23].z:.3f}) if cv2.waitKey(1) 0xFF ord(q): break cap.release()逻辑说明先用 cv2 读一帧缩到宽度 640 后再进 Mediapipe压缩不是为了省显存是让单帧推理时间稳定。cv2 默认读进来是 BGR必须转成 RGB否则骨架会错位这是新手最容易翻车的一步。results.pose_world_landmarks给的是以骨盆为原点的 3D 坐标打印鼻子和左髋的坐标确认 z 值有变化说明 3D 通道通了。不同版本的坐标轴方向可能不同以打印值为准不要背死轴方向。参数说明static_image_modeFalse表示视频流模式会启用跟踪优化让连续帧更平滑model_complexity有 0/1/2 三档0 最快但角度抖动明显2 最稳但 CPU 上很难实时日常折中选 1smooth_landmarksTrue做时间平滑对跌倒这种突发动作影响不大两个 confidence 都设 0.5 是常用起始值误检多就往上调丢帧多就往下调。Debug 阶段把坐标打印出来眼见为实。3.3 骨架输出的数据结构与坐标说明理解 33 个关键点怎么组织后面特征设计才不虚。每个 Landmark 对象是五元组x、y、z、visibility、presence。pose_world_landmarks的 x/y/z 是世界坐标以骨盆为原点单位是米量级的相对值不是像素visibility 是关键点可见性置信度范围 0 到 1低于 0.5 的点基本不可信采样本时应该直接丢掉。常用关键点编号列一张表写特征时直接查关键点编号用途鼻0头部位置参考左/右肩11/12躯干上端左/右髋23/24躯干下端、重心参考左/右膝25/26腿部弯曲程度左/右踝27/28脚是否离地左/右肘13/14手臂动作需要注意像素坐标系里 y 向下但 world 坐标系的 y 轴是向上的。很多人在算「骨盆高度」时把两者搞反导致高度下降被算成上升。我习惯统一用 world 坐标定义「骨盆中心 (left_hip right_hip) / 2」摔倒时骨盆中心 y 值会快速下降这个符号方向在代码注释里写清楚避免三个月后自己都看不懂。采集阶段建议把每帧的骨盆中心、肩中心、角度存成轻量结构比如 CSV 或内存列表后面滑窗特征和 KNN 训练样本都依赖这段序列而不是单帧判断。滑窗的意思就是取最近 N 帧的组合特征跌倒是一个持续 0.5 到 1.5 秒的过程单帧姿态再典型也不能代表行为过程。4. 跌倒识别的特征设计从 3D 关键点序列到 KNN 能用的向量4.1 特征选项重心高度、躯干角度与速度变化跌倒过程最显著的变化有三个重心突然降低、躯干从竖直变成接近水平、倒地后身体基本静止。围绕这三个变化我常用的特征有四类只依赖上面那些关键点重心高度取骨盆中心 y 的世界坐标跌倒时在滑窗内快速下降。用变化量而不是绝对高度避免镜头远近的影响。躯干角度向量肩中心 → 骨盆中心与竖直方向的夹角。站立时接近 0°跌倒时接近 90°弯腰捡东西通常在 30° 到 60° 之间。这是区分「跌倒」和「弯腰」最核心的一维。垂直速度窗口内骨盆中心 y 的帧间变化率摔倒瞬间速度会突然放大普通坐下不会。静止度窗口末尾若干帧骨盆中心的位移方差。真正跌倒后人多数时间躺着不动蹲下又站起方差不会一直压得很低。这些特征合起来正好覆盖「跌得快、倒得平、倒后不动」。特征不是越多越好KNN 在维度高时容易受无关维度干扰四到六维一般够用。若只取一维比如只看重心高度从床上滑坐到地上也会被误判为跌倒。躯干角的计算代码很短注意用 3D 向量而不是只靠 y 值import numpy as np def torso_angle(shoulder, hip): vertical np.array([0.0, 1.0, 0.0]) vec np.array(hip) - np.array(shoulder) cos np.dot(vec, vertical) / (np.linalg.norm(vec) 1e-6) return float(np.degrees(np.arccos(np.clip(cos, -1.0, 1.0))))逻辑说明这里假设世界坐标 y 向上如果打印出的坐标方向相反把vertical改成[0, -1, 0]。用 3D 向量算角度对侧对摄像头的情况更鲁棒2D 投影在侧面视角下会把角度算偏。clip把余弦值限制在 [-1, 1]避免浮点误差造成 arccos 报错。4.2 滑窗与骨架序列切片怎么把连续帧变成一条样本实时检测时每帧都会来一组关键点但跌倒是一个过程。我一般维护一个长度 30 到 45 帧的环形缓冲对应 1 到 1.5 秒 30fps每次滑入新帧、弹出旧帧然后对窗口提取特征向量import numpy as np def extract_window_features(window_frames, fps30): window_frames: list[dict]每个 dict 含 pelvis_y, pelvis_x, torso_angle ys np.array([f[pelvis_y] for f in window_frames]) xs np.array([f[pelvis_x] for f in window_frames]) angles np.array([f[torso_angle] for f in window_frames]) y0 ys[0] y_min ys.min() drop_ratio (y0 - y_min) / (abs(y0) 1e-6) # 重心高度下降比例 angle_max angles.max() # 最大倾斜角度 velocity np.mean(np.abs(np.diff(ys))) * fps # 平均垂直速度 still_var np.var(ys[-5:]) np.var(xs[-5:]) # 末尾静止度 return np.array([drop_ratio, angle_max, velocity, still_var])逻辑说明window_frames是最近 N 帧的关键点字典列表每帧只存骨盆中心 y、骨盆中心 x、躯干角度三个量。drop_ratio用相对变化而不是绝对值避免不同身高、不同距离的人量纲不一致angle_max取窗口内最大角度跌倒瞬间角度会冲高velocity把平均帧间差乘 fps 换成每秒变化量让不同帧率采集的数据可比still_var取窗口最后 5 帧的位移方差捕捉「倒地后静止」。参数说明窗口长度 30 帧 30fps 对应 1 秒适合快速跌倒如果场景有慢速滑坐等动作可以加长到 45 帧但延迟同步增加到 1.5 秒左右实时性要求高的场景要权衡。fps 参数必须传实际帧率否则 velocity 特征在不同设备间不可比。这段代码可以实时循环调用也可以离线读视频时对整个时间轴做滑窗生成监督训练数据。4.3 特征归一化为什么这步不做 KNN 就白训KNN 用距离度量相似度而四个特征量纲差异巨大drop_ratio 是 0 到 1 的小数angle_max 是 0 到 90 的角度velocity 可能是每秒几米的量级。不归一化的话angle_max 和 velocity 会在欧氏距离里占绝对主导drop_ratio 的作用被淹没。常见做法是标准化让每个特征均值为 0、方差为 1from sklearn.preprocessing import StandardScaler scaler StandardScaler() X_scaled scaler.fit_transform(X_train) # X_train: (样本数, 4)逻辑说明fit_transform只在训练集上执行一次得到每个特征的均值和方差之后实时推理和验证时对每一条新样本只调用scaler.transform不能重新 fit否则会把测试集信息泄露到模型里导致验证指标虚高。这个习惯不养成线上表现和离线评估会对不上。参数说明StandardScaler 没有需要特别调的超参真正要注意的是 fit 的时机。之后补充了新的跌倒样本把新老样本合在一起重新 fit 一次。归一化看着基础但在 KNN 里它比换模型还重要这也是项目源码里通常会把数据预处理单独抽成函数而不是和训练代码揉在一起的原因。提示训练集的 scaler 和模型一起保存实时推理时加载同一份 scaler不要现场重新算。5. 避坑Mediapipe 跌倒检测项目里最常见的 5 个实际问题5.1 现象mediapipe 装不上或 import 就报错现象是执行pip install mediapipe后import mediapipe直接报错或提示 protobuf 运行时冲突、numpy 数据类型错误。原因分两类一是 Python 版本或 numpy 主版本不在 wheel 支持范围内二是 Linux 环境缺少 libGL 系统库。解决用 3.9 或 3.10 建干净虚拟环境把 numpy 固定到 1.xDebian 系执行apt install libgl1 libglib2.0-0。如果之前装过旧版 opencv建议一并升级到 opencv-python 4.5 以上避免视频帧格式不兼容。5.2 现象骨架跳变、抖动剧烈特征值忽高忽低现象是画面里人站着不动肩点和髋点来回跳躯干角度抖动KNN 频繁误报。原因通常是目标离摄像头太远、分辨率太低或遮挡导致置信度低于阈值Mediapipe 在 tracking 丢失后重新做 detection两个阶段的抖动程度不同。解决把人的成像高度调整为画面高度的 1/3 以上把min_detection_confidence和min_tracking_confidence都提到 0.6 到 0.7打开smooth_landmarks并对关键点做指数平滑。要注意的是smooth_landmarks会引入约一帧延迟对跌倒检测这种突发动作可以接受但判断「倒地瞬间」不要依赖单帧精确值用滑窗特征天然消除抖动。5.3 现象跌倒和弯腰、蹲下分不清楚误报集中在日常动作现象是现场测试时弯腰系鞋带、蹲下整理东西都触发报警。原因往往是特征设计只用了重心高度或只用了速度没把躯干角度放进来。跌倒的核心特征是「躯干接近水平 高度骤降 倒地后静止」弯腰和蹲下的躯干角度通常不会到 80° 以上。解决把躯干角度作为必选特征或者在规则层加前置判断只有「高度下降比例大于阈值且最大角度大于 60°」的窗口才进入 KNN 分类。先用硬规则过滤明显不是跌倒的片段再让 KNN 精分类这能显著降低误报率。「规则粗筛 KNN 精分类」的做法在源码工程里很常见也适合现场快速调试。5.4 现象KNN 训练精度很高实际场景一测就翻车现象是训练集准确率 95% 以上拿到现场换个摄像头角度就掉到 70%。原因主要有三个样本全来自同一个机位训练和验证用同一个划分评估过拟合没做标准化。解决采集样本至少包含三个机位、三个以上的人、不同时间的光线条件评估用留一法而不是固定切分因为跌倒样本通常只有几十条随机切分很容易把一类样本全留在验证集所有特征必须经过训练集的 scaler 再做推理。还有一个容易被忽略的点正负样本比例失衡时KNN 投票会被多数类带偏给近邻加距离权重weightsdistance让离得近的样本说话更响。5.5 现象实时检测延迟高画面卡顿现象是笔记本上跑通了但画面明显掉帧KNN 还没来得及判断人已经站起来了。原因通常是每帧跑完整推理且没有跳帧视频分辨率设置过高可视化绘制也放在关键路径上。解决统一把帧缩放到宽度 640 进 Mediapipe每 2 到 3 帧做一次姿态估计中间帧沿用上一帧骨架可视化绘制精简DrawLandmarks 的线和点不要每帧重画。更省的做法是实时链路里不绘制骨架只在调试模式输出可视化。推理延迟瓶颈基本在 Mediapipe 而不是 KNN所以调优顺序是先压骨架提取再调 KNN 参数。6. 留一法验证与参数网格搜索让 KNN 跌倒检测模型的指标可信跌倒样本少是这类项目逃不开的现实KNN 的评估方式一旦错了后面所有调参都是自我欺骗。我一般用留一法LeaveOneOut每次只拿一条样本当验证集其余全部当训练集循环到每条都被验证过。几十条样本计算量很小但能让评估结果接近真实泛化水平比一次性切分可信得多。代码很短from sklearn.model_selection import LeaveOneOut from sklearn.neighbors import KNeighborsClassifier import numpy as np def loo_evaluate(X, y, n_neighbors5, weightsdistance): loo LeaveOneOut() preds, trues [], [] for train_idx, test_idx in loo.split(X): clf KNeighborsClassifier(n_neighborsn_neighbors, weightsweights) clf.fit(X[train_idx], y[train_idx]) preds.append(clf.predict(X[test_idx])[0]) trues.append(y[test_idx][0]) return np.mean(np.array(preds) np.array(trues))逻辑说明训练和验证严格分离不会出现数据泄露。scaler 的 fit 必须发生在进这个函数之前否则训练和验证都会间接学到全局统计量。评估指标除了准确率更要看误报率和漏报率。跌倒检测里漏报的代价远高于误报宁可多几次误报也要先保证不漏。weightsdistance在跌倒检测里更稳因为跌倒样本少距离权重能削弱远处多数类样本的投票权。参数调优用网格搜索范围收紧n_neighbors 取 3 到 9metric 只试 euclidean 和 manhattan小样本下范围太大会把评估拉回过拟合区间。from sklearn.model_selection import GridSearchCV param_grid { n_neighbors: [3, 5, 7, 9], weights: [uniform, distance], metric: [euclidean, manhattan], } grid GridSearchCV(KNeighborsClassifier(), param_grid, cvLeaveOneOut(), scoringrecall) grid.fit(X, y) print(grid.best_params_)逻辑说明scoring 选 recall 而不是 accuracy因为跌倒样本是少数类accuracy 在小样本下几乎没参考价值recall 高代表漏报少符合监护场景诉求。网格跑完后把 best_params_ 填回实时检测里的 KNN 模型即可。GridSearchCV 配 LeaveOneOut 在样本量很大时计算慢但跌倒样本通常不过百条可以放心用。我自己跑这类项目养成的习惯是每次现场调完阈值把误报和漏报的样本补进训练集重新跑一遍上面这段留一法把准确率和 recall 记在一个小表格里改一次记一次。KNN 的调参没有太多玄学就是样本、特征、距离权重三件事轮着来真正花时间的往往是数据采集和特征验证而不是模型本身。希望这个流程能帮你少走一点弯路也希望你的跌倒检测项目早日上线帮到真正需要被看见的人。本文还有配套的精品资源点击获取

相关新闻

PCA9422与R7KA8T2LFLCAC协同构建高可靠嵌入式电源管理系统

PCA9422与R7KA8T2LFLCAC协同构建高可靠嵌入式电源管理系统

/* 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 12:08:03 阅读更多 →
Flink电商实时分析五场景落地:点击流、停留时长、热门排行、漏斗转化与分群画像

Flink电商实时分析五场景落地:点击流、停留时长、热门排行、漏斗转化与分群画像

/* 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 12:54:56 阅读更多 →
不依赖CUDA的OCR推理方案:基于Vulkan的PPOCR加速实践

不依赖CUDA的OCR推理方案:基于Vulkan的PPOCR加速实践

1. 项目缘起与核心定位1.1 一个被忽视的痛点:OCR 为什么非得绑死 CUDA做过 OCR 落地的人大概都有过这种体验:模型选好了,精度也调得差不多了,结果一到部署环节就卡住。原因往往不是算法本身,而是推理后端——很多高性能…

2026/10/13 0:11:33 阅读更多 →

最新新闻

MATLAB船舶航向PID控制仿真:Nomoto模型与参数整定详解

MATLAB船舶航向PID控制仿真:Nomoto模型与参数整定详解

/* 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:04:48 阅读更多 →
Java实现图片与Base64互转及保存的完整指南

Java实现图片与Base64互转及保存的完整指南

/* 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:04:48 阅读更多 →
STM32寄存器操作实战:从点灯到定时器与串口,彻底搞懂底层开发

STM32寄存器操作实战:从点灯到定时器与串口,彻底搞懂底层开发

/* 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:04:48 阅读更多 →
优先队列PriorityQueue实战:原理、应用场景与避坑指南

优先队列PriorityQueue实战:原理、应用场景与避坑指南

大概很多年前我第一次做任务调度模块时,把所有待处理任务都塞进了一个普通队列,先进先出,看起来毫无问题。直到系统里突然混进来一个必须在几秒内给出结果的紧急请求,而它前面还堵着几百个耗时任务,那一刻我才真正意识…

2026/10/13 1:04:48 阅读更多 →
Agent Skills 操作指南:从 SKILL.md 到 MCP 自定义进阶

Agent Skills 操作指南:从 SKILL.md 到 MCP 自定义进阶

/* 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:04:48 阅读更多 →
iOS TableView 异步加载图片:从原理到实践,告别列表卡顿

iOS TableView 异步加载图片:从原理到实践,告别列表卡顿

/* 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:03:48 阅读更多 →

日新闻

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

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

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

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/12 0:16:43 阅读更多 →

月新闻

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