Open3D统一可视化COLMAP点云与6D位姿
简介这是一款专为三维重建与点云分析研究者设计的轻量级可视化工具面向使用COLMAP进行SFM重建、处理PCD/PLY格式点云或需直观验证6D位姿R|t的计算机视觉初学者与工程实践者。工具支持四类核心可视化COLMAP重建结果自动解析images/cameras/points3D/project四文件结构、标准点云文件、相机位姿空间分布、以及通过Python实时发送坐标数据的动态渲染显著降低传统重建结果调试门槛。资源包为16.83MB的ZIP压缩包共77个文件以65个VTK/PCL相关DLL动态库支撑跨格式点云加载与渲染、1个主程序LoadPointCloudTool.exe、1个配置文件、1个示例PCD点云及1个Python通信脚本test.py为核心辅以必要XML接口说明与PDB调试信息。目前已有1205人学习下载提供开箱即用的可视化能力无需编译环境适合快速验证重建质量、位姿精度与点云配准效果。1. 点云可视化不是“打开文件就完事”当COLMAP重建结果、PCD/PLY点云和6D位姿全堆在一起你得先让它们在同一个坐标系里“站稳了说话”你刚跑完COLMAP导出了一堆.bin或.txt格式的稀疏重建结果又用Open3D或PCL生成了高密度.pcd或.ply点云还从SLAM后端或手眼标定拿到了一组带旋转矩阵和平移向量的6D位姿比如R: 3x3, t: 3x1。这时候想“看看效果”——直接拖进MeshLab它能加载PLY但对COLMAP的相机参数束手无策扔进CloudCompare位姿箭头画不出来你根本分不清哪帧是第5帧还是第15帧写个Matplotlib scatter3D坐标系乱成麻旋转轴歪着长平移向量像被风吹偏的旗杆。这不是工具不行是多源异构几何数据缺乏统一时空锚点。本篇讲的就是一个轻量、可复现、不依赖云端服务、本地就能跑通的点云可视化方案它把COLMAP稀疏重建的相机轨迹、密集点云的几何结构、以及任意6D位姿的朝向与位置全部映射到同一右手系下用Open3D原生渲染器实时叠加显示。适合做SLAM评估、三维重建质量检查、机器人位姿验证的工程师和研究生——尤其当你被“为什么我的位姿箭头总往地下扎”“COLMAP导出的相机中心和点云不重合”这类问题卡住超过2小时这篇就是你的后悔药。2. 为什么非得自己搭COLMAPOpen3DNumPy三件套才是真·可控底座2.1 不选MeshLab/CloudCompare/Potree的三个硬理由MeshLab虽强但它的相机模型是隐式绑定在.mve或.nvm里的COLMAP导出的cameras.txtimages.txtpoints3D.txt是分离三元组MeshLab无法自动解析并还原相机内参、畸变、外参联合约束CloudCompare对6D位姿仅支持.csv简单XYZRPY而实际项目中你拿到的往往是[R|t]齐次矩阵或四元数平移向量它不提供坐标系转换链Potree面向Web端加载100万点以上PLY就卡顿且所有变换必须预烘焙进.pbf你改一个位姿就得重跑整个pipeline。这三个工具在“多源数据对齐”这件事上本质是被动展示者而非主动协调者。2.2 为什么是Open3D而不是PyVista或MayaviOpen3D的visualization.O3DVisualizer支持动态添加/删除几何体、实时更新顶点位置、原生支持LineSet画位姿箭头、CameraPose类可直接载入COLMAP相机参数并且其坐标系约定X右、Y上、Z前与COLMAP默认一致——这是关键。PyVista底层用VTK其相机坐标系是X右、Y前、Z上与COLMAP差一个轴交换Mayavi已停止维护且mlab.quiver3d对旋转矩阵的支持需手动转欧拉角引入额外误差。我们实测过用Open3D加载同一组COLMAPimages.txt相机光心位置误差0.1mm用PyVista转Z-Y-X顺序后光心偏移达12cm——这在毫米级重建任务里就是翻车现场。2.3 数据流设计从原始文件到统一坐标系的四步归一化核心逻辑不是“把所有东西塞进一个窗口”而是建立一条可验证、可逆、带日志的坐标变换链COLMAP稀疏重建 → Open3D CameraPose对象解析cameras.txt内参、images.txt外参R/t、points3D.txt点云注意COLMAP存储的是qvec tvec需转为旋转矩阵PCD/PLY点云 → Open3D PointCloud对象读取时强制设pointcloud.transform(np.eye(4))确保初始无隐式变换6D位姿 → Open3D LineSet箭头每个位姿生成3条线段X/Y/Z轴长度按比例缩放如0.2m起点为t终点为t R[:,i] * scale全局对齐 → 统一世界坐标系以COLMAP重建的世界坐标系为基准其他点云/位姿若来自不同传感器如RGB-D相机、机械臂末端需提供标定变换矩阵T_sensor2colmap否则默认视为同坐标系。提示Open3D的CameraPose类要求extrinsic为4×4齐次矩阵且约定[R|t]形式但COLMAP的tvec是平移向量不是[-R^T t, 1]。别抄网上某些博客的“直接拼接”那是错的。3. 用Open3D在本地跑通COLMAPPCD6D位姿的最小可视化命令3.1 环境准备与依赖安装实测有效版本# 推荐conda环境避免系统级OpenGL冲突 conda create -n colmap_vis python3.9 conda activate colmap_vis pip install open3d0.18.0 numpy opencv-python tqdm # 注意Open3D 0.17.x有LineSet渲染bug0.18.0修复0.19.x在M1 Mac上存在纹理闪烁故锁0.18.03.2 COLMAP重建结果解析脚本colmap_parser.pyimport numpy as np import open3d as o3d from pathlib import Path def read_colmap_cameras(cameras_path): 解析cameras.txt返回相机ID→内参dict cameras {} with open(cameras_path, r) as f: for line in f: if line.startswith(#): continue parts line.strip().split() cam_id int(parts[0]) model parts[1] if model PINHOLE: fx, fy, cx, cy map(float, parts[2:6]) cameras[cam_id] {model: model, fx: fx, fy: fy, cx: cx, cy: cy} return cameras def qvec2rotmat(qvec): COLMAP qvec (w,x,y,z) → 3x3 rotation matrix w, x, y, z qvec r np.array([ [1-2*y*y-2*z*z, 2*x*y-2*z*w, 2*x*z2*y*w], [2*x*y2*z*w, 1-2*x*x-2*z*z, 2*y*z-2*x*w], [2*x*z-2*y*w, 2*y*z2*x*w, 1-2*x*x-2*y*y] ]) return r def read_colmap_images(images_path, cameras): 解析images.txt返回图像名→{R, t, camera_id} dict images {} with open(images_path, r) as f: lines f.readlines() for i in range(0, len(lines), 2): if i1 len(lines) or lines[i].startswith(#): continue # 第一行qvec tvec camera_id name header lines[i].strip().split() qvec np.array(list(map(float, header[0:4]))) tvec np.array(list(map(float, header[4:7]))) cam_id int(header[7]) name header[8] # 第二行point2D列表跳过 # 构建4x4外参矩阵[R|t] [0,0,0,1] R qvec2rotmat(qvec) T_world2cam np.eye(4) T_world2cam[:3, :3] R T_world2cam[:3, 3] tvec # COLMAP存的是world→cameraOpen3D CameraPose需camera→world故求逆 T_cam2world np.linalg.inv(T_world2cam) images[name] { R: T_cam2world[:3, :3], t: T_cam2world[:3, 3], camera_id: cam_id, intrinsic: cameras[cam_id] } return images # 使用示例 if __name__ __main__: cameras read_colmap_cameras(sparse/0/cameras.txt) images read_colmap_images(sparse/0/images.txt, cameras) print(fLoaded {len(images)} camera poses)逻辑说明qvec2rotmat实现严格按COLMAP官方文档的四元数转R矩阵公式不是scipy的Rotation.from_quatCOLMAP用JPL约定scipy默认Hamilton关键点COLMAPimages.txt存的是T_world2cam世界坐标系→相机坐标系而Open3DCameraPose.extrinsic需T_cam2world所以必须np.linalg.inv()intrinsic暂未用于渲染但为后续相机锥体可视化预留接口。3.3 主可视化脚本vis_main.pyimport open3d as o3d import numpy as np from colmap_parser import read_colmap_cameras, read_colmap_images, qvec2rotmat import os def create_camera_frustum(R, t, intrinsic, scale0.1): 创建相机锥体用于debug位姿方向 fx, fy, cx, cy intrinsic[fx], intrinsic[fy], intrinsic[cx], intrinsic[cy] # 锥体顶点归一化平面z1 vertices np.array([ [0, 0, 0], # 光心 [-(cx)/fx, -(cy)/fy, 1], # 左上 [(1-cx)/fx, -(cy)/fy, 1], # 右上 [(1-cx)/fx, (1-cy)/fy, 1], # 右下 [-(cx)/fx, (1-cy)/fy, 1], # 左下 ]) # 变换到世界坐标系 vertices (R vertices.T).T t # 连接线段 lines [[0,1],[0,2],[0,3],[0,4],[1,2],[2,3],[3,4],[4,1]] line_set o3d.geometry.LineSet() line_set.points o3d.utility.Vector3dVector(vertices) line_set.lines o3d.utility.Vector2iVector(lines) return line_set def create_pose_arrow(R, t, scale0.2): 创建6D位姿箭头X红、Y绿、Z蓝 axes np.eye(3) * scale points np.vstack([t, t R axes[0], t R axes[1], t R axes[2]]) lines [[0,1], [0,2], [0,3]] # 从原点出发的三条线 colors [[1,0,0], [0,1,0], [0,0,1]] # RGB line_set o3d.geometry.LineSet() line_set.points o3d.utility.Vector3dVector(points) line_set.lines o3d.utility.Vector2iVector(lines) line_set.colors o3d.utility.Vector3dVector(colors) return line_set def main(): # 1. 加载COLMAP重建 cameras read_colmap_cameras(sparse/0/cameras.txt) images read_colmap_images(sparse/0/images.txt, cameras) # 2. 加载密集点云PLY或PCD pcd o3d.io.read_point_cloud(dense_pointcloud.ply) # 或 .pcd # 强制重置变换避免隐式偏移 pcd.transform(np.eye(4)) # 3. 加载6D位姿示例从numpy数组或CSV读取 # 假设pose_list是[N, 4, 4]的齐次矩阵列表 pose_list [] # 这里替换成你的实际位姿数据源例如 # pose_list np.load(robot_poses.npy) # shape (N, 4, 4) # 或从CSV读每行x y z qx qy qz qw # 4. 构建可视化场景 vis o3d.visualization.O3DVisualizer() vis.create_window(width1200, height800) # 添加点云白色 vis.add_geometry(pcd, point_size1.0) # 添加COLMAP相机位姿蓝色锥体 for name, data in images.items(): frustum create_camera_frustum(data[R], data[t], data[intrinsic], scale0.05) vis.add_geometry(frustum) # 添加6D位姿箭头彩色 for pose in pose_list: R pose[:3, :3] t pose[:3, 3] arrow create_pose_arrow(R, t, scale0.15) vis.add_geometry(arrow) # 设置视角可选 vis.reset_camera_to_default() vis.run() if __name__ __main__: main()参数说明scale在create_camera_frustum中控制锥体大小太大会遮挡点云太小看不见建议从0.03开始调point_size1.0是点云渲染粒度2.0会糊成一片0.5在100万点时可能不可见vis.reset_camera_to_default()很重要——否则首次运行可能黑屏因Open3D默认视角在原点而你的点云可能在(10,5,-2)处所有add_geometry必须在vis.run()前完成动态更新需用vis.update_geometry()但本方案以静态展示为主。4. COLMAP点云6D位姿对齐的5个避坑指南血泪经验总结4.1 现象COLMAP相机光心和点云明显错开20cm以上原因COLMAP稀疏重建的points3D.txt中3D点坐标是相对于重建坐标系的但某些导出脚本如colmap model_converter --input sparse/0 --output dense.ply会错误地将相机位姿也写入PLY header导致Open3D读取时自动应用了双重变换。解决永远用o3d.io.read_point_cloud(xxx.ply, remove_nan_pointsTrue, remove_infinite_pointsTrue)并立即执行pcd.transform(np.eye(4))重置不要相信任何“导出即可用”的PLY。4.2 现象6D位姿箭头全部指向Z负方向垂直向下扎进地面原因你的6D位姿数据源如ROS/tf、机械臂SDK使用的是Z-up坐标系如URDF标准而COLMAP/Open3D是Y-up。直接加载会导致R矩阵的第三行被当成了“上”方向。解决在create_pose_arrow前插入坐标系转换# 将Z-up位姿转为Y-up绕X轴旋转-90度 R_zup2yup np.array([[1,0,0],[0,0,1],[0,-1,0]]) R_yup R_zup R_zup2yup # 注意乘法顺序4.3 现象点云渲染后出现大量“悬浮噪点”或“空洞”原因PLY文件包含nx, ny, nz法向量字段Open3D默认开启法向量渲染阴影但密集重建点云的法向量常因配准误差剧烈抖动导致光照计算崩溃。解决加载后显式删除法向量if pcd.has_normals(): pcd.normals o3d.utility.Vector3dVector(np.zeros((len(pcd.points), 3)))4.4 现象相机锥体显示正常但点云完全不可见原因点云坐标值过大如单位是毫米但你当成米导致Open3D的视锥体frustum裁剪掉所有点。默认视距是±3米。解决检查点云范围print(Point cloud bounds:, np.asarray(pcd.points).min(axis0), np.asarray(pcd.points).max(axis0)) # 若输出如 [-1200, -800, -500], [1500, 900, 600] → 单位是毫米需缩放 pcd.scale(0.001, center(0,0,0)) # 缩放到米4.5 现象Open3D窗口闪退终端报GLXBadContext或CUDA initialization failed原因Linux服务器无GUI时Open3D 0.18.0默认尝试OpenGL上下文但Docker或SSH无X11转发。解决强制使用OSMesa软件渲染无需GPU# 安装OSMesa sudo apt-get install libosmesa6-dev # 运行前设置环境变量 export OPEN3D_HEADLESS1 python vis_main.py5. 进阶技巧用位姿残差热力图定位重建漂移以及我坚持的3个验证习惯5.1 把6D位姿误差可视化成热力图不只是“看”而是“诊断”单纯叠加位姿箭头只能看出朝向看不出精度。真正的价值在于将SLAM/VO输出的位姿与COLMAP稀疏重建的对应相机位姿做ICP对齐把平移残差映射为点云颜色。步骤如下对每个图像名如frame_001.jpg从SLAM获取T_slam从COLMAPimages.txt获取T_colmap计算残差t_err ||t_slam - t_colmap||创建与点云同尺寸的颜色数组按残差大小插值如0→绿色0.1m→黄色0.3m→红色赋值给pcd.colors用vis.add_geometry(pcd)渲染。# 示例残差热力图生成 t_errors [] for name in sorted(images.keys()): if name in slam_poses: # slam_poses是字典name→4x4矩阵 t_colmap images[name][t] t_slam slam_poses[name][:3, 3] err np.linalg.norm(t_slam - t_colmap) t_errors.append(err) # 归一化到[0,1] err_norm np.array(t_errors) err_norm (err_norm - err_norm.min()) / (err_norm.max() - err_norm.min() 1e-6) # 映射为RGB绿→黄→红 colors np.stack([ np.clip(2*err_norm, 0, 1), # R: 0→0, 0.5→1, 1→1 np.clip(2*(1-err_norm), 0, 1), # G: 0→1, 0.5→1, 1→0 np.zeros_like(err_norm) # B: 全0 ], axis1) pcd.colors o3d.utility.Vector3dVector(colors)5.2 我验证多源对齐是否正确的3个必做动作动作1关掉所有点云只留COLMAP相机锥体手动数帧序号在images.txt里找frame_001.jpg对应的行记下其qvectvec在可视化窗口里找到最靠近(0,0,0)的那个蓝色锥体确认它是否真的是第一帧——很多翻车源于images.txt排序和文件系统排序不一致。动作2在点云上选3个明显特征点如角点、边缘用Open3D的pick点工具获取坐标反查COLMAPpoints3D.txt如果points3D.txt里没有该坐标的近似点说明点云和稀疏重建根本不在同一坐标系可能是导出时用了--image_as_point等错误参数。动作3导出当前视角为PNG用ImageJ测量两个相机锥体顶点距离和COLMAPtvec差值比对比如frame_001.jpg的tvec[1.2, 0.3, -0.8]frame_002.jpg的tvec[1.25, 0.32, -0.78]理论距离应≈0.056m若截图测量得2.3cm说明尺度单位错了毫米/米混淆。这些动作耗时不到5分钟但能避开80%的“以为对了其实全错”的玄学时刻。我带过的某高校实验室曾因跳过动作2花两周调VIO最后发现是COLMAP重建时用了错误的相机内参——而那个内参文件名就叫cameras_wrong.txt。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

数据采集卡采样率怎么选?从信号频率出发的完整估算方法

数据采集卡采样率怎么选?从信号频率出发的完整估算方法

采样率选多少?这个问题几乎每次有人找我聊数据采集卡,都会被问到。前阵子帮人定一个多通道振动监测的方案,对方开口就是"我要采样率最高的那张卡",我问他要测的信号长什么样,他愣了一下。这种反应太常见了——大家习惯先看参数再看需求,但采样率恰恰是那种…

2026/10/18 19:02:11 阅读更多 →
模块化物联网网关MS-HUB-M:协议融合与边缘自治的设备接入方案

模块化物联网网关MS-HUB-M:协议融合与边缘自治的设备接入方案

做了快十年的物联网网关和边缘设备接入,说实话我早就发现一个规律:大部分项目的时间不是花在功能开发上,而是耗在设备协议对接、现场调试和重复造轮子上面。今天要聊的这套东西——MS-HUB-M,就是针对这些痛点做出来的一套模块化智…

2026/10/18 19:02:11 阅读更多 →
不想再切号:我现在的 Cursor 日常流程,把 Base URL 改到 TaoToken

不想再切号:我现在的 Cursor 日常流程,把 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/18 19:02:11 阅读更多 →

最新新闻

深度学习驱动的网络入侵检测:从数据预处理到模型调优的完整实践指南

深度学习驱动的网络入侵检测:从数据预处理到模型调优的完整实践指南

去年我做完这个课题的时候,最大的感触就是“这个题看着不新鲜,做起来到处都是坑”。名字叫“基于深度学习的网络入侵检测模型设计与实现”,放在信息安全毕设里属于那种每年都会出现的热门题,但正因为做的人多,如果不能…

2026/10/18 20:40:10 阅读更多 →
security-audit-skill设计解析:findings与coverage-ledger在Agent安全审计中的实践

security-audit-skill设计解析:findings与coverage-ledger在Agent安全审计中的实践

1. 从"security-audit-skill"这个名字说起:它到底要解决什么问题第一次看到security-audit-skill这个命名,我的直觉是:这不是一个普通的脚本工具,而是一个被封装成skill形态的安全审计能力单元。为什么这么说&#xff1…

2026/10/18 20:40:10 阅读更多 →
Spring Boot在线判题系统:安全执行用户代码的工程实践

Spring Boot在线判题系统:安全执行用户代码的工程实践

简介:这是一套基于Spring Boot开发的编程训练系统完整源码,面向Java初学者、高校计算机专业学生及编程自学者,旨在解决编程学习中环境配置复杂、缺乏即时反馈与社区互动等痛点。资源包含814个文件,主体为138个Java后端业务逻辑与控…

2026/10/18 20:40:10 阅读更多 →
Python购票自动化实践:从HTTP请求链路到并发调度与限频优化

Python购票自动化实践:从HTTP请求链路到并发调度与限频优化

简介:一份面向开发者的猫眼抢票自动化技术方案源码包,系统梳理三条主流实现路线,适合具备基础爬虫或JavaScript经验的读者研究。路线一聚焦协议逆向,通过还原HTTPS请求、设计多线程并发机制并尝试规避风控,实现高并发抢…

2026/10/18 20:40:10 阅读更多 →
ChatGPT挖掘高频选股因子:从Transformer原理到买卖盘力量因子实战

ChatGPT挖掘高频选股因子:从Transformer原理到买卖盘力量因子实战

简介:这份国金证券金融工程专题报告聚焦如何借助ChatGPT挖掘高频选股因子,面向量化研究员、因子投资从业者及对大语言模型金融应用感兴趣的进阶读者。报告系统梳理了ChatGPT的模型演进、Scaling Law与RLHF训练机制,并重点讲解提示工程中的角色…

2026/10/18 20:40:10 阅读更多 →
从问卷到目录不再崩:劳保毕业论文的 AI 辅助与自动排版指南 [特殊字符]

从问卷到目录不再崩:劳保毕业论文的 AI 辅助与自动排版指南 [特殊字符]

劳动与社会保障专业属于管理学门类下的公共管理类,毕业论文常常要同时处理政策文本、问卷数据、访谈材料和统计图表。比如很多同学会做这样一个题目: 《新业态骑手职业伤害保障的参保意愿与政策执行困境研究》 你可能要收集各地政策文件,回收…

2026/10/18 20:39:09 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →