基于OpenCV与LBPH的人脸识别考勤系统:毕设源码实战拆解
简介基于OpenCV的人脸识别考勤签到系统是一套完整可运行的毕业设计项目面向计算机相关专业学生及需要项目实战的开发者可用于毕业设计、课程设计、期末大作业或初期立项演示。项目代码经过验证稳定评审得分98分核心功能涵盖摄像头实时人脸检测、人脸模型训练、考勤记录与GUI界面操作并附带详细注释便于理解算法流程和二次开发。资源包共43个文件以Python源文件、编译缓存pyc为主辅以Haar级联分类器XML文件、Qt界面UI文件及需求说明txt等按界面层、功能逻辑层与人脸识别模块清晰组织目录结构直观易用。压缩包整体仅685KB环境依赖简洁部署门槛较低。目前已有254人学习下载适合从OpenCV入门到人脸识别项目落地的进阶参考也可直接作为本科毕设的基础框架或课程设计原型。1. 基于OpenCV的人脸识别考勤系统能跑通的毕设源码该怎么拆做毕设最怕的不是题目难而是拿到一份源码却跑不起来。这个基于OpenCV人脸识别的考勤签到系统用的是Haar级联检测人脸 LBPH特征脸识别 PyQt5做GUI界面数据流是从摄像头抓帧、检测、识别再落到签到记录。对于计算机相关专业的学生来说它最大的价值不是算法有多前沿而是整条链路完整——摄像头、界面、数据库、签到逻辑都有能直接当课程设计交也能在毕设答辩现场演示签到成功的效果。本文把这套源码的目录结构、运行流程、关键参数和坑都拆开讲清楚让你拿到手不是对着黑窗口发愁而是半小时内跑起来。2. 系统结构与识别原理先看懂这四层再动手拿到源码包先别急着运行我一般会先把目录结构理一遍。这个项目的组织方式很典型是标准的PyQt5工程项目分层看懂它的层次关系后面改代码、加功能都会顺畅很多。2.1 源码目录里到底有哪些文件解压后核心文件集中在主目录下我按运行顺序给你排一下文件作用关键依赖MainWindow.py程序入口负责启动主界面PyQt5QtUI.pyUI主窗口定义是核心界面容器PyQt5CamShow.py摄像头采集与画面显示的线程类负责把OpenCV帧转成Qt可显示的图像OpenCV、PyQt5Camo_open.py摄像头业务逻辑包括画框、签到动作触发OpenCVface_model.py人脸识别的核心封装加载模型、注册人脸、预测身份OpenCV、NumPyFunctional_function.py业务工具函数比如时间格式化、姓名与ID映射标准库upload.py签到记录处理逻辑负责写入和查询标准库requirements.txt依赖清单pip安装用无haarcascade_frontalface_default.xml、haarcascade_frontalface_alt2.xml、haarcascade_eye_tree_eyeglasses.xml是OpenCV自带的级联分类器模型文件用来做人脸和眼睛检测。另外还有ui文件夹里面是CamShow.ui、upload.ui这种Qt Designer生成的界面文件对应CamShow.py和upload.py里的视图层代码。这个结构告诉你三件事第一UI和业务逻辑是分离的改界面不用动识别代码第二人脸检测用的是OpenCV传统方法不是深度学习所以运行不吃GPU普通笔记本就能扛住第三主窗口程序是MainWindow.py不是某个叫main.py的文件这个别找错了。2.2 Haar级联检测与人脸对齐的配合逻辑Haar级联分类器在OpenCV里通过detectMultiScale调用它做的事情是在灰度图上用滑动窗口扫描匹配训练好的特征模板。这个项目里用了三个级联文件默认加载的是haarcascade_frontalface_default.xml检测不全时会尝试alt2眼睛检测作为辅助验证防止把非人脸区域误判成人脸。常见做法是先检测人脸再在脸部区域内检测眼睛确认双眼位置后做简单的几何对齐。这套逻辑在源码里的表现是face_model.py先执行人脸检测拿到矩形框再根据眼睛位置做旋转校正最后把归一化后的脸部图像传给LBPH识别器。这个流程虽然老但对考勤场景是够用的因为考勤机上人脸角度变化不大不像安防监控那样需要各种姿态适配。如果你后面想换成MTCNN或者RetinaFace只需要替换检测模块识别链路不用动。2.3 LBPH识别器的两个关键参数LBPHLocal Binary Pattern Histogram把脸部图像划分成若干小区域在每个区域提取局部二值模式直方图再拼接成整张脸的特征向量。这个项目里初始化识别器的代码长这样import cv2 # radius: 邻域半径越大特征覆盖范围越广 # neighbors: 邻域采样点数越大对噪声越敏感 # grid_x, grid_y: 将图像划分的格子数决定直方图的粒度 recognizer cv2.face.LBPHFaceRecognizer_create( radius1, neighbors8, grid_x8, grid_y8 )参数含义要清楚radius是采样半径默认1意味着只比较紧邻的像素人脸稍微侧一点特征就变了grid_x和grid_y是水平、垂直方向切成几块8x8的网格是比较常见的配置网格越多位置信息越精细但每个格子的统计样本变少抗噪声能力会下降。训练时调用recognizer.train(faces, labels)faces是所有归一化后的人脸图像列表labels是对应的人名ID。预测时调用predict方法返回(label, confidence)这里有个新人特别容易踩的坑LBPH的confidence是欧氏距离值越小越确定和深度学习里softmax输出的置信度语义相反很多人第一次都搞反了。实际测试里同一人正脸、光线稳定的情况下confidence值通常在50到90之间。如果超过120基本就是不能信任的匹配。我在使用中一般把判定阈值定在100低于100才认为签到有效这个值要根据你实验室的摄像头和光线条件自己调不是写死的。2.4 签到记录与UI线程的协作考勤签到不是识别到人脸就完事还要防止重复签到、记录时间、显示结果。这套源码里的做法是在Camo_open.py里做识别识别结果通过信号机制传给Qt主线程主线程调用upload.py里的写入函数把签到记录落盘。这里特别注意一点OpenCV的VideoCapture读取摄像头帧是阻塞操作如果直接放在Qt主线程里界面会卡死。这个项目用CamShow.py单独起了一个线程做视频采集采集到帧后通过信号发到界面刷新这个设计是PyQt5 OpenCV项目里标准且正确的做法值得照着学。3. 部署与运行从环境配置到界面登录代码结构看懂了接下来就是把它跑起来。这一章从环境准备到启动程序每一步都给可执行的命令照着敲就行。这里会遇到两个高频问题Python版本选哪个、cv2装不上怎么办。3.1 Python环境与依赖安装先说版本结论Python 3.8 最稳。源码的__pycache__里混了cpython-37和cpython-39的字节码文件说明作者在3.7和3.9上都跑过我实测3.8兼容性最好因为opencv-contrib-python在3.8下有预编译的wheel包不需要本地编译。创建虚拟环境再装依赖别直接往系统Python里塞# 创建并激活虚拟环境 python -m venv face_env # Windows系统激活 face_env\Scripts\activate # Linux/macOS系统激活 source face_env/bin/activate # 升级pip并安装依赖 python -m pip install --upgrade pip pip install -r requirements.txt如果requirements.txt里给的版本号和你本机冲突手动指定版本装一遍# 注意要用opencv-contrib-python不是opencv-python # 因为LBPHFaceRecognizer_create在contrib包里 pip install opencv-contrib-python4.5.4.58 pip install PyQt55.15.9 pip install numpy1.21.6这里有个坑很多人pip install opencv-python装完发现cv2.face这个子模块不存在报AttributeError: module cv2 has no attribute face因为人脸识别模块在OpenCV的contrib扩展包里必须装opencv-contrib-python。这是个老坑但每年都有人踩提醒一次。3.2 一路把测试demo跑明白依赖装好后先别直接启动整个程序因为直接启动MainWindow.py会弹登录界面如果有学生端管理员端的权限区分你不清楚账号密码会卡在登录窗。我建议先跑一个最小测试确认OpenCV相关功能正常# test_face_demo.py import cv2 # 加载训练好的识别器 recognizer cv2.face.LBPHFaceRecognizer_create() recognizer.read(face_model.yml) # 加载人脸检测器 face_cascade cv2.CascadeClassifier( cv2.data.haarcascades haarcascade_frontalface_default.xml ) print(OpenCV版本:, cv2.__version__) print(识别器加载成功:, recognizer is not None) print(人脸检测器加载成功:, face_cascade.empty() is False)这段代码验证两件事cv2.face模块存在face_model.yml文件路径写对了。如果face_model.yml不存在需要先跑训练流程生成它。3.3 启动主程序并完成一次签到演示环境验证通过后启动入口python MainWindow.py启动后程序会打开摄像头画面默认摄像头是设备0即笔记本内置摄像头。如果没图像检查设备编号和占用见第4章避坑部分。签到演示流程一般是注册人脸输入姓名拍几张脸照→ 识别摄像头里出现你的人脸→ 触发签到程序自动记录时间和姓名→ 打卡成功显示在界面上。摄像头在识别时的常见做法是检测到人脸就画一个绿色矩形框同时在框上方显示名字和confidence值。这个可视化反馈很关键毕设答辩时评委要看的就是这个效果。3.4 识别人脸需要先注册人脸这往往是新人搞不清顺序的地方。face_model.py里有两类操作一个是注册录入新人脸一个是识别比对已有库。注册流程是采集当前帧的人脸区域转灰度、归一化到统一尺寸通常是100x100提取LBPH特征和对应的姓名ID一起送入训练器训练最后保存成face_model.yml。从使用角度讲你必须在签到前把每个人的脸都注册一次不然识别器不认识任何人。注册的人越多同一个人的照片要尽量多样化——不同角度、不同光线、戴不戴眼镜各拍几张不要让程序训练出来的模型过拟合到某一个特定姿态。这是后面识别准确率的决定性因素比调参数影响大得多。4. 避坑指南与常见问题排查这个项目我前后帮人看过十几次大部分问题出现在环境、摄像头和模型文件上。以下是按遇到的问题频率从高到低排的。4.1 现象ModuleNotFoundError: No module named cv2这是环境装错时最典型的报错看着是OpenCV没装实际上有很多种原因。原因分析和解决分三步走# 第一步确认当前是哪个Python解释器在跑 where python python -c import sys; print(sys.executable) # 第二步确认是否装进了当前环境 pip list | findstr opencv # 第三步直接装contrib版本别用opencv-python pip uninstall opencv-python opencv-contrib-python -y pip install opencv-contrib-python4.5.4.58如果用的是PyCharm检查Project Interpreter有没有选到虚拟环境路径。很多翻车情况是终端里能用python跑通但PyCharm里跑就报找不到cv2因为解释器指到了系统自带的Python。统一虚拟环境路径问题就消失。4.2 现象cv2.error: OpenCV(4.4.0) ...报错后半段一般是assert failed或者与detectMultiScale相关的参数错误。OpenCV 4.4.0 这个版本在Windows下有时候会碰到Haar级联分类器路径找不到的问题。原因是代码里如果用相对路径写haarcascade_frontalface_default.xml但当前工作目录不在源码根目录下文件就加载不到。解决方法是总用绝对路径拼接import cv2 import os # 用os.path.join拼接路径避免斜杠方向问题 cascade_path os.path.join( os.path.dirname(__file__), haarcascade_frontalface_default.xml ) face_cascade cv2.CascadeClassifier(cascade_path)4.3 现象摄像头画面是黑的或者打不开这个项目里CamShow.py负责读取摄像头如果它没报错但画面黑屏常见原因是摄像头被其他程序占用或者笔记本摄像头的权限没打开。Windows在设置里把摄像头权限放开macOS在系统设置里给Python授权摄像头访问权限。还有一个玄学问题OpenCV默认用cv2.VideoCapture(0)但有些笔记本的0号设备是红外摄像头或者虚拟摄像头。多试几个编号1、2、3都跑一遍import cv2 for idx in range(4): cap cv2.VideoCapture(idx) if cap.isOpened(): print(f设备 {idx} 可用) cap.release()4.4 现象签到一直显示“未知人员”或识别失败率极高这个和LBPH的训练策略直接相关。最常见原因是注册人脸时照片太单一全是正面无表情、同一个光照环境导致模型特征表示能力弱。解决方法是注册阶段每种角度和光线条件下拍3到5张光线不要正对光源有一点侧光反而能提升泛化能力。另一个容易忽略的地方face_model.py里如果predict返回的confidence均值大于100你需要把判定阈值提高一点或者在代码里加一条调试输出把原始confidence值显示出来label, confidence recognizer.predict(gray_face) print(f识别结果: label{label}, confidence{confidence}) # 阈值调整 100 才认为是有效识别 if confidence 100: name id_map.get(label, 未知) print(f签到成功: {name}) else: print(未匹配到有效人员)4.5 现象PyQt5界面卡顿或闪退这种问题大概率是把VideoCapture.read()放进了主线程导致界面线程被阻塞。正确做法是用QThread跑采集循环每读到一帧通过信号发到界面刷新。这个项目里CamShow.py就是干这个的你如果二次改代码一定不要把采集逻辑挪回主线程。还有一个小坑Qt界面里显示OpenCV帧需要转换色彩空间从BGR转RGB如果忘了转换整个画面会偏蓝偏绿像是戴了墨镜这个不算报错但很影响观感。5. 进阶玩法把LBPH换掉、加活体检测、做数据增强当你能正常签到、记录、查询的时候这套系统就已经具备毕设答辩的功能完整度了。如果想冲刺高分有几个低成本、高显示度的进阶方向按性价比排序。5.1 用MTCNN替换Haar级联检测Haar级联对侧面人脸和遮挡人脸确实拉跨你可以用MTCNN做人脸检测检测框更准在毕设答辩时抛出一句“Haar在侧脸场景掉点明显我引入MTCNN做检测前端”老师基本都会认可。安装方式pip install mtcnn替换检测的核心代码注意MTCNN输入是彩色图返回的是包含人脸框、关键点坐标的字典列表from mtcnn import MTCNN import cv2 detector MTCNN() def detect_faces(image_bgr): # MTCNN需要RGB格式输入 image_rgb cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB) results detector.detect_faces(image_rgb) boxes [] for res in results: x, y, w, h res[box] # 过滤掉明显太小的检测框 if w 50 or h 50: continue boxes.append((x, y, w, h)) return boxesMTCNN检测一张图的时间大约是Haar的5到10倍但考勤是单帧检测不追求实时视频流的高帧率所以这个性能开销是可以接受的。你的答辩话术里可以说“精度优先单帧延迟约150ms满足考勤门禁场景”。替换之后识别率提升是肉眼可见的侧脸和低头基本都能框住。5.2 加一个简单的活体检测毕设答辩最容易被问到的尖锐问题就是“照片能不能冒充签到”。纯静态人脸识别肯定挡不住照片攻击加一个基于眼睛眨眼检测的活体判断实现成本不高但回答问题时特别硬气。实现思路是连续检测双眼状态正常人在两三秒内会有自然的眨眼动作而照片里眼睛状态是固定的import cv2 def check_blink(eye_open_ratio_list): # 输入最近5帧的眼睛开合度序列 # 如果有从0闭眼到1睁眼的跳变认为是活体 for i in range(1, len(eye_open_ratio_list)): diff eye_open_ratio_list[i] - eye_open_ratio_list[i - 1] if diff 0.5: return True return False实际的eye_open_ratio计算比较复杂一般用眼睛轮廓的纵横比EAREye Aspect Ratio替代。OpenCV提供的人脸关键点检测器可以直接输出眼睛关键点坐标计算出EAR值。如果EAR在连续帧里有明显波动判定为活体。如果一直保持恒定的高值很可能是照片。这个功能加到毕设里相当于一个完整的加分模块而且工作量和难度可控。5.3 留住数据增强和调参实验记录无论你选哪个方向我建议你都保留一组对比实验的记录Haar LBPH的基线准确率、换成MTCNN之后的准确率、加活体检测之后误识别率的变化。把这三组数据做成表格放进论文附录整个工作的完整度立刻不一样。从那以后我每次处理这种毕设项目都强制走一遍“先看目录结构 → 装环境跑demo → 替换核心模块 → 记录对比数据”的流程拿到任何一套源码都不会再一头雾水。这套考勤系统的代码结构相当规整基于PyQt5的分层设计也值得反复看你按第3章的流程跑通一遍再按第5章的思路加一两个模块今年的毕设就稳了。希望这些拆解能帮到你。本文还有配套的精品资源点击获取

相关新闻

二叉树进阶攻略:递归、迭代、层序与经典题型全解析

二叉树进阶攻略:递归、迭代、层序与经典题型全解析

算法训练营第十四天:二叉树(2) 到了第十三天,我们基本上把二叉树的"骨架"摸清了:节点结构、树的定义、递归遍历的套路。那十四天干嘛?两个字:深化。二叉树(2)…

2026/10/12 14:48:18 阅读更多 →
卫星通信入网三关:物理连通、协议接入与业务可用性验证

卫星通信入网三关:物理连通、协议接入与业务可用性验证

简介:本资源是一份面向通信工程专业学生、卫星地面站建设工程师及网络测试技术人员的实务型教学课件,系统讲解卫星通信网络从建站、入网验证到系统测试的全流程规范与关键技术。内容覆盖新地球站入网申请审批(国内经原邮电部电信总局、国际由…

2026/10/12 14:48:18 阅读更多 →
Agent记忆系统实战:上下文窗口限制与MCP统一工具记忆

Agent记忆系统实战:上下文窗口限制与MCP统一工具记忆

1. 先理解Agent为什么“记不住”:上下文窗口的边界与失真1.1 上下文窗口是工作台,不是仓库我最早做Agent原型时犯过一个很天真的错误:以为模型能记住对话里出现过的所有信息。后来被现实狠狠教育了一课——上下文窗口更像一张有限大小的办公桌…

2026/10/13 20:11:42 阅读更多 →

最新新闻

jQuery Mobile按钮组件详解:从增强机制到实战踩坑

jQuery Mobile按钮组件详解:从增强机制到实战踩坑

如果你手里还在维护 jQuery Mobile 项目&#xff0c;一定对它的按钮组件印象深刻。这个框架版本不算新了&#xff0c;但按钮这个基础控件的设计思路&#xff0c;放在今天看依然有些“超前”&#xff1a;它把普通的<a>、<input>、<button>标签重新包装&#x…

2026/10/13 20:12:08 阅读更多 →
Claude Code 终端 AI 编程助手速查:安装、权限、工作流与避坑指南

Claude Code 终端 AI 编程助手速查:安装、权限、工作流与避坑指南

1. 开工之前&#xff1a;摸清 Claude Code 的运作逻辑再上手1.1 终端里的 AI 结对编程搭档&#xff0c;到底能干什么先抛开那些花哨的宣传语&#xff0c;直接说我的真实感受&#xff1a;Claude Code 就是一个住在终端里的 AI 结对编程搭档。它不像传统 IDE 插件那样只负责补全代…

2026/10/13 20:12:08 阅读更多 →
博士求职年龄放宽至45岁:中年科研人员的机遇与准备策略

博士求职年龄放宽至45岁:中年科研人员的机遇与准备策略

消息传开之后&#xff0c;我身边几个工作群几乎在同一时间炸开了锅。一位在企业里做技术带团队的老朋友&#xff0c;博士毕业快十年&#xff0c;早就把回高校的想法抛到脑后&#xff0c;最近却开始四处打听哪里有合适的招聘信息&#xff1b;另一位在某个公司做研发管理、今年刚…

2026/10/13 20:12:08 阅读更多 →
tidyr数据整理核心:从混乱到整洁数据的七步实战

tidyr数据整理核心:从混乱到整洁数据的七步实战

1. 为什么今天还在认真学 tidyr&#xff1f;——不是为了写代码&#xff0c;而是为了把数据“理清楚”你有没有过这种经历&#xff1a;拿到一份Excel表格&#xff0c;列名是“客户ID_2023_Q3”“销售额_含税_新口径”“备注_临时_勿删”&#xff0c;打开R读进来&#xff0c;str…

2026/10/13 20:12:08 阅读更多 →
手写一个支持多目录挂载的 MCP Server:动态工作区路径切换实战

手写一个支持多目录挂载的 MCP Server:动态工作区路径切换实战

在多仓库协同或前后端分离的项目结构里&#xff0c;让大模型 Agent 自动分析代码时最常踩的坑&#xff0c;就是工作区目录的频繁切换。官方原生的 MCP&#xff08;Model Context Protocol&#xff09;本地服务端大多只在启动参数中注入一个工作区根路径。当 Agent 正在处理前端…

2026/10/13 20:12:08 阅读更多 →
三强版 Codex 一键部署包,本地桌面 AI 自动化全流程实操

三强版 Codex 一键部署包,本地桌面 AI 自动化全流程实操

&#x1f50d;前言 本文介绍 Codex Harness 一键安装包的部署方案&#xff0c;无需解压&#xff0c;也无需繁琐的环境配置&#xff0c;新手也能快速上手。该方案同时支持 Windows 与 macOS 双平台&#xff0c;跟随向导几步即可完成安装、登录与模型密钥配置。文中完整演示了技…

2026/10/13 20:11:08 阅读更多 →

日新闻

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

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

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

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了&#xff0c;很难不碰到舵机控制这道坎。做智能小车要转方向&#xff0c;做机械臂要抬关节&#xff0c;做云台要偏航俯仰&#xff0c;背后都是同一个东西在干活&#xff1a;舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”&#xff1f;——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台&#xff1f;或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜&#xff1f;又或者&#xff0c;在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →