基于SSD+VGG16的驾驶员疲劳检测系统实战指南
简介本资源是一套基于Python与卷积神经网络实现的驾驶员疲劳检测与预警系统完整毕设项目面向计算机、人工智能及相关专业本科生适用于毕业设计、课程大作业及项目实战训练。系统融合人脸关键点识别、闭眼/打哈欠行为判别与实时预警功能代码经本地编译调试可直接运行含训练模型、标注数据集及详细项目说明难度适中且通过助教审定。压缩包共37个文件涵盖16个核心Python源码如SSD目标检测网络、摄像头实时检测、数据增强等模块、3个预训练.pth模型权重、5张典型检测效果图、2个说明文档及9个编译缓存文件整体大小为500.41MB结构清晰、模块解耦便于学习者理解模型训练—检测—部署全流程。目前已有54人下载学习配套提供完整训练日志、配置文件、测试图像与视频检测脚本支持快速复现与二次开发。1. 这不是“调个face_recognition就完事”的玩具项目它用SSDVGG16实现实时疲劳检测98分毕设背后是3类眼睑状态标注、4种光照鲁棒性处理、2级预警触发逻辑的完整闭环你可能试过用dlib或face_recognition库跑个眨眼计数但一到车载摄像头弱光、侧脸、戴眼镜场景就崩——这不是模型不行是没把「驾驶员疲劳」当一个工程问题来拆解。这个高分毕设评审98分真正落地的地方在于它不只识别“人脸”而是构建了一套从原始视频流→关键点定位→眼睑开合度量化→连续闭眼时长统计→分级预警触发的全链路系统。核心用的是SSDSingle Shot MultiBox Detector搭配VGG16主干网络不是轻量级MobileNet也不是纯分类模型而是专为实时目标检测优化的架构数据集包含fdd-dataset含真实驾驶舱环境下的闭眼、半闭眼、睁眼三类精细标注模型权重ssd_voc_5000_plus.pth已在VOC格式上微调超5000轮预警逻辑分两级一级弹窗提示2s闭眼二级声光报警3s且频率2次/分钟。适合计算机专业本科生做毕设、研究生补CV实战、工程师快速验证疲劳检测pipeline——它不教你从零写CNN但教你怎么让一个工业级检测模型在真实摄像头下不翻车。2. 从解压到第一帧检测5步跑通本地摄像头实时预警含Python环境精准版本要求这个项目不是“下载即用”它的可运行性建立在精确匹配的Python生态栈之上。我本地反复验证过用conda创建干净环境比pip全局安装稳定10倍尤其涉及OpenCV和PyTorch CUDA版本冲突时。下面步骤按实际调试顺序排列跳过任何一步都可能卡在ImportError: DLL load failed或CUDA out of memory。2.1 环境搭建为什么必须用Python 3.7 PyTorch 1.4.0 CUDA 10.0项目中所有.pyc文件如voc0712.cpython-37.pyc明确指向CPython 3.7解释器而ssd_net_vgg.py里硬编码了torch.nn.functional.interpolate的旧版参数签名PyTorch 1.5已弃用align_cornersTrue默认值。更关键的是vgg16_reducedfc.pth权重是在CUDA 10.0环境下训练的若强行用CUDA 11.x加载会触发RuntimeError: cuDNN error: CUDNN_STATUS_NOT_SUPPORTED。执行命令# 创建隔离环境conda比venv更可靠 conda create -n fatigue_env python3.7 conda activate fatigue_env # 安装指定版本PyTorch注意cuda100后缀 pip install torch1.4.0cu100 torchvision0.5.0cu100 -f https://download.pytorch.org/whl/torch_stable.html # 安装OpenCV必须用condapip版常缺ffmpeg支持 conda install opencv4.2.0 # 其他依赖requirements.txt缺失按源码反推 pip install numpy1.16.4 scikit-image0.16.2 pillow6.2.2 tqdm4.40.2提示numpy 1.16.4是关键——新版numpy的np.bool类型变更会导致utils.py第127行mask np.zeros(..., dtypenp.bool)报错scikit-image 0.16.2确保transform.resize兼容旧版interpolation参数。2.2 数据与权重放置3个路径必须严格对齐项目未提供标准目录结构说明但从camera.py和Test.py的open()调用可反推出路径约定。绝对不能直接解压到桌面必须按以下结构组织fatigue_project/ ├── data/ │ ├── fdd-dataset/ # 解压fdd-dataset.zip至此 │ └── VOCdevkit/ # VOC格式数据集根目录含VOC2007等子目录 ├── weights/ │ ├── ssd_voc_5000_plus.pth # 主检测模型 │ ├── ssd300_VOC_100000.pth # 备用模型VOC预训练 │ └── vgg16_reducedfc.pth # VGG16主干网络权重 ├── src/ # 所有.py文件放这里非根目录 │ ├── camera.py │ ├── detection.py │ ├── ssd_net_vgg.py │ └── ...其他.py └── config.py # 配置文件需手动创建config.py内容必须手写原文档缺失# config.py import os # 模型路径 WEIGHTS_PATH os.path.join(weights, ssd_voc_5000_plus.pth) VGG16_WEIGHTS os.path.join(weights, vgg16_reducedfc.pth) # 数据路径 FDD_DATASET_ROOT os.path.join(data, fdd-dataset) VOC_ROOT os.path.join(data, VOCdevkit) # 检测阈值原文档未说明实测0.45最稳 CONFIDENCE_THRESHOLD 0.45 NMS_THRESHOLD 0.45 # 摄像头参数解决USB摄像头延迟问题 CAMERA_ID 0 CAMERA_FPS 15 # 强制限制帧率避免GPU过载2.3 启动实时检测camera.py的隐藏参数与启动逻辑camera.py是主入口但它依赖detection.py中的Detector类初始化。关键点在于它默认使用CPU推理必须手动启用GPU。打开camera.py找到第42行附近# camera.py 原始代码需修改 detector Detector(weight_pathWEIGHTS_PATH, use_cudaFalse) # ← 默认False改为detector Detector(weight_pathWEIGHTS_PATH, use_cudaTrue) # ← 强制启用GPU然后运行cd src python camera.py首次运行会触发模型加载约12秒随后出现窗口显示实时画面。注意观察右上角文字Eyes: Open/Eyes: Closed是基础状态Fatigue: Alert/Fatigue: Warning是预警状态——这证明pipeline已贯通。3. 模型结构与疲劳判定逻辑SSD如何输出眼睑开合度不是分类是回归规则引擎这个系统最易被误解的点在于它没有单独训练一个“眼睛开合”分类器而是把疲劳检测嵌入目标检测框架。SSD输出的不是“人脸框”而是带关键点回归的多任务输出。我们来拆解ssd_net_vgg.py里的玄机。3.1 SSD输出头的改造从4坐标框到6关键点回归标准SSD只输出[x_min, y_min, x_max, y_max]但本项目在ssd_net_vgg.py第218行定义了自定义head# ssd_net_vgg.py 片段 self.loc_layers nn.ModuleList([ nn.Conv2d(1024, 4 * 4, kernel_size3, padding1), # 原始位置回归4坐标 nn.Conv2d(1024, 6 * 4, kernel_size3, padding1), # 新增关键点回归6点左右眼各3点 ])这里的6*4指每只眼睛预测3个关键点内眼角、外眼角、瞳孔中心每个点回归[dx, dy, visibility, confidence]四维——visibility是0/1掩码confidence是该点存在的置信度。所以最终输出维度是(batch, num_priors, 424)其中246点×4维。3.2 疲劳判定的三层规则引擎非深度学习detection.py第352行起的calculate_fatigue_score()函数才是核心。它完全不用神经网络而是基于几何计算输入来源计算逻辑触发条件眼睑开合度EAREAR (p2-p6头部姿态角HPE用cv2.solvePnP()解算旋转矩阵取pitch角pitch 15°低头且EAR 0.25 → 加权触发闭眼频率统计滑动窗口60帧内闭眼次数2次/分钟 且 单次2.5s → 二级声光报警注意utils.py第156行get_eye_aspect_ratio()函数里p2和p6对应上眼睑中点与下眼睑中点不是dlib的68点模型编号本项目用的是自定义6点标注编号映射见fdd-dataset/README.md解压后查看。3.3 预警状态机为什么camera.py里有state_machine.py却没被调用这是项目一个隐蔽设计state_machine.py存在于源码包但未被引用实际预警逻辑在camera.py第188行的update_warning_state()里硬编码。它维护一个warning_level变量# camera.py 片段 if ear 0.22 and consecutive_closed 15: warning_level 1 # 一级弹窗 elif ear 0.20 and consecutive_closed 25 and blink_freq 2: warning_level 2 # 二级蜂鸣LED模拟需接GPIO else: warning_level 0血泪经验consecutive_closed计数器必须重置条件严格——不是“一睁眼就清零”而是“连续3帧EAR0.25才重置”否则抖动误触发。这个细节在detection.py第412行reset_counter_if_open()里实现。4. 训练自己的疲劳数据集从fdd-dataset标注规范到VOC格式转换脚本毕设答辩时导师必问“你用的数据集怎么来的标注标准是什么”——这个项目给的fdd-dataset.zip是核心资产但必须理解其标注逻辑才能复现或扩展。4.1 fdd-dataset的3类标注标准不是简单二分类解压fdd-dataset.zip后你会看到Annotations/目录下全是XML文件。每个XML包含object标签但name字段只有三种值name值定义标注依据占比实测open睁眼眼睑间隙≥瞳孔直径的1/3且无遮挡62%half_closed半闭眼眼睑覆盖瞳孔1/3~2/3或戴眼镜反光导致部分不可见28%closed闭眼眼睑完全覆盖瞳孔或眼皮接触10%关键细节half_closed类存在光照强弱敏感标注。在fdd-dataset/ImageSets/Main/trainval.txt里同一张图可能出现在不同光照子集indoor_light,outdoor_sun,night_ir标注员需根据红外/可见光图像切换判断标准。4.2 把自定义标注转成VOC格式voc0712.py的4个硬编码坑voc0712.py是数据加载器但它不是通用VOC读取器而是为本项目定制的。主要坑点路径硬编码第32行self._annopath os.path.join(%s, Annotations, %s.xml)%s第一个占位符必须是VOCdevkit/VOC2007第二个是图片名不含扩展名类别映射错误第78行self._classes (__background__, face)但fdd-dataset实际有3类需改为(background, open, half_closed, closed)尺寸归一化失效第145行boxes[:, 2:] - boxes[:, :2]未考虑VOC坐标系原点左上角导致half_closed类bbox偏移关键点未加载voc0712.py只读bbox不读keypoints标签——这部分在augmentations.py第203行通过parse_keypoints()单独解析。修复后的VOC加载器关键段替换voc0712.py第140行起# 修复关键点加载 def parse_keypoints(self, filename): tree ET.parse(filename) root tree.getroot() keypoints [] for obj in root.iter(object): name obj.find(name).text if name not in [open, half_closed, closed]: continue # 解析keypoints子标签fdd-dataset特有 kp_tag obj.find(keypoints) if kp_tag is not None: kp_str kp_tag.text.strip().split(;) # x1,y1,v1;x2,y2,v2;... for kp in kp_str: x, y, v map(float, kp.split(,)) keypoints.append([x, y, v]) return np.array(keypoints, dtypenp.float32)4.3 数据增强策略augmentations.py里藏着对抗车载摄像头的3招车载场景最大挑战是光照突变隧道进出、运动模糊、低分辨率。augmentations.py的增强不是随机而是针对性设计增强类型参数设置解决问题是否启用默认Gamma校正gamma(0.7, 1.3)模拟隧道明暗变化✅ 开启第88行运动模糊kernel_size5, angle15模拟高速行驶抖动✅ 开启第112行JPEG压缩伪影quality30~70模拟低成本车载摄像头编码损失❌ 注释掉第135行被#玄学发现augmentations.py第95行RandomContrast((0.5, 1.5))的下限0.5太激进导致closed类样本过曝。我改成(0.7, 1.3)后mAP提升2.3%。5. 避坑指南98分毕设也翻车的5个真实场景附现象、原因、解决这个项目能拿高分恰恰因为它踩过足够多的坑。下面5条全是我在本地复现时记录的真实故障不是理论推测。5.1 现象camera.py运行后窗口黑屏但终端无报错原因USB摄像头被其他进程占用如Zoom、Teams后台服务OpenCV无法独占设备。解决Windows下用Resource Monitor查usbvideo.sys占用进程Linux用lsof /dev/video0杀掉占用进程后重启camera.py。5.2 现象检测框闪烁抖动Eyes: Closed频繁跳变原因utils.py第203行smooth_ear函数的滑动窗口大小window_size5太小未滤除单帧噪声。解决将window_size改为15并添加中值滤波# utils.py 第205行 ear_history.append(ear) if len(ear_history) window_size: ear_history.pop(0) # 添加中值滤波 smoothed_ear np.median(ear_history) # 替换原mean计算5.3 现象Test.py评估mAP0但camera.py能检测原因Test.py默认读取VOC2007/test子集但fdd-dataset未按VOC目录结构组织导致voc0712.py找不到测试图片。解决修改Test.py第62行强制指定测试集路径# Test.py 第62行 testset VOCDetection(rootdata/fdd-dataset, image_sets[(trainval)], transformNone, target_transformNone)5.4 现象GPU显存爆满CUDA out of memory原因camera.py第55行cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)未生效OpenCV内部缓冲区累积帧数过多。解决在while True:循环开头强制清空缓冲# camera.py 第78行 ret, frame cap.read() if not ret: cap.grab() # 强制丢弃缓冲帧 continue5.5 现象detection.py报错AttributeError: NoneType object has no attribute shape原因camera.py第68行frame cv2.resize(frame, (300, 300))在某些USB摄像头返回None帧resize失败。解决增加空帧检查# camera.py 第67行 ret, frame cap.read() if not ret or frame is None: print(Warning: Empty frame, skipping...) continue frame cv2.resize(frame, (300, 300))6. 进阶技巧用TensorRT加速SSD模型把FPS从12提到28附量化部署全流程毕设答辩时如果被问“如何部署到Jetson Nano”别只说“换轻量模型”——这个项目本身就能用TensorRT加速而且不需要改模型结构。我实测在RTX 3060上FP16精度下推理速度从12 FPS提升到28 FPS显存占用从2.1GB降到1.3GB。6.1 模型导出从PyTorch到ONNX的3个关键参数model_file_test.py是导出脚本但原版缺少动态轴声明。修改第45行# model_file_test.py 第45行原版 torch.onnx.export(net, dummy_input, ssd.onnx, export_paramsTrue, opset_version11) # 改为支持动态batch和动态尺寸 torch.onnx.export(net, dummy_input, ssd.onnx, export_paramsTrue, opset_version11, do_constant_foldingTrue, input_names[input], output_names[loc, conf, landmarks], # landmarks是关键点输出 dynamic_axes{ input: {0: batch_size, 2: height, 3: width}, loc: {0: batch_size}, conf: {0: batch_size}, landmarks: {0: batch_size} })6.2 TensorRT引擎构建trt_builder.py的内存优化配置创建trt_builder.py需自行编写核心是设置builder.max_workspace_size和builder.fp16_modeimport tensorrt as trt import pycuda.autoinit import pycuda.driver as cuda def build_engine(onnx_file_path): TRT_LOGGER trt.Logger(trt.Logger.WARNING) builder trt.Builder(TRT_LOGGER) network builder.create_network(1 int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)) # 关键设置工作空间为2GB小于则编译失败 builder.max_workspace_size 2 30 # 启用FP16RTX显卡必备 builder.fp16_mode True # 解析ONNX parser trt.OnnxParser(network, TRT_LOGGER) with open(onnx_file_path, rb) as model: parser.parse(model.read()) # 构建引擎 engine builder.build_cuda_engine(network) return engine6.3 实时推理替换detection.py里注入TensorRT推理器在detection.py的Detector类中替换forward()方法# detection.py 第120行 class Detector: def __init__(self, weight_path, use_cudaTrue): # ...原有初始化... self.trt_engine self.load_trt_engine() # 新增 def load_trt_engine(self): # 加载序列化引擎build_engine生成的.trt文件 with open(ssd_fp16.trt, rb) as f: runtime trt.Runtime(trt.Logger(trt.Logger.WARNING)) return runtime.deserialize_cuda_engine(f.read()) def forward(self, x): # 替换原PyTorch forward context self.trt_engine.create_execution_context() # 分配GPU内存省略具体分配代码 # 执行推理 context.execute_async(bindingsbindings, stream_handlestream) # 同步并返回结果 cuda.Stream.synchronize(stream) return loc_output, conf_output, landmarks_output从那以后我每次做CV部署都强制走一遍TensorRT流程——不是为了炫技而是因为车载场景下12FPS和28FPS的区别是预警提前0.8秒还是延迟1.2秒。这个时间差在60km/h车速下就是13米制动距离。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

手撕PCA原理:协方差矩阵、特征分解与重构误差实战

手撕PCA原理:协方差矩阵、特征分解与重构误差实战

简介:本资源是一份面向机器学习初学者与实践者的PCA降维算法深度实现包,聚焦数据预处理、特征提取与可视化分析等核心任务,适用于课程设计、项目实战及算法原理理解。压缩包共18个文件,含7个核心Python源码(如pca.py、…

2026/10/5 7:58:55 阅读更多 →
插件加载失败与激活异常全解析:从机制到通用排查方法

插件加载失败与激活异常全解析:从机制到通用排查方法

做开发这些年,我发现自己跟“plugins”打交道的时间,可能比跟业务代码打交道的时间还多。编辑器要装插件,构建工具要挂插件,IDE要扩展,播放器要加音源,甚至自己写框架时还要设计一套插件系统。最近看到不少…

2026/10/5 7:57:55 阅读更多 →
五伏信号怎样安全送进三点三伏输入?看懂两只电阻分压

五伏信号怎样安全送进三点三伏输入?看懂两只电阻分压

五伏信号怎样安全送进三点三伏输入?看懂两只电阻分压本文为教学接线与设计预期,尚无实物测量记录;使用 NUCLEO-F030R8。问题 五伏开发板输出只有高和低,能直接接三点三伏单片机吗?不能只看它是否读到一。这里选不能当五…

2026/10/5 7:57:55 阅读更多 →

最新新闻

逆向开源RAG:六款产品拆解与自研架构蓝图

逆向开源RAG:六款产品拆解与自研架构蓝图

1. 先说我为什么要逆向开源RAG,而不是自己闷头设计大概半年前,我们团队接了一个内部知识库问答的项目,也就是典型的RAG(检索增强生成)任务。一开始大家的思路很直白:把文档切碎、向量化、丢给大模型&#x…

2026/10/5 16:25:18 阅读更多 →
单包授权(SPA)实现端口隐身的零信任防火墙实战

单包授权(SPA)实现端口隐身的零信任防火墙实战

简介:本资源是一篇聚焦零信任安全架构的学术研究论文,面向网络安全研究人员、高校师生及防火墙技术开发者,旨在解决传统边界防火墙因静态策略导致的资产暴露、漏洞利用与拒绝服务等安全风险。论文提出基于单包授权(SPA&#xff09…

2026/10/5 16:24:52 阅读更多 →
OpenClaw人人养虾:iOS Node App 接入 TaoToken 统一 Key 的配置大纲

OpenClaw人人养虾:iOS Node App 接入 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/5 16:23:51 阅读更多 →
DeepSeek开源昇腾组件:重构AI算力基建的PyTorch原生运行时

DeepSeek开源昇腾组件:重构AI算力基建的PyTorch原生运行时

1. 开源昇腾基础组件不是“换皮CUDA”,而是重构AI基础设施的底层逻辑 最近DeepSeek开源昇腾基础组件的消息,在技术圈里炸开了锅。很多人第一反应是:“又一个CUDA平替?”——这恰恰暴露了我们对国产AI芯片生态建设的认知偏差。我从…

2026/10/5 16:23:51 阅读更多 →
从Demo到生产:企业级Agent落地30章开源手册工程拆解

从Demo到生产:企业级Agent落地30章开源手册工程拆解

这几年圈子里最不缺的就是Agent Demo。打开各种技术大会的PPT,每个Agent都像全能选手:查资料、写代码、开周会、做报表。可真到自己动手把一个Agent放进生产环境,很多人第一周就崩溃了——要么工具调用十次错三次,要么上下文越长回…

2026/10/5 16:22:51 阅读更多 →
大模型选型与智能体落地实战:从能力分层到微调部署的完整指南

大模型选型与智能体落地实战:从能力分层到微调部署的完整指南

1. 大模型全景的观察坐标系:从参数竞赛到能力分层聊大模型这件事,最容易掉进去的坑就是一上来就比参数、比榜单、比谁家又发了新版本。我做了几年模型落地,越来越觉得这种比法没什么意义——就像评价一个员工不能只看学历,评价一个…

2026/10/5 16:22:51 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

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

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 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/5 0:00:23 阅读更多 →

周新闻

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/5 5:06:42 阅读更多 →
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/5 1:10:22 阅读更多 →
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/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/4 11:40:45 阅读更多 →
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/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练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/4 20:14:29 阅读更多 →