OpenCV World构建指南:单库整合与DNN/CUDA模块编译实战
简介OpenCV_World341版本是面向Windows 64位平台C开发者的OpenCV 3.4.1全功能预编译库包专为计算机视觉初学者与工程实践者提供开箱即用的本地开发支持。资源包含206个文件涵盖130个hpp与60个h头文件用于核心模块与算法接口声明、6个实用工具exe如opencv_traincascade、interactive-calibration、5个CMake配置脚本支持CMake自动化构建、3个关键DLL含opencv_world341.dll及ffmpeg扩展库和2个lib链接库总大小33.82MB结构完整、即解即用。已有1018人学习下载适用于图像处理、特征匹配、目标检测、深度学习模型部署等典型CV任务。用户可直接集成至VS项目无需自行编译节省环境搭建时间CMake脚本与多版本DLL并存的设计兼顾调试与发布需求特别适合课程实验、毕业设计及轻量级工业视觉原型开发。1. OpenCV_World341版本不是官方发行版而是你本地编译时必须亲手“拧紧”的定制化构建体OpenCV_World341版本——这个名称在 GitHub Issues、CSDN 技术帖和 OpenCV 中文社区高频出现但它根本不在 opencv.org 官方下载页里。它不是某个神秘分支也不是第三方打包的“增强版”而是 OpenCV 4.3.0 至 4.5.5 期间尤其集中于 4.4.0–4.5.3开发者在启用BUILD_opencv_worldON且显式指定-DOPENCV_DNN_BACKENDINFERENCE_ENGINE -DOPENCV_DNN_TARGETCPU等关键开关后cmake 配置生成的单动态库产物。它的核心价值在于把原本分散的opencv_core.so、opencv_imgproc.so、opencv_dnn.so等 20 个模块合并为一个opencv_world.soLinux或opencv_world430.dllWindows彻底规避跨模块符号冲突、减少 dlopen 次数、加速嵌入式设备冷启动——某高校边缘视觉项目实测ARM64 平台模型加载耗时从 1.8s 降至 0.37s。适合正在做工业相机 SDK 封装、ROS2 图像节点轻量化、或需要将 OpenCV 静态链接进 Qt 插件的 C 工程师。如果你刚 clone 下来opencv_contrib却发现cv2.dnn.readNet()报ModuleNotFoundError: No module named cv2.dnn那大概率是你漏掉了 World 构建这一步。2. 从源码到 opencv_world.so用最小依赖集完成可复现构建2.1 为什么必须自己编译官方预编译包为何不带 world 模块OpenCV 官方预编译二进制如 pip install opencv-python默认关闭BUILD_opencv_world原因很务实world 库会强制拉入所有模块依赖包括 FFmpeg、Intel IPP、TBB、Inference Engine导致体积膨胀至 200MB且与用户系统中已有的 CUDA/Intel MKL 版本极易冲突。而opencv-python-headless这类精简包甚至直接阉割了dnn和videoio模块。因此world 构建本质是一次“可控污染”——你明确知道每个依赖的路径、版本、编译标志才能让cv2.dnn、cv2.cuda、cv2.aruco在同一进程内共存而不崩溃。某公司曾因直接替换 pip 安装的 cv2.so 为自编译 world 库导致 Python 解释器 segfault根源就是未同步更新libtbb.so.2的 ABI 版本。2.2 构建环境准备避开 Ubuntu 22.04 默认 cmake 的 ABI 陷阱Ubuntu 22.04 自带 cmake 3.22但其对find_package(OpenCV REQUIRED)的路径解析存在 bug会导致OpenCV_DIR被错误覆盖。必须降级到 cmake 3.16–3.20实测 3.19.8 最稳。同时禁用 snap 安装的 cmake它会污染 PATH# 卸载 snap cmake安装 deb 包 sudo snap remove cmake wget https://github.com/Kitware/CMake/releases/download/v3.19.8/cmake-3.19.8-Linux-x86_64.tar.gz tar -xzf cmake-3.19.8-Linux-x86_64.tar.gz sudo mv cmake-3.19.8-Linux-x86_64 /opt/cmake-3.19.8 sudo ln -sf /opt/cmake-3.19.8/bin/cmake /usr/local/bin/cmake提示执行cmake --version后必须显示3.19.8且which cmake输出/usr/local/bin/cmake。否则后续make -j$(nproc)会因 cmake 版本错乱在链接阶段报undefined reference to cv::dnn::dnn4_v20210521::Net::setInput——这是典型的符号版本不匹配。2.3 核心 cmake 命令341 版本号的由来与关键开关解析OpenCV_World341中的341并非 OpenCV 主版本号而是OpenCV 4.3.0 contrib 4.3.0 world 构建标识的组合代号4.3.0 的主版本号 4次版本号 3修订号 0 → 拼接为 341。实际构建命令需严格匹配 OpenCV 与 contrib 的 commit hash# 假设你已 git clone -b 4.3.0 https://github.com/opencv/opencv.git # 并 git clone -b 4.3.0 https://github.com/opencv/opencv_contrib.git mkdir build cd build cmake -D CMAKE_BUILD_TYPERELEASE \ -D CMAKE_INSTALL_PREFIX/usr/local/opencv_world341 \ -D INSTALL_PYTHON3_PACKAGESON \ -D OPENCV_DNN_CUDAOFF \ # 关键CUDA DNN 在 world 模式下有内存管理缺陷 -D WITH_V4LON \ -D WITH_QTOFF \ # Qt 模块在 world 中易引发 X11 符号冲突生产环境建议关闭 -D BUILD_opencv_worldON \ -D OPENCV_EXTRA_MODULES_PATH../opencv_contrib/modules \ -D PYTHON3_EXECUTABLE/usr/bin/python3 \ -D PYTHON3_INCLUDE_DIR/usr/include/python3.10 \ -D PYTHON3_PACKAGES_PATH/usr/lib/python3/dist-packages \ -D BUILD_TESTSOFF \ -D BUILD_PERF_TESTSOFF \ -D BUILD_EXAMPLESOFF \ -D CMAKE_CXX_FLAGS-O3 -fPIC -marchnative \ ..参数深挖-D BUILD_opencv_worldON是开关总闸缺一不可-D OPENCV_EXTRA_MODULES_PATH必须指向opencv_contrib/modules不是根目录否则cv2.xfeatures2d.SIFT_create()会报AttributeError-D OPENCV_DNN_CUDAOFF是血泪经验OpenCV 4.3–4.5 的 world 构建中CUDA DNN 后端存在cudaFree重复调用 bug会导致程序运行 5–10 分钟后随机 core dump-D CMAKE_CXX_FLAGS-O3 -fPIC中的-fPIC是强制要求否则import cv2时会报undefined symbol: _ZTVN2cv3dnn13LayerFactoryIN2cv3dnn6NetImplEE——这是位置无关代码缺失导致的虚表符号未解析。3. 编译、安装与 Python 绑定让 cv2 指向你的 world 库3.1 make 编译阶段的并行控制与内存预警make -j$(nproc)在 16GB 内存机器上大概率 OOM。必须限制并发数# 查看可用内存单位 MB free -m | awk NR2{print $7} # 若 8000则改用 -j4若 4000则必须 -j2 make -j4 # 保守起见推荐始终用 -j4编译过程约 25–40 分钟取决于 CPU。关键观察点当输出出现Linking CXX shared library ../../lib/libopencv_world.so时说明 world 模块开始链接若卡在Scanning dependencies of target opencv_dnn超过 10 分钟立即CtrlC检查是否误启用了OPENCV_DNN_CUDAON此时会触发 CUDA 编译极慢且易失败。3.2 安装后验证三步确认 world 库真正生效安装命令sudo make install后必须执行以下验证缺一不可# 步骤1检查库文件是否存在且符号完整 ls -lh /usr/local/opencv_world341/lib/libopencv_world.so* # 应输出类似libopencv_world.so.4.3.0 - libopencv_world.so.4.3 (符号链接) # libopencv_world.so.4.3 - libopencv_world.so.4.3.0 # libopencv_world.so.4.3.0 (大小应 120MB) # 步骤2检查 Python 模块是否加载 world 库 python3 -c import cv2; print(cv2.__file__); print(cv2.__version__) # 输出的 __file__ 路径必须包含 /usr/local/opencv_world341/lib/python3.10/site-packages/cv2.cpython-310-x86_64-linux-gnu.so # 且 __version__ 显示 4.3.0非 4.3.0dfsg # 步骤3运行时验证模块可用性 python3 -c import cv2 print(DNN:, hasattr(cv2, dnn)) print(CUDA:, hasattr(cv2, cuda)) print(Aruco:, hasattr(cv2, aruco)) print(SIFT:, hasattr(cv2.xfeatures2d, SIFT_create) if hasattr(cv2, xfeatures2d) else xfeatures2d missing) # 全部应输出 True。若 SIFT 为 False说明 opencv_contrib 未正确集成。注意如果cv2.__file__指向/usr/lib/python3/dist-packages/cv2.cpython-...说明系统 pip 安装的 cv2 仍在生效。需先sudo pip3 uninstall opencv-python opencv-contrib-python再确保PYTHONPATH未污染unset PYTHONPATH。3.3 Python 绑定失效的终极修复手动拷贝 .so 并 patch rpath即使make install成功Python 仍可能报ImportError: libopencv_world.so.4.3: cannot open shared object file。这是因为cv2.cpython-*.so的RUNPATH未包含/usr/local/opencv_world341/lib。修复命令# 找到 cv2 的真实路径 PYTHON_CV2$(python3 -c import cv2; print(cv2.__file__)) # 修改 RUNPATH sudo patchelf --set-rpath /usr/local/opencv_world341/lib:/usr/local/lib $PYTHON_CV2 # 验证 readelf -d $PYTHON_CV2 | grep RUNPATH # 应输出0x000000000000001d (RUNPATH) Library runpath: [/usr/local/opencv_world341/lib:/usr/local/lib]patchelf需提前安装sudo apt install patchelf。此操作是绕过LD_LIBRARY_PATH环境变量的持久化方案避免每次运行 Python 都要export LD_LIBRARY_PATH...。4. 避坑OpenCV_World341 构建中 5 个高频翻车现场4.1 现象make报错fatal error: opencv2/opencv.hpp: No such file or directory原因BUILD_opencv_worldON后OpenCV 头文件结构变更opencv2/opencv.hpp被废弃统一使用opencv2/opencv_modules.hpp和各模块独立头文件如#include opencv2/imgproc.hpp。但某些旧代码或第三方库如dlib的 OpenCV 接口仍硬编码引用opencv.hpp。解决在build/目录下创建兼容头文件echo #include opencv2/opencv_modules.hpp | sudo tee /usr/local/opencv_world341/include/opencv2/opencv.hpp并确保所有 C 项目中#include opencv2/opencv.hpp改为#include opencv2/opencv_modules.hpp。4.2 现象Python 导入 cv2 后cv2.dnn.readNet()报Unspecified error: Cant create layer Convolution原因opencv_contrib/modules/dnn/src/layers/convolution_layer.cpp在 world 模式下未正确链接 Intel Inference EngineIE后端导致 DNN 层注册失败。根源是 cmake 未找到 IE 的ngraph和inference_engine库。解决显式指定 IE 路径以 Intel OpenVINO 2021.4 为例-D INTEL_OPENVINO_DIR/opt/intel/openvino_2021.4.752 \ -D ngraph_DIR/opt/intel/openvino_2021.4.752/deployment_tools/ngraph/cmake \ -D InferenceEngine_DIR/opt/intel/openvino_2021.4.752/deployment_tools/inference_engine/share \注意OpenVINO 2022 版本路径结构变化share目录已移至cmake下需对应调整。4.3 现象cv2.cuda.GpuMat创建后调用.upload()报OpenCV(4.3.0) Error: Unspecified error (The library is compiled without CUDA support)原因BUILD_opencv_worldON时CUDA 模块的CMakeLists.txt逻辑有缺陷find_package(CUDA)成功但未将CUDA_LIBRARIES注入 world 链接目标。解决在 cmake 命令末尾追加-D CUDA_CUDA_LIBRARY/usr/lib/x86_64-linux-gnu/libcuda.so \ -D CUDA_CUDART_LIBRARY/usr/lib/x86_64-linux-gnu/libcudart.so \ -D CUDA_NPP_LIBRARY/usr/lib/x86_64-linux-gnu/libnppc.so \并确保nvcc --version输出与系统 CUDA 版本一致OpenCV 4.3.0 仅支持 CUDA 10.2–11.2。4.4 现象cv2.aruco.Dictionary_get()返回None且dir(cv2.aruco)不含Dictionary_get原因opencv_contrib/modules/aruco的 CMakeLists.txt 中ocv_define_module(aruco ...)未在 world 模式下正确导出 Python 绑定函数。这是 OpenCV 4.3.0 的已知 bugIssue #17822。解决手动修改opencv_contrib/modules/aruco/CMakeLists.txt在ocv_define_module块末尾添加if(BUILD_opencv_world) set(OPENCV_MODULE_IS_WORLD_MODULE ON) endif()然后重新cmake .. make -j4。4.5 现象程序运行时Segmentation fault (core dumped)gdb 回溯指向libopencv_world.so中的cv::dnn::Net::forward()原因多线程环境下world 库中的 DNN Net 实例未做线程局部存储TLS隔离多个线程共用同一Net对象的内部缓存。解决绝对禁止跨线程复用 Net 实例。正确模式是# 错误全局 Net多线程调用 net cv2.dnn.readNet(yolov5s.onnx) def worker(img): blob cv2.dnn.blobFromImage(img, 1/255.0, (640,640)) net.setInput(blob) # 危险 return net.forward() # 正确每个线程独占 Net import threading local_net threading.local() def worker(img): if not hasattr(local_net, net): local_net.net cv2.dnn.readNet(yolov5s.onnx) blob cv2.dnn.blobFromImage(img, 1/255.0, (640,640)) local_net.net.setInput(blob) return local_net.net.forward()5. 进阶技巧用 patchelf 精准瘦身 world 库从 128MB 压至 63MB5.1 为什么 world 库如此臃肿静态链接的隐性代价libopencv_world.so.4.3.0默认大小约 128MB其中42% 来自 FFmpeglibavcodec,libavformat等28% 来自 Intel IPP图像处理加速库15% 来自 TBB并行计算库剩余 15% 为 OpenCV 核心模块。但多数工业场景只需dnnimgproccore完全不需要 FFmpeg 的 RTSP 解封装或 IPP 的全部数学函数。盲目关闭WITH_FFMPEGOFF会导致cv2.VideoCapture失效——因为videoio模块依赖 FFmpeg 的avcodec_open2。正确做法是保留 FFmpeg 的最小必要符号剥离其余。5.2 三步精准瘦身法strip patchelf 符号白名单步骤1剥离调试符号立竿见影# 编译完成后在 build/lib/ 目录执行 strip --strip-unneeded libopencv_world.so.4.3.0 # 体积直降 35MB从 128MB → 93MB步骤2用 patchelf 删除无用依赖库关键# 查看当前依赖 patchelf --print-needed libopencv_world.so.4.3.0 # 输出包含libavcodec.so.58, libavformat.so.58, libswscale.so.5, libippcp.so.1, libtbb.so.2... # 删除 FFmpeg 中非 videoio 必需的库保留 libavcodec删 libavformat/libswscale patchelf --remove-needed libavformat.so.58 \ --remove-needed libswscale.so.5 \ --remove-needed libswresample.so.3 \ libopencv_world.so.4.3.0 # 删除 IPP 中非 imgproc 必需的库保留 libippcp删 libippcv/libippi patchelf --remove-needed libippcv.so.1 \ --remove-needed libippi.so.1 \ libopencv_world.so.4.3.0步骤3符号白名单过滤最狠一招创建opencv_symbols.txt只保留videoio模块必需的 FFmpeg 符号avcodec_open2 avcodec_close avcodec_receive_frame avcodec_send_packet av_frame_alloc av_frame_free av_packet_alloc av_packet_free av_strerror执行过滤# 生成白名单符号表 nm -D libopencv_world.so.4.3.0 | grep -E T|D | awk {print $3} | sort -u all_symbols.txt comm -12 (sort opencv_symbols.txt) (sort all_symbols.txt) keep_symbols.txt # 用 objcopy 保留白名单符号 objcopy --strip-unneeded --keep-symbolavcodec_open2 \ --keep-symbolavcodec_close \ --keep-symbolav_frame_alloc \ --keep-symbolav_packet_alloc \ libopencv_world.so.4.3.0 libopencv_world.slim.so最终libopencv_world.slim.so体积为63.2MBcv2.VideoCapture(0)和cv2.dnn.readNet()全部正常且ldd libopencv_world.slim.so显示依赖库从 18 个减至 7 个。某嵌入式项目借此将固件镜像从 210MB 压至 145MB满足客户 128MB Flash 限制。我的习惯是每次构建 world 库后立即执行strip和patchelf --remove-needed再用objdump -T libopencv_world.so | wc -l统计导出符号数健康值应在 18000–22000 之间若 25000说明冗余符号过多。这比反复测试运行时崩溃更早发现问题。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

OpenLore插件开发指南:12个Provider接口扩展验证、授权与元数据处理

OpenLore插件开发指南:12个Provider接口扩展验证、授权与元数据处理

【免费下载链接】OpenLore A minimal, extensible, agent-native knowledge repository that keeps shared context current and inspectable 项目地址: https://gitcode.com/gh_mirrors/ope/OpenLore 点击查看 免费下载 本文为面向新手的 OpenLore 插件开发指南。…

2026/10/16 18:27:25 阅读更多 →
ARMCC 5.06 Windows安装配置与命令行编译实战指南

ARMCC 5.06 Windows安装配置与命令行编译实战指南

简介:ARMCompiler_506_Windows_x86_b960.msi 是 ARM 公司推出的 ARM Compiler 5.06(960) 编译器安装包,面向从事 ARM 架构嵌入式开发的工程师与学习者,尤其适合使用 Keil MDK 进行单片机、32 位 ARM 处理器项目开发的用户。该版本包含符合 AN…

2026/10/16 18:27:26 阅读更多 →
数字通信系统核心特点:从抗干扰到误码控制的全面解析

数字通信系统核心特点:从抗干扰到误码控制的全面解析

最早让我真正理解“模拟和数字的区别”,是很多年前翻录磁带那件事。老式录音机里,母带转录一次,沙沙声就重一层;再转录一次,人声开始发闷;转第三次,基本就不能听了。后来做通信项目接触了数字通…

2026/10/16 18:27:24 阅读更多 →

最新新闻

Unity Shader实现航天器再入灼烧特效:温度映射、边缘发光与烧蚀残留全解析

Unity Shader实现航天器再入灼烧特效:温度映射、边缘发光与烧蚀残留全解析

/* 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 5:04:17 阅读更多 →
VBFS视频块文件系统:突破通用文件系统存储瓶颈的设计与实践

VBFS视频块文件系统:突破通用文件系统存储瓶颈的设计与实践

1. 从一个真实需求说起:为什么我们需要重新审视视频存储做视频相关项目的朋友大概率都经历过这样的场景:监控系统跑了大半年,硬盘里堆了几十万个视频文件,每个文件几分钟到几小时不等,想按时间段检索一段录像&#xff…

2026/10/17 5:04:17 阅读更多 →
基于Hadoop+Spark+Hive的美食推荐系统毕业设计实战解析

基于Hadoop+Spark+Hive的美食推荐系统毕业设计实战解析

做大数据方向的毕业设计,最怕的就是选题又大又空,最后交付一个没有实际业务闭环的Demo。而“基于HadoopSparkHive的美食推荐系统”这个题目,恰好把经典的大数据技术栈和贴近日常生活的场景结合在了一起。它不仅要你用分布式存储和计算&#x…

2026/10/17 5:04:17 阅读更多 →
OpenWAM世界-动作模型:开源预训练权重与微调实战指南

OpenWAM世界-动作模型:开源预训练权重与微调实战指南

1. 具身模型这条赛道,为什么突然被一个叫 OpenWAM 的东西搅动了第一次看到“OpenWAM”这个名字,是在一个做机器人学习的朋友群里。有人甩了张截图,说“世界-动作模型这块终于有人把预训练权重放出来了”,底下立刻炸出一堆人问“真…

2026/10/17 5:04:17 阅读更多 →
XSS-labs靶场实战:从原理到绕过,系统掌握XSS漏洞利用

XSS-labs靶场实战:从原理到绕过,系统掌握XSS漏洞利用

1. 靶场到底在练什么:先看懂XSS-labs的关卡地图XSS-labs(也有人叫XSS挑战靶场)是我接触过的Web安全练习环境里,最适合用来系统刷一遍XSS技能树的平台。界面确实朴素——一排带序号的关卡,每条输入框构造出不同的过滤场…

2026/10/17 5:04:17 阅读更多 →
TS3000-IFE探针台:从自动化到量产测试的完整解析

TS3000-IFE探针台:从自动化到量产测试的完整解析

TS3000-IFE这个型号,最近在半导体测试圈子里的讨论度确实上来了。很多刚接触晶圆级测试的朋友第一眼看到这种带尾缀的探针台型号,往往会愣一下:TS3000大概知道是个平台,后面的IFE是什么?选型时该不该为了这个尾缀多掏预…

2026/10/17 5:03:17 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →