基于Intel NCS2与OpenVINO的边缘AI推理实战:从模型转换到性能调优
1. 项目概述当边缘计算遇上神经计算棒最近在折腾一个边缘AI推理的项目手头正好有一块Seeed Studio的ODYSSEY - X86J41x5单板电脑还有一根吃灰许久的Intel® Neural Compute Stick 2简称NCS2。这俩玩意儿放一起简直就是为边缘视觉应用量身定制的“小板凳”组合。ODYSSEY X86提供了x86的通用计算能力和丰富的I/O接口而NCS2则是一个专为加速深度学习推理设计的USB形态协处理器。它们的结合目标非常明确在资源受限的边缘侧以低功耗、低成本的方式实时运行训练好的神经网络模型比如目标检测、图像分类或姿态识别。这个组合的核心价值在于它的灵活性与性价比。你不需要一块昂贵的、带独立GPU的工控机也不需要复杂的散热系统。一个巴掌大的单板机插上一根像U盘一样的计算棒接上摄像头就能构成一个完整的视觉感知节点。这对于智能零售、工业质检、安防监控或者机器人导航这类场景来说极具吸引力。我这次体验的目的就是走通从环境搭建、模型转换到实际推理的完整流程把踩过的坑和总结的经验记录下来给同样想用这套方案入门边缘AI的朋友们一个清晰的参考。2. 核心硬件与平台选型解析2.1 为什么是ODYSSEY - X86J41x5选择ODYSSEY - X86J41x5作为载体是基于几个非常实际的考量。首先它是一台完整的x86迷你电脑搭载了Intel Celeron J4115处理器。这意味着你可以安装标准的Ubuntu或Windows系统使用熟悉的开发工具链如OpenVINO™ Toolkit、Docker生态兼容性极好避免了在ARM架构上可能遇到的库依赖和编译问题。对于快速原型验证来说这能节省大量时间。其次它的接口足够丰富。双千兆网口、双HDMI、多个USB端口包括USB 3.0、M.2插槽以及40针的GPIO排针。这使得它不仅能连接NCS2还能轻松接入摄像头、传感器或通过GPIO控制外部执行机构构成一个功能完整的边缘节点。最后它的功耗和尺寸控制得不错无风扇设计也保证了运行时的静音适合部署在各种环境中。注意虽然ODYSSEY X86性能足够驱动NCS2和基础系统但它的CPU性能并非顶级。在涉及大量数据预处理如图像缩放、格式转换或多路视频流分析时CPU可能成为瓶颈。因此优化预处理流水线和合理分配任务至关重要。2.2 Intel® Neural Compute Stick 2的定位与能力边界NCS2本质上是一个基于Intel Movidius™ Myriad X VPU的USB加速器。它的强项在于高效执行深度神经网络推理特别是卷积神经网络。其功耗仅2.5W左右非常适合持续运行的边缘设备。然而必须清醒认识它的能力边界。NCS2不是一个训练设备它只负责推理。你需要先在性能更强的机器上如带GPU的服务器完成模型训练然后将训练好的模型通常是TensorFlow、PyTorch等框架的格式通过OpenVINO™工具套件转换成NCS2能识别的中间表示格式。其次它的内存有限约4GB LPDDR4这意味着过大的模型如一些庞大的目标检测网络可能无法加载或者需要做模型剪枝、量化等优化。最后它主要加速的是网络的前向计算数据的前后处理如图像解码、结果后处理仍然需要主机CPU来完成。因此一个高效的流水线应该是主机CPU负责视频流捕获、图像解码和预处理 - NCS2负责核心的神经网络推理 - 主机CPU负责推理结果的后处理和输出。理解这个分工是设计高效应用的基础。3. 基础软件环境搭建与避坑指南3.1 操作系统与OpenVINO™安装我强烈推荐在ODYSSEY X86上安装Ubuntu 20.04 LTS或22.04 LTS。这两个版本被Intel OpenVINO™工具套件长期支持社区资料也最丰富。系统安装过程与普通PC无异此处不再赘述。安装OpenVINO™是第一步也是坑最多的一步。不建议通过apt安装过于陈旧的版本最好从Intel官方GitHub仓库下载最新或LTS版本的离线安装包。以下是我验证过的步骤# 1. 前往Intel官方发布页下载适用于Linux的OpenVINO™ Runtime安装包 # 假设下载的文件为 l_openvino_toolkit_ubuntu22_2023.1.0.12185.cfd4a2c5bcf_x86_64.tgz # 2. 解压并进入目录 tar -xzf l_openvino_toolkit_ubuntu22_*.tgz cd l_openvino_toolkit_ubuntu22_* # 3. 运行安装脚本选择自定义安装以减少磁盘占用 sudo ./install_openvino_dependencies.sh sudo ./install.sh # 在图形化或命令行安装界面中建议至少选择“Runtime”和“Development Tools”。 # 4. 设置环境变量每次打开新终端都需要执行或将其写入~/.bashrc source /opt/intel/openvino_2023/setupvars.sh安装完成后运行mo -h命令如果能看到Model Optimizer的帮助信息说明核心工具安装成功。实操心得安装过程中最常见的错误是缺少依赖库。即便运行了依赖安装脚本仍可能遇到某些Python包或系统库缺失。一个万能的排查方法是仔细阅读安装日志通常在/tmp目录下根据错误信息使用apt逐一安装缺失的包。例如常见的libusb问题可以通过sudo apt-get install libusb-1.0-0-dev解决。3.2 NCS2驱动与USB规则配置这是让系统识别NCS2的关键一步。OpenVINO™安装包通常包含了所需的驱动但需要手动配置USB规则以便普通用户也能访问设备。# 1. 将当前用户加入users组如果尚未加入 sudo usermod -aG users ${USER} # 2. 安装USB规则 sudo cp /opt/intel/openvino_2023/runtime/3rdparty/97-myriad-usbboot.rules /etc/udev/rules.d/ # 3. 重新加载udev规则并重启服务 sudo udevadm control --reload-rules sudo udevadm trigger sudo service udev restart # 4. 重新插拔NCS2然后使用lsusb命令检查 lsusb | grep “Movidius”如果能看到类似03e7:2485的Movidius设备恭喜你驱动配置成功。如果没看到请尝试重启主机并确保NCS2插在USB 3.0端口上蓝色接口。4. 模型转换从训练框架到边缘部署4.1 理解OpenVINO™模型转换流程原始训练好的模型如TensorFlow的.pb或.h5 PyTorch的.pth不能直接在NCS2上运行。必须通过OpenVINO™的Model Optimizer工具将其转换为两个文件.xml描述网络结构的拓扑文件。.bin包含网络权重和偏置的数据文件。这个过程称为“模型优化”它会对原始模型进行一系列操作包括冻结变量、折叠常量、删除训练专用节点、以及可能的精度转换如FP32到FP16以适配目标硬件。4.2 实战转换一个SSD目标检测模型我们以TensorFlow SSD MobileNet V2模型为例。首先你需要下载预训练模型。可以从TensorFlow Model Zoo获取。# 假设你下载了 ssd_mobilenet_v2_coco_2018_03_29.tar.gz tar -xzf ssd_mobilenet_v2_coco_2018_03_29.tar.gz cd ssd_mobilenet_v2_coco_2018_03_29然后使用OpenVINO™的Model Optimizer进行转换。命令看起来复杂但每个参数都有其作用mo --input_model frozen_inference_graph.pb \ --transformations_config /opt/intel/openvino_2023/tools/mo/front/tf/ssd_v2_support.json \ --tensorflow_object_detection_api_pipeline_config pipeline.config \ --reverse_input_channels \ --input_shape [1,300,300,3] \ --inputimage_tensor \ --data_type FP16 \ --output_dir ./openvino_model--transformations_config: 指定SSD模型特有的转换配置文件确保边界框解码等操作被正确转换。--reverse_input_channels: 因为OpenCV默认读取的图像是BGR格式而此模型期望RGB输入此参数会自动进行通道转换。这是一个极易忽略但导致结果错误的坑--input_shape: 固定输入张量尺寸。NCS2对动态形状支持有限固定尺寸能提高性能和兼容性。--data_type FP16: 指定转换为FP16精度。Myriad X VPU原生支持FP16使用FP16不仅能减少模型体积还能提升推理速度。FP32模型会在加载时被转换为FP16增加额外开销。转换成功后在./openvino_model目录下会得到frozen_inference_graph.xml和frozen_inference_graph.bin文件。这就是能部署到NCS2上的模型。注意事项不是所有TensorFlow OP都直接被支持。如果遇到不支持的算子需要查找OpenVINO™文档看是否有替代方案或者考虑修改模型结构。使用官方Model Zoo里的模型通常兼容性最好。5. 推理应用开发从示例代码到自主实现5.1 剖析OpenVINO™推理流程OpenVINO™提供了C和Python两套API出于原型开发速度考虑我们使用Python。一个典型的推理流程包含以下核心步骤我将其总结为一个清晰的表格步骤关键类/函数作用与说明1. 初始化运行时Core()创建OpenVINO运行时核心对象用于管理硬件设备和读取模型。2. 读取模型core.read_model()加载转换好的.xml和.bin文件在内存中构建网络对象。3. 编译与加载core.compile_model()将网络模型编译到指定的硬件设备这里是“MYRIAD”。此步骤耗时较长模型被加载到NCS2的内存中。4. 创建推理请求compiled_model.create_infer_request()创建一个用于执行推理的请求句柄。5. 数据预处理cv2.resize,np.transpose等将原始图像如从摄像头捕获的缩放、裁剪到模型输入尺寸并转换为模型需要的布局通常是NCHW或NHWC和精度。6. 输入数据infer_request.set_input_tensor()将预处理后的数据张量设置到推理请求的输入节点。7. 执行推理infer_request.infer()核心步骤触发NCS2执行计算。此调用是同步的会阻塞直到推理完成。8. 获取结果infer_request.get_output_tensor()从输出节点获取推理结果张量。9. 结果后处理解析输出数据根据模型输出结构如SSD的边界框、类别、置信度过滤低置信度结果应用非极大值抑制等。5.2 编写一个实时摄像头检测程序下面是一个高度精简但功能完整的示例它展示了如何将上述流程串联起来实现实时摄像头目标检测。import cv2 import numpy as np from openvino.runtime import Core # 1. 初始化 core Core() # 2. 3. 读取并编译模型到NCS2 model core.read_model(modelfrozen_inference_graph.xml) compiled_model core.compile_model(modelmodel, device_name“MYRIAD”) input_layer compiled_model.input(0) output_layer compiled_model.output(0) # 获取输入尺寸假设为[1, 3, 300, 300] (NCHW) N, C, H, W input_layer.shape # 4. 创建推理请求 infer_request compiled_model.create_infer_request() # 打开摄像头 cap cv2.VideoCapture(0) while True: ret, frame cap.read() if not ret: break # 5. 数据预处理 # 缩放到模型输入尺寸 in_frame cv2.resize(frame, (W, H)) # 从HWC转换为CHW in_frame in_frame.transpose((2, 0, 1)) # 添加N维度 in_frame in_frame.reshape((N, C, H, W)).astype(np.float16) # 使用FP16 # 6. 7. 设置输入并执行推理 infer_request.set_input_tensor(input_layer, in_frame) infer_request.infer() # 8. 获取结果 res infer_request.get_output_tensor(output_layer).data # 9. 结果后处理 (此处简化实际需解析SSD复杂输出) # 假设res是简化后的检测结果包含[id, conf, x1, y1, x2, y2] for det in res[0, 0, :, :]: # 遍历所有检测框 confidence det[2] if confidence 0.5: # 将归一化坐标转换回原图坐标 x1 int(det[3] * frame.shape[1]) y1 int(det[4] * frame.shape[0]) x2 int(det[5] * frame.shape[1]) y2 int(det[6] * frame.shape[0]) cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.imshow(‘Real-time Detection with NCS2’, frame) if cv2.waitKey(1) 0xFF ord(‘q’): break cap.release() cv2.destroyAllWindows()这个代码框架清晰地展示了每一步。在实际应用中第9步的后处理会复杂得多需要根据具体模型的输出格式来编写解析逻辑。6. 性能调优与瓶颈分析实战6.1 性能测量与关键指标部署完成后我们需要关注几个关键指标吞吐量、延迟和功耗。吞吐量每秒能处理多少帧FPS。这是衡量系统处理能力的关键。延迟从输入一帧图像到得到推理结果所需的时间。对于实时交互应用至关重要。功耗整个系统ODYSSEY X86 NCS2的功耗。可以使用USB功率计进行粗略测量。使用Python的time模块可以简单测量延迟和FPSimport time # 在推理循环中 start_time time.time() infer_request.infer() inference_latency (time.time() - start_time) * 1000 # 毫秒要获得稳定的FPS需要连续运行数百次推理取平均值并排除数据准备和结果渲染的时间。6.2 常见瓶颈与优化策略在实际测试中你可能会发现FPS达不到预期。瓶颈可能来自以下方面CPU预处理瓶颈如果使用高分辨率摄像头cv2.resize操作可能非常耗时。优化方法使用硬件加速的图像处理库如libjpeg-turbo或Intel的OpenCV with IPP。考虑在满足精度要求的前提下降低输入图像的分辨率。使用多线程或异步流水线让图像预处理、推理、后处理并行进行。模型本身效率SSD MobileNet V2在NCS2上可能达到10-20 FPS300x300输入。如果追求更高帧率可以考虑更轻量的模型如MobileNet-SSD V1或使用OpenVINO™ Model Zoo中已优化且标明了性能的模型。数据传输瓶颈频繁地在主机内存和NCS2之间传输数据会有开销。虽然USB 3.0带宽足够但应避免不必要的内存拷贝。确保预处理后的数据是连续的numpy数组。NCS2发热与性能稳定性长时间满负荷运行NCS2会发热。虽然它有热保护但过热可能导致性能轻微下降。确保其周围通风良好。调优心得最有效的优化往往是算法层面的。例如对于固定场景的检测可以设置一个“运动检测”或“感兴趣区域”的预处理只在有变化的区域或特定区域运行完整的神经网络推理能极大提升整体吞吐量。7. 进阶应用与问题排查实录7.1 多棒并行推理单个NCS2的性能可能无法满足多路高清视频流的需求。OpenVINO™支持将多个NCS2作为独立的“MYRIAD”设备来使用。你可以在代码中指定设备ID# 假设系统连接了两个NCS2 compiled_model_1 core.compile_model(modelmodel, device_name“MYRIAD.1.1-ma2485”) # 第一个棒 compiled_model_2 core.compile_model(modelmodel, device_name“MYRIAD.2.1-ma2485”) # 第二个棒然后你可以将不同的视频流分配给不同的推理请求和不同的棒实现并行处理。需要注意的是多个棒会共享USB总线的带宽如果同时进行大量数据传输可能会成为新的瓶颈。7.2 典型问题与解决方案速查表以下是我在开发过程中遇到的一些典型问题及解决方法问题现象可能原因排查与解决方案RuntimeError: … no device found1. USB驱动未安装或规则未生效。2. NCS2未插好或供电不足。3. 其他进程占用了设备。1. 运行lsusb检查设备是否存在。确认已执行udev规则配置并重启。2. 尝试更换USB端口最好使用主板原生USB 3.0口。3. 使用fuser或lsof命令检查是否有进程占用/dev/bus/usb/下的设备节点并终止之。推理结果完全错误如全零或乱码1. 数据预处理错误颜色通道、归一化。2. 模型转换时参数错误如输入节点名不对。3. 模型精度不匹配。1.重点检查reverse_input_channels和归一化。用一张简单测试图如纯色图输入看输出是否合理。2. 使用netron工具可视化.xml文件确认输入输出节点名称和形状。3. 确保推理时输入数据的精度如FP16与模型转换时指定的精度一致。推理速度远低于预期1. CPU预处理是瓶颈。2. 模型输入尺寸过大。3. 首次推理慢包含模型加载时间。1. 单独测量预处理和纯推理时间定位瓶颈。2. 尝试减小模型输入尺寸如从300x300降到150x150。3. 首次推理后的速度才是稳定速度。进行“预热”推理后再开始计时。程序运行一段时间后崩溃或NCS2无响应1. NCS2过热。2. 内存泄漏如循环中不断创建新的Core对象。3. 异常输入导致VPU内部错误。1. 触摸NCS2是否烫手改善散热。2. 确保Core,CompiledModel等重量级对象在循环外初始化。3. 增加输入数据的合法性检查如尺寸、数值范围。无法转换PyTorch.pth模型1. OpenVINO™版本对PyTorch算子支持不全。2. PyTorch模型包含动态控制流。1. 尝试将PyTorch模型先导出为ONNX格式再用OpenVINO™转换ONNX模型成功率更高。2. 简化模型避免使用过于复杂的动态特性。这套ODYSSEY X86 NCS2的组合为我打开了一扇低成本进入边缘AI世界的大门。它让我深刻体会到在边缘侧部署AI工程上的挑战环境配置、模型转换、性能调优有时不亚于算法本身。最大的收获不是调通了某个模型而是建立起一套从云端训练到边缘部署的完整思维框架。比如在选择模型时就必须提前考虑目标硬件的算力、内存和算子支持情况这反过来又会促进你在训练阶段就进行模型轻量化设计。

