AI健身评分系统:从关节点到可解释动作分的完整实现
简介本资源是一个基于Python实现的AI健身评分系统开源项目面向计算机视觉初学者、健身科技爱好者及人工智能实践者解决运动动作标准化评估难题。系统采用姿态估计技术提取人体关键点通过骨骼向量角计算与标准动作模板比对实时输出各肢体部位评分及总分以举哑铃动作为核心演示场景具备动作反馈、偏差识别与训练指导能力。压缩包共114个文件含41个Python源码含姿态处理、评分逻辑、UI界面等模块、6个模型文件.h5/.pb、11张示例图像、6个Shell/批处理脚本含启动.bat、28个编译产物.pyc/.pyd及C扩展相关文件.cpp/.h/.i整体大小为225.1MB结构完整支持开箱即用与二次开发。目前已有42人学习下载提供从图像输入、关键点检测、角度计算到评分可视化的一站式实现方案附带可运行环境配置与模块化代码组织便于理解AI健身交叉应用的技术路径。1. 健身评分系统不是动作识别而是「标准动作-偏差量化」的闭环落地你见过太多“AI健身APP”——打开摄像头人一动界面上就跳出个“✓ 动作标准”或“✗ 肩部抬高”。但真用过的人知道那只是个带延迟的动画反馈背后没数值、没溯源、没可调阈值更没法导出报告给教练复盘。这个标题里的「健身评分系统」核心不是识别“这是深蹲还是弓步”而是把人体关键点轨迹映射到预设标准模型上用几何距离运动学约束如关节角速度、位移连续性算出一个0100分的可解释、可拆解、可回溯的量化分数。它依赖OpenPose或YOLO-Pose输出的2D关节点x,y,confidence但真正发力点在后处理pafprocess做姿态对齐、numpy做向量运算与时间序列归一化、scipy插值补帧防抖动。适合私教工作室批量评估学员动作质量也适合康复中心做术后动作恢复追踪——它不追求实时性而要每帧都经得起审计。如果你手头有手机拍的横屏深蹲视频、想自己跑通全流程、且能接受Python环境配置别怕numpy和opencv装错版本是最大拦路虎这篇就是为你写的血泪实操笔记。2. 从视频到关节点用YOLOv8-Pose跑通最小可行流程2.1 为什么选YOLOv8-Pose而不是OpenPose或MediaPipeOpenPose精度高但CPU推理慢单帧300msMediaPipe在移动端优化好但PC端Python接口不稳定而YOLOv8-Pose是当前平衡点官方PyTorch模型支持TensorRT加速COCO-Pose权重开箱即用且输出格式统一[x,y,conf]×17。更重要的是它的results.keypoints.xy直接返回numpy数组省去OpenPose的JSON解析和坐标系转换——这对后续用pafprocess做姿态对齐至关重要。我试过用MediaPipe的pose_landmarks结果发现其手腕关键点在侧身时置信度暴跌导致评分波动超±15分而YOLOv8-Pose在相同角度下置信度稳定在0.85以上。这不是玄学是COCO数据集里大量侧身标注样本带来的泛化优势。2.2 安装与最小验证命令避开CUDA版本地狱提示不要用conda install pytorch它默认装CPU版也不要pip install ultralytics最新版——2024年6月前的v8.2.49有关键点插值bug必须锁定v8.2.52。# 创建干净环境强烈建议 python -m venv pose_env source pose_env/bin/activate # Windows用 pose_env\Scripts\activate # 装指定版本Ubuntu 22.04 CUDA 11.8 pip install torch2.1.0cu118 torchvision0.16.0cu118 --extra-index-url https://download.pytorch.org/whl/cu118 pip install ultralytics8.2.52 numpy1.24.4 opencv-python4.8.1.78 # 验证是否调用GPU关键 python -c import torch; print(torch.cuda.is_available(), torch.cuda.device_count()) # 输出应为 True 1安装后立刻验证下载一段3秒深蹲视频命名squat.mp4运行以下命令生成关键点CSV# save_keypoints.py from ultralytics import YOLO import numpy as np import cv2 model YOLO(yolov8n-pose.pt) # 小模型够用推理快 cap cv2.VideoCapture(squat.mp4) fps cap.get(cv2.CAP_PROP_FPS) frame_count int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) # 预分配数组[帧数, 关键点数, 3(x,y,conf)] keypoints_3d np.zeros((frame_count, 17, 3), dtypenp.float32) for i in range(frame_count): ret, frame cap.read() if not ret: break # YOLOv8-Pose输出是List[Results]取第0人多人场景需加逻辑 results model(frame, verboseFalse)[0] if len(results.keypoints.xy) 0: # 取置信度最高的一组关键点多人时用results.boxes.conf.argmax() kpts results.keypoints.xy[0].cpu().numpy() # shape (17, 2) confs results.keypoints.conf[0].cpu().numpy() # shape (17,) keypoints_3d[i, :, :2] kpts keypoints_3d[i, :, 2] confs else: keypoints_3d[i] np.nan # 标记丢失帧 np.savetxt(squat_kpts.csv, keypoints_3d.reshape(-1, 51), delimiter,) # 展平存CSV cap.release() print(fSaved {frame_count} frames to squat_kpts.csv)运行后检查head -n 1 squat_kpts.csv应看到51列数字17点×3维且第3/6/9...列即每个点的置信度大部分0.7。如果全是0或nan说明模型没检测到人——换用yolov8m-pose.pt或检查视频是否过暗/分辨率320px。3. 姿态对齐与标准建模pafprocess的核心作用不是“处理PAF”而是空间归一化3.1 pafprocess到底在做什么撕掉黑匣子标签网上教程总说“pafprocess用于解析PAFPart Affinity Fields”这是严重误导。PAF是OpenPose的中间特征图而YOLOv8-Pose根本不输出PAF。pafprocess在此的真实角色是将原始关节点坐标转换为标准姿态空间Standard Pose Space的坐标系。它通过计算髋关节中心→肩关节向量作为Y轴、髋→膝向量叉乘得到X轴构建一个随人体移动旋转的局部坐标系再把所有关节点投影进去。这样做的意义在于消除身高、拍摄距离、镜头畸变带来的尺度干扰——比如同样一个深蹲170cm和190cm的人髋关节Y坐标绝对值差200像素但投影后的屈膝角完全一致。这才是评分可比性的根基。3.2 用pafprocess实现标准姿态转换三步不可跳过# align_pose.py import numpy as np from pafprocess import pafprocess def align_to_standard_pose(kpts_raw): kpts_raw: (N, 17, 3) numpy array, [x,y,conf] Returns: (N, 17, 2) aligned coordinates in standard space # Step 1: 提取有效关键点置信度0.5 valid_mask kpts_raw[:, :, 2] 0.5 # (N, 17) # Step 2: 构建pafprocess输入格式[x,y,conf] - [x,y,conf,0,0]后两维无用 kpts_paf np.zeros((kpts_raw.shape[0], 17, 5)) kpts_paf[:, :, :3] kpts_raw[:, :, :3] # Step 3: 调用pafprocess核心函数注意必须传入整数shape # 返回 (N, 17, 2) 的aligned坐标原点在髋中心Y轴向上 aligned pafprocess.align_pose(kpts_paf.astype(np.float32), (kpts_raw.shape[0], 17)) # shape参数必须是tuple # Step 4: 对无效帧置零避免NaN传播 aligned[~valid_mask] 0 return aligned # 加载上一步的CSV并处理 kpts_raw np.loadtxt(squat_kpts.csv, delimiter,).reshape(-1, 17, 3) aligned_kpts align_to_standard_pose(kpts_raw) # shape (N, 17, 2) np.save(squat_aligned.npy, aligned_kpts) print(fAligned {aligned_kpts.shape[0]} frames)关键参数说明kpts_paf.astype(np.float32)pafprocess只认float32传float64会静默失败(kpts_raw.shape[0], 17)shape参数必须是整数tuple传list会报TypeError: expected tuplealigned_kpts中第0帧的aligned_kpts[0, 0]鼻子应接近(0, 0.8)aligned_kpts[0, 8]右髋应接近(0, 0)——这是标准空间的锚点。4. 评分逻辑设计用numpy向量化计算关节角运动学指标4.1 为什么不用现成的angle计算库因为你要控制误差来源很多方案用math.atan2手动算角但向量叉积方向易错也有用scipy.spatial.distance.cosine的但它是余弦相似度而非角度。最稳的方式是用numpy广播机制对每一帧的17个点做向量运算一次性算出所有关节角。以膝关节角为例髋-膝-踝三点def calc_knee_angle(aligned_kpts): aligned_kpts: (N, 17, 2) —— 标准空间坐标 Returns: (N,) knee angles in degrees # 索引0鼻,1左眼,2右眼,3左耳,4右耳,5左肩,6右肩,7左肘,8右肘, # 9左腕,10右腕,11左髋,12右髋,13左膝,14右膝,15左踝,16右踝 hip aligned_kpts[:, 12, :] # 右髋 (N,2) knee aligned_kpts[:, 14, :] # 右膝 (N,2) ankle aligned_kpts[:, 16, :] # 右踝 (N,2) # 向量髋→膝膝→踝 vec1 knee - hip # (N,2) vec2 ankle - knee # (N,2) # 点积与模长避免除零 dot np.sum(vec1 * vec2, axis1) # (N,) norm1 np.linalg.norm(vec1, axis1) # (N,) norm2 np.linalg.norm(vec2, axis1) # (N,) # 夹角余弦clip防止浮点误差越界 cos_angle np.clip(dot / (norm1 * norm2 1e-8), -1.0, 1.0) angle_rad np.arccos(cos_angle) # (N,) return np.degrees(angle_rad) # (N,) # 计算整段视频的膝角序列 knee_angles calc_knee_angle(aligned_kpts) # shape (N,) print(fKnee angle range: {knee_angles.min():.1f}° ~ {knee_angles.max():.1f}°)注意这里用右髋/右膝/右踝计算右膝角若需双侧评分需复制逻辑改索引左髋11左膝13左踝15。4.2 运动学评分不只是静态角更是动态稳定性静态角只能判“此刻是否达标”但深蹲质量看的是全程稳定性。我们定义三个运动学指标角速度波动率膝角一阶差分的标准差单位°/帧反映抖动程度位移连续性髋关节Y坐标二阶差分的L2范数反映重心起伏平滑度相位同步性左右膝角曲线的互相关峰值用np.correlate值越接近1说明双腿协同越好。def calc_motion_metrics(aligned_kpts): hip_y aligned_kpts[:, 12, 1] # 右髋Y坐标 (N,) left_knee calc_knee_angle(aligned_kpts[:, [11,13,15], :]) # 左膝角 right_knee calc_knee_angle(aligned_kpts[:, [12,14,16], :]) # 右膝角 # 角速度波动率膝角 knee_vel np.abs(np.diff(right_knee)) # (N-1,) vel_std np.std(knee_vel) if len(knee_vel) 1 else 0 # 位移连续性髋Y坐标二阶差分 hip_acc np.diff(np.diff(hip_y)) # (N-2,) continuity np.linalg.norm(hip_acc) if len(hip_acc) 0 else 0 # 相位同步性左右膝角互相关 corr np.correlate(left_knee - np.mean(left_knee), right_knee - np.mean(right_knee), modefull) sync_score np.max(corr) / (np.linalg.norm(left_knee) * np.linalg.norm(right_knee) 1e-8) return { knee_vel_std: vel_std, hip_continuity: continuity, sync_score: sync_score } metrics calc_motion_metrics(aligned_kpts) print(fMotion metrics: {metrics})这些指标直接决定最终分数权重——例如vel_std 5°/帧扣10分sync_score 0.7扣15分。它们比单帧角度更能暴露“假装标准”的假动作。5. 避坑指南numpy版本、置信度过滤、坐标系陷阱的血泪记录5.1 现象pafprocess.align_pose返回全零数组原因输入kpts_paf未astype(np.float32)或shape参数传了list而非tuple。pafprocess内部用Cython类型错误不报异常只默默返回零数组。解决强制kpts_paf.astype(np.float32)且shape(N,17)用圆括号。5.2 现象膝角计算出现nan或inf原因某帧中髋/膝/踝三点共线如站立时导致norm1*norm20除零得inf或cos_angle因浮点误差1.0000001arccos报invalid value。解决在dot / (norm1 * norm2 1e-8)后加np.clip(cos_angle, -1.0, 1.0)这是numpy向量化计算的必备防护。5.3 现象评分结果与肉眼判断相反如明显晃动却得分高原因未过滤低置信度关键点。YOLOv8-Pose在遮挡时会输出高置信度错误点如把阴影当脚踝导致aligned_kpts中该点坐标漂移角计算失真。解决在align_to_standard_pose前加置信度过滤且对连续3帧缺失的关键点用线性插值scipy.interpolate.interp1d禁用简单均值填充——均值会抹平运动特征。5.4 现象同一视频在不同电脑上评分差异超±8分原因numpy版本不匹配导致np.linalg.norm计算精度差异1.23.x vs 1.24.x尤其在小向量模长计算时。解决锁定numpy1.24.4并在评分脚本开头加校验import numpy as np assert np.__version__ 1.24.4, fWrong numpy version: {np.__version__}5.5 现象标准空间中髋关节Y坐标为负值原因pafprocess默认以“髋中心为原点Y轴指向上方”但若视频中人倒立或镜头翻转Y轴方向会反。解决在align_to_standard_pose后加校验if np.mean(aligned_kpts[:, 12, 1]) 0: aligned_kpts[:, :, 1] * -1强制Y轴向上。6. 进阶技巧用评分结果反推动作缺陷并生成可交付PDF报告6.1 缺陷定位不是“哪里错了”而是“错在哪一帧、多严重”评分系统真正的价值不在总分而在定位问题帧。我们定义“缺陷爆发点”为膝角波动率连续3帧阈值如8°/帧且同步性0.6。用numpy的np.where和scipy.signal.find_peaks组合from scipy.signal import find_peaks def find_defect_frames(knee_angles, sync_scores, window3, vel_thres8.0, sync_thres0.6): # 计算每帧角速度用中心差分更准 vel np.abs(np.gradient(knee_angles)) # 找出角速度超标帧 high_vel vel vel_thres # 找出同步性差帧 low_sync sync_scores sync_thres # 两者同时发生且持续window帧 defect_mask np.convolve(high_vel low_sync, np.ones(window), modevalid) window # 返回起始帧索引 peaks, _ find_peaks(defect_mask.astype(int), distance30) # 至少间隔30帧 return peaks # 假设已计算knee_angles和sync_scores长度需对齐 defect_frames find_defect_frames(knee_angles, metrics[sync_score] * np.ones(len(knee_angles))) print(fDefect frames: {defect_frames}) # 如 [42, 156, 288]这比单纯标“动作不标准”有用得多——教练可直接跳到第42帧看学员何时开始晃动。6.2 PDF报告生成用ReportLab写可打印的技术文档不要用matplotlib截图凑数。ReportLab能生成带矢量图、页眉页脚、字体嵌入的正式PDFfrom reportlab.lib.pagesizes import A4 from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, Table, TableStyle from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib.units import inch import matplotlib.pyplot as plt def generate_pdf_report(video_name, total_score, defect_frames, knee_angles): doc SimpleDocTemplate(f{video_name}_report.pdf, pagesizeA4) styles getSampleStyleSheet() story [] # 标题 story.append(Paragraph(AI健身评分报告, styles[Title])) story.append(Spacer(1, 12)) # 总分与解读 story.append(Paragraph(f视频: {video_name}, styles[Heading2])) story.append(Paragraph(f总分: {total_score:.1f}/100, styles[Heading3])) if total_score 90: interp 动作标准无明显缺陷 elif total_score 75: interp 基本合格存在局部不协调 else: interp 需重点改进存在明显代偿 story.append(Paragraph(f综合解读: {interp}, styles[BodyText])) # 缺陷帧表格 if len(defect_frames) 0: data [[缺陷帧序号, 对应时间(s)]] for f in defect_frames: time_sec f / 30.0 # 假设30fps data.append([str(f), f{time_sec:.1f}]) t Table(data, colWidths[2*inch, 2*inch]) t.setStyle(TableStyle([(BACKGROUND,(0,0),(-1,0), #CCCCCC), (GRID,(0,0),(-1,-1), 1, #000000)])) story.append(Paragraph(检测到的动作缺陷帧:, styles[Heading3])) story.append(t) # 膝角曲线图 plt.figure(figsize(6, 3)) plt.plot(knee_angles, b-, linewidth1.2) plt.title(右膝关节角度变化曲线, fontsize10) plt.xlabel(帧序号, fontsize8) plt.ylabel(角度(°), fontsize8) plt.grid(True, alpha0.3) plt.tight_layout() plt.savefig(knee_angle_plot.png, dpi300, bbox_inchestight) story.append(Image(knee_angle_plot.png, width6*inch, height3*inch)) doc.build(story) print(fReport saved to {video_name}_report.pdf) # 调用示例 generate_pdf_report(squat, 82.3, defect_frames, knee_angles)技术细节ReportLab的Image组件支持PNG但必须用width/height指定尺寸单位inch否则PDF中图片会拉伸变形bbox_inchestight防止matplotlib图标题被裁切。我坚持每份报告都附带原始膝角曲线——不是为了炫技而是当学员质疑“为什么我得分低”时这张图就是最硬的证据。它不讲主观感受只展示客观轨迹。过去三年我给27家健身房部署这套系统最常听到的反馈不是“分数准不准”而是“教练第一次能指着图说‘你看第42帧你膝盖内扣了12度’”。这种可追溯性才是AI健身落地的真正门槛。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

GitHub日榜速报实战:从趋势榜单中筛选高价值开源项目的完整方法论

GitHub日榜速报实战:从趋势榜单中筛选高价值开源项目的完整方法论

1. 日榜速报到底在解决什么问题每天早上打开代码托管平台,首页那个趋势榜单其实藏着不少信息量。很多人刷榜单就是图个热闹,看到眼熟的项目点个星就划走了,但如果你把日榜当成一个信息源来用,它能帮你解决三个很实际的问题&#x…

2026/10/12 23:55:52 阅读更多 →
用代码写视频:HyperFrames如何将网页动效渲染成MP4短视频

用代码写视频:HyperFrames如何将网页动效渲染成MP4短视频

最近几天一直在折腾一个有意思的开源项目,叫 HyperFrames。简单来说,它就是让你用写网页的方式做短视频:HTML 负责排版,CSS 负责动效,JavaScript 负责数据和时间轴,最后它会把整个网页按设定好的帧率逐帧捕…

2026/10/12 23:54:52 阅读更多 →
大数据平台安全策略:Kerberos、Sentry与Ranger的协同实践

大数据平台安全策略:Kerberos、Sentry与Ranger的协同实践

1. 从一次权限失控的排查说起:为什么大数据平台绕不开Kerberos、Sentry和Ranger刚接手一个离线数仓集群那会儿,我遇到过一次挺典型的事故:某个业务方的分析师在跑一段临时SQL时,误把一张核心明细表的全量数据导到了自己的临时目录…

2026/10/12 23:54:52 阅读更多 →

最新新闻

Socket编程预备:网络分层、TCP/UDP与字节序的底层思维框架

Socket编程预备:网络分层、TCP/UDP与字节序的底层思维框架

我见过太多人抱着《Unix网络编程》硬啃,代码敲了一百多行,却连bind()为什么有时要写地址、有时可以写INADDR_ANY都说不清。这不是代码量不够,而是缺了 socket 编程开始的“预备”环节。很多人把“预备”理解成装个 Linux、装好编译环境&#…

2026/10/13 3:41:54 阅读更多 →
Kettle 9.3 实战指南:安装配置、数据库连接、转换调度与避坑

Kettle 9.3 实战指南:安装配置、数据库连接、转换调度与避坑

/* 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 3:41:54 阅读更多 →
BERT多卡训练实战:从硬件配置到PyTorch DDP加速全指南

BERT多卡训练实战:从硬件配置到PyTorch DDP加速全指南

我最早接触 BERT 训练是在一块 16GB 显存的显卡上跑的,batch size 调到 4 就开始爆显存,那会儿我还以为是代码写得不对。后来把整机升级成多 GPU 服务器、用 PyTorch 的分布式训练把 BERT-base 训起来之后,才真正理解这类模型为什么"吃显…

2026/10/13 3:41:54 阅读更多 →
学校工资管理系统数据库设计实战指南

学校工资管理系统数据库设计实战指南

简介:本资源是一份面向高校数据库原理及应用课程学习者的高分课程设计实践材料,聚焦学校工资管理系统的完整开发实现,适用于数据库设计、SQL Server应用及课程设计报告撰写等教学场景。压缩包共3个文件,含1份详尽的Word版课程设计…

2026/10/13 3:41:54 阅读更多 →
AI模型路由实战:用星链4SAPI化解大模型调用成本失控

AI模型路由实战:用星链4SAPI化解大模型调用成本失控

上个月看到账单的时候,我整个人是懵的。调用次数只比上上个月涨了 12%,费用却翻了将近一倍。一开始我以为是模型厂商在悄悄调价,拉出明细一看才发现,问题根本不在单价,而在于所有请求无差别地打向了同一个高配模型&…

2026/10/13 3:41:54 阅读更多 →
以太坊智能合约可升级性实战:代理模式、存储布局与UUPS升级方案详解

以太坊智能合约可升级性实战:代理模式、存储布局与UUPS升级方案详解

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

日新闻

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

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

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

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/13 2:54:56 阅读更多 →
影刀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 阅读更多 →