相关新闻

地震数据预处理与初至波拾取实战:从去噪滤波到STA/LTA算法实现

地震数据预处理与初至波拾取实战:从去噪滤波到STA/LTA算法实现

1. 项目概述:从“看”到“算”的认知跃迁如果你已经跟着前两篇内容,从零开始搭建了地震数据处理的软件环境,并且成功加载、查看了第一道地震记录,那么恭喜你,你已经完成了从“门外汉”到“观察者”的第一步。现在&…

2026/10/15 3:11:25 阅读更多 →
Qt魔法之旅 · 全系列课程导航

Qt魔法之旅 · 全系列课程导航

1.前言 大家好!我是隐积!我们的Qt魔法之旅已经更新很多课了,今天我给大家看看我的课程导航吧!(导航到我当前更新的课程) 2.课程导航 第一部分 1.1.Qt是什么?如何下载和安装? 1.…

2026/9/29 12:43:26 阅读更多 →
BG3ModManager中角色模型显示异常的排查与解决

BG3ModManager中角色模型显示异常的排查与解决

BG3ModManager中角色模型显示异常的排查与解决 【免费下载链接】BG3ModManager A mod manager for Baldurs Gate 3. This is the only official source! 项目地址: https://gitcode.com/gh_mirrors/bg/BG3ModManager 在《博德之门3》模组管理过程中,使用BG3M…

2026/10/12 20:22:02 阅读更多 →

最新新闻

智诺方AI|期刊论文导师意见修改,分段改写搞定查重和AIGC

智诺方AI|期刊论文导师意见修改,分段改写搞定查重和AIGC

写好「导师意见修改」,再谈降重与降 AIGC 先把研究内容写清楚,再处理重复率与 AI 痕迹,顺序不能反。导师意见修改最怕「改了表述、丢了要求」。意见若被 AI 一键稀释,返回稿看起来更顺,却没回答导师真正卡住的点。 在期…

2026/10/15 3:11:37 阅读更多 →
Large Language Model Powered Automated Modeling and Optimization of Active Distribution Network D...

Large Language Model Powered Automated Modeling and Optimization of Active Distribution Network D...

文章主要内容总结 本文针对主动配电网(ADNs)调度问题,提出了一种基于大型语言模型(LLM)的自动化建模与优化方法。随着分布式能源(DERs)的大量接入,ADNs调度的复杂性显著提升,但新加入的运营商(如配电网聚合商、虚拟电厂管理者等)往往缺乏电力系统运行、建模、优化及…

2026/10/15 3:11:37 阅读更多 →
GPT-4o 等四个模型明年1月下架API,迁移前先做这几件事

GPT-4o 等四个模型明年1月下架API,迁移前先做这几件事

10 月 14 日,OpenAI 给开发者发了通知:GPT-4o、GPT-4o mini、GPT-4.1、GPT-4.1 mini 这四个模型,将在 2027 年 1 月 14 日从 API 下架,基于它们做的微调版本同一天停用。算下来,离下线还有大概三个月。 这里有个容易忽…

2026/10/15 3:11:37 阅读更多 →
Can Small-Scale Data Poisoning Exacerbate Dialect-Linked Biases in Large Language Models?

Can Small-Scale Data Poisoning Exacerbate Dialect-Linked Biases in Large Language Models?

文章主要内容总结 本文研究了小规模数据投毒是否会加剧大型语言模型(LLMs)中与方言相关的偏见,重点对比了非洲裔美国白话英语(AAVE)和标准美国英语(SAE)的差异。研究使用小尺度和中尺度的LLaMA模型,发现即使暴露于极少量的投毒数据,模型对AAVE输入的毒性输出也会显著…

2026/10/15 3:11:37 阅读更多 →
Improving the Performance of Sequential Recommendation Systems with an Extended Large Language Model

Improving the Performance of Sequential Recommendation Systems with an Extended Large Language Model

文章主要内容总结 本文聚焦于大型语言模型(LLMs)在序列推荐系统中的应用,提出通过在LlamaRec框架中用Llama3替换Llama2来提升推荐性能。研究保持LlamaRec的原有结构(包括检索器和排序器的两阶段推荐流程),仅更换排序器中的LLM,并通过统一随机种子、相同输入数据等确保实…

2026/10/15 3:11:37 阅读更多 →
Apereo CAS 服务注册表自动初始化(Service Registry Initialization)实战指南

Apereo CAS 服务注册表自动初始化(Service Registry Initialization)实战指南

后端认证鉴权单点登录 【免费下载链接】cas Apereo CAS - Identity & Single Sign On for all earthlings and beyond. 项目地址: https://gitcode.com/gh_mirrors/ca/cas 点击查看 免费下载 导读 Apereo CAS 在启动时会根据配置自动将 classpath 上的默认 JS…

2026/10/15 3:10:36 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →