YOLOv8 TensorRT C++部署实战:从PyTorch到高效推理
简介本资源面向具备一定C与深度学习基础的开发者聚焦YOLOv8模型借助TensorRT进行C端高效推理部署尤其针对X射线检测等实时目标检测场景。包内提供完整的Visual Studio工程涵盖模型导入、Engine构建、推理实现及输入输出处理等关键环节的代码示例并附带测试图像与模型文件便于读者对照理解从PyTorch权重到TensorRT引擎的转换流程与性能调优思路。资源共85个文件以h头文件、cpp源文件、vcxproj工程配置、ipch与tlog等编译中间文件为主另含jpg与png测试图片压缩包约379.2MB工程结构清晰可直接在VS中打开调试。目前已有3362人学习下载适合希望掌握TensorRT加速YOLOv8部署、提升推理性能的开发者参考实践。1. 从 PyTorch 权重到 C 推理yolov8 用 TensorRT 部署到底在解决什么你训练好的 yolov8 模型在 Python 里跑得好好的model.predict()一行就出框但一旦要交付给产线、嵌入到 Qt 界面、塞进 C 写的工业软件里Python 那套依赖就成了累赘。客户机器上不可能给你装 conda、装 torch、装 ultralytics更不可能接受每次启动等十几秒的模型加载。这时候 yolov8 使用 TensorRT 进行 C 部署就成了绕不开的一步把.pt权重转成 TensorRT 的.engine再用 C 加载这个 engine 做前向推理最终得到一个不依赖 Python、启动快、显存占用可控的可执行程序。这条路适合两类人一类是做边缘设备落地的比如把模型往 Jetson、RK3588 这类板子上搬需要极致推理速度另一类是做桌面端工业软件的用 C 写主程序模型只是其中一个模块。不管哪类核心链路是一样的——导出 ONNX、用 trtexec 或 TensorRT API 构建 engine、写 C 推理代码做前后处理。中间任何一环参数设错结果就是框歪了、类别乱了、速度还不如 Python。下面按我实际踩过的顺序把这条链路拆开讲。2. 环境与版本对齐为什么你的 engine 一换机器就废2.1 TensorRT、CUDA、驱动三者的版本咬合关系TensorRT 不是一个独立运行的库它编译出来的 engine 跟构建时的 TensorRT 版本、CUDA 版本、甚至 GPU 架构是绑定的。我见过最常见的翻车场景在开发机RTX 3090CUDA 12.1TensorRT 8.6上构建好 engine拷到客户机器GTX 1660TiCUDA 11.8TensorRT 8.5上直接报serialization version mismatch。这不是代码问题是 engine 本身不可跨版本、跨架构通用。所以第一步不是写代码是把版本钉死。我的习惯是先确定目标部署机器的环境再倒推开发环境。如果目标机器是 GTX 1660Ti 这种 Turing 架构CUDA 11.8 TensorRT 8.5 是稳的组合如果是 Jetson 系列直接用 NVIDIA 官方 JetPack 里配套的版本别自己升。下面这张表是我实际用过的几组搭配供参考目标硬件CUDATensorRT驱动下限备注GTX 1660Ti / RTX 20 系11.88.5.x522Turing 架构FP16 支持好RTX 30 系12.18.6.x530AmpereINT8 可用Jetson Orin11.48.5.xJetPack 5.1用官方包别乱升RK3588不适用不适用—走 RKNN 路线不是 TensorRT提示engine 文件不是通用格式构建环境和运行环境的 TensorRT 大版本必须一致小版本尽量一致。跨机器部署前先在目标机器上跑一遍trtexec --loadEnginexxx.engine验证。2.2 用 trtexec 把 ONNX 转成 engine 的最小命令ultralytics 的 yolov8 导出 ONNX 很简单但导出时的参数直接决定后面 C 后处理怎么写。先看导出# 在 Python 环境里导出 ONNX注意 opset 和 simplify yolo export modelyolov8n.pt formatonnx opset12 simplifyTrue dynamicFalse imgsz640这里dynamicFalse是关键。如果你导出动态 batch 或动态尺寸后面构建 engine 时要配 optimization profileC 里还要处理动态 shape复杂度陡增。除非你确实需要变长输入否则固定 640x640、batch1 是最省事的。opset12是 TensorRT 8.x 兼容性最好的版本别贪新用 17。导出后用 trtexec 构建 engine# FP16 构建适合 GTX 1660Ti 及以上 trtexec --onnxyolov8n.onnx \ --saveEngineyolov8n_fp16.engine \ --fp16 \ --workspace4096 \ --minShapesimages:1x3x640x640 \ --optShapesimages:1x3x640x640 \ --maxShapesimages:1x3x640x640--workspace4096是给 TensorRT 的显存池单位 MB太小会导致某些层无法用最优 kernel太大浪费显存。4096 对 yolov8n 足够。--fp16在 Turing 及以上架构能带来接近翻倍的速度精度损失对检测任务通常可忽略。如果你的 GPU 不支持 FP16比如很老的 Pascal 卡去掉这个参数走 FP32。构建完成后trtexec 会打印每层耗时和总推理时间。我一般会看GPU Compute Time这一行如果超过 10msyolov8n 在 1660Ti 上说明某些层 fallback 到了 CPU 或者用了低效 kernel需要检查 ONNX 里有没有 TensorRT 不支持的算子。2.3 C 侧依赖TensorRT 头文件、CUDA runtime 和 OpenCVC 工程需要链接三个东西TensorRT 的nvinfer、nvonnxparserCUDA 的cudart以及 OpenCV 用于图像读写和 resize。Windows 上用 Visual Studio 的话把 TensorRT 的lib目录加进库路径include加进头文件路径。Linux 上更简单TensorRT 的 tar 包解压后设好LD_LIBRARY_PATH即可。一个容易忽略的点TensorRT 8.x 的 C API 里nvinfer1::IRuntime和nvinfer1::ICudaEngine的销毁必须用delete不能用destroy()这是 8.x 相对 7.x 的 API 变化。网上很多老代码还在用destroy()编译直接报错。我一般会封装一个TRTDeleter结构体配合std::unique_ptr管理生命周期避免手动 delete 漏掉。3. C 推理代码从 engine 加载到前向传播的完整链路3.1 加载 engine 并创建执行上下文先看加载部分的代码这是整个推理的入口#include NvInfer.h #include NvOnnxParser.h #include cuda_runtime_api.h #include fstream #include memory // TensorRT 对象统一用这个 deleter 管理 struct TRTDeleter { template typename T void operator()(T* obj) const { if (obj) delete obj; // TensorRT 8.x 用 delete不是 destroy() } }; class YOLOv8TRT { public: bool loadEngine(const std::string enginePath) { // 1. 读取 engine 文件到内存 std::ifstream file(enginePath, std::ios::binary); if (!file.good()) return false; file.seekg(0, std::ios::end); size_t size file.tellg(); file.seekg(0, std::ios::beg); std::vectorchar buffer(size); file.read(buffer.data(), size); file.close(); // 2. 创建 runtime 和 engine runtime_.reset(nvinfer1::createInferRuntime(logger_)); engine_.reset(runtime_-deserializeCudaEngine(buffer.data(), size)); if (!engine_) return false; // 3. 创建执行上下文 context_.reset(engine_-createExecutionContext()); return context_ ! nullptr; } private: nvinfer1::ILogger logger_{nvinfer1::ILogger::Severity::kWARNING}; std::unique_ptrnvinfer1::IRuntime, TRTDeleter runtime_; std::unique_ptrnvinfer1::ICudaEngine, TRTDeleter engine_; std::unique_ptrnvinfer1::IExecutionContext, TRTDeleter context_; };这段代码的逻辑很直白engine 文件是二进制序列化后的 TensorRT 网络deserializeCudaEngine把它还原成可执行的 engine 对象createExecutionContext创建一个执行上下文。一个 engine 可以创建多个 context但每个 context 会占用额外显存单线程推理一个就够。logger_是必须传的TensorRT 在反序列化和推理时会通过它输出警告和错误。我一般把 severity 设成kWARNINGkINFO太吵kERROR又会漏掉一些有用的警告。3.2 分配显存与绑定输入输出 bufferTensorRT 推理的数据流是host 内存 → device 显存 → 推理 → device 显存 → host 内存。所以需要为每个输入输出 tensor 分配对应的显存bool allocateBuffers() { // yolov8 只有一个输入 images 和一个输出 output0 // 输入 1x3x640x640 float32输出 1x84x8400 inputSize_ 1 * 3 * 640 * 640 * sizeof(float); outputSize_ 1 * 84 * 8400 * sizeof(float); cudaMalloc(inputDevice_, inputSize_); cudaMalloc(outputDevice_, outputSize_); // host 侧输出 buffer用于接收推理结果 outputHost_.resize(1 * 84 * 8400); // 绑定到 context索引 0 是输入1 是输出 context_-setTensorAddress(images, inputDevice_); context_-setTensorAddress(output0, outputDevice_); return true; }输出 shape1x84x8400是 yolov8 的标准输出84 4 个框坐标 80 个类别分数8400 80x80 40x40 20x20 三个尺度的 anchor 总数。这个 shape 是固定的因为导出时dynamicFalse。如果你导出时用了动态 shape这里就要用getTensorShape动态查询。setTensorAddress是 TensorRT 8.5 之后的新 API老版本用setBindingDimensionsenqueueV2。如果你用的是 8.2 以前的版本代码要改。我建议直接用 8.5API 更清晰。3.3 前处理letterbox 与归一化的 C 实现yolov8 训练时用的是 letterbox 预处理——保持宽高比缩放短边补灰边到 640x640。如果 C 里直接用cv::resize拉伸长宽比变了框会歪。这是新手最容易翻车的地方我当初就因为这个排查了一下午。cv::Mat letterbox(const cv::Mat src, cv::Mat dst, float scale, int padW, int padH) { int w src.cols, h src.rows; scale std::min(640.0f / w, 640.0f / h); int newW std::round(w * scale); int newH std::round(h * scale); cv::resize(src, dst, cv::Size(newW, newH)); padW (640 - newW) / 2; padH (640 - newH) / 2; cv::Mat padded(640, 640, CV_8UC3, cv::Scalar(114, 114, 114)); dst.copyTo(padded(cv::Rect(padW, padH, newW, newH))); dst padded; return dst; }补边的颜色(114, 114, 114)是 ultralytics 的默认值必须一致否则边缘区域的检测会偏。scale、padW、padH要保存下来后处理把框映射回原图时要用。前处理还包括 BGR→RGB、HWC→CHW、归一化到 0~1。这几步可以用 OpenCV 的cv::dnn::blobFromImage一次搞定但要注意它默认是减均值不缩放得手动设1/255.0cv::Mat blob; cv::dnn::blobFromImage(dst, blob, 1.0/255.0, cv::Size(640, 640), cv::Scalar(), true, false); // blob 现在是 1x3x640x640 的 NCHW float32 cudaMemcpy(inputDevice_, blob.ptrfloat(), inputSize_, cudaMemcpyHostToDevice);swapRBtrue做 BGR→RGBcropfalse因为已经 letterbox 过了。这一步做完数据就可以直接喂给 TensorRT 了。3.4 后处理解码 84x8400 输出并做 NMS推理完outputHost_里是 84x8400 的原始输出需要解码成框、过滤低分、做 NMS。yolov8 的输出格式和 yolov5 不同它没有 objectness 分支84 行里前 4 行是cx, cy, w, h后 80 行是类别分数且分数已经过 sigmoid不需要再激活。struct Detection { cv::Rect box; float conf; int classId; }; std::vectorDetection postprocess(const std::vectorfloat output, float scale, int padW, int padH, float confThreshold 0.25f, float iouThreshold 0.45f) { std::vectorDetection detections; std::vectorcv::Rect boxes; std::vectorfloat confs; std::vectorint classIds; int numAnchors 8400; for (int i 0; i numAnchors; i) { float maxConf 0; int maxClass -1; // 遍历 80 个类别分数找最大 for (int c 0; c 80; c) { float score output[(4 c) * numAnchors i]; if (score maxConf) { maxConf score; maxClass c; } } if (maxConf confThreshold) continue; float cx output[0 * numAnchors i]; float cy output[1 * numAnchors i]; float w output[2 * numAnchors i]; float h output[3 * numAnchors i]; // 映射回原图坐标 float x (cx - w / 2 - padW) / scale; float y (cy - h / 2 - padH) / scale; boxes.emplace_back(cv::Rect(x, y, w / scale, h / scale)); confs.push_back(maxConf); classIds.push_back(maxClass); } // OpenCV NMSBoxes 做非极大值抑制 std::vectorint indices; cv::dnn::NMSBoxes(boxes, confs, confThreshold, iouThreshold, indices); for (int idx : indices) { detections.push_back({boxes[idx], confs[idx], classIds[idx]}); } return detections; }这里有几个参数要盯住confThreshold0.25和iouThreshold0.45是 ultralytics 的默认值但实际项目里要根据场景调。工业质检通常把 conf 提到 0.5 以上减少误检密集场景把 iou 降到 0.3 避免漏检重叠目标。坐标映射那一步的(cx - w/2 - padW) / scale顺序不能错先减 pad 再除 scale反了框会整体偏移。4. 避坑与排查engine 构建和推理阶段的 5 个血泪教训4.1 坑一ONNX 导出后输出 shape 对不上现象C 里按1x84x8400分配 buffer推理时 TensorRT 报binding size mismatch。原因ultralytics 不同版本导出的 ONNX 输出 shape 不一样。早期版本输出是1x25200x85yolov5 风格新版才是1x84x8400。另外如果导出时加了nmsTrue输出会变成1x300x6直接是 NMS 后的结果。解决导出后用 Netron 打开 ONNX 看一眼输出节点的 shape或者用trtexec --onnxxxx.onnx --dumpLayerInfo打印。C 里不要硬编码 shape用engine_-getTensorShape(output0)动态查询这样换模型不用改代码。4.2 坑二FP16 构建后精度暴跌现象FP32 engine 检测正常换 FP16 后小目标漏检严重或者框的位置偏移几个像素。原因某些算子对 FP16 敏感尤其是 sigmoid 和除法。yolov8 的类别分数经过 sigmoidFP16 下小分数会被截断到 0。解决用--fp16的同时加--precisionConstraintsobey强制某些层走 FP32或者在 ONNX 里把 sigmoid 之后的输出标记为 FP32。更简单的办法是先用 FP32 验证精度确认无误后再试 FP16对比 mAP 下降是否在可接受范围通常 0.5% 以内。4.3 坑三显存泄漏导致长时间运行崩溃现象程序跑几百帧后cudaMalloc失败或者推理时间越来越长。原因每帧都cudaMalloc和cudaFree或者createExecutionContext没释放。TensorRT 的 context 和 CUDA 显存都是稀缺资源必须复用。解决在初始化阶段一次性分配好 input/output 显存推理循环里只做cudaMemcpy和enqueueV3。context 在析构时用 unique_ptr 自动释放。我一般会在类里加一个bool initialized_标志防止重复初始化。4.4 坑四letterbox 参数没传给后处理现象框的位置整体偏移或者框的大小不对。原因前处理做了 letterbox但后处理忘了用scale和padW/padH还原直接拿 640 坐标系下的框画到原图上。解决把scale、padW、padH作为成员变量存下来前处理算完就存后处理直接用。别用局部变量跨函数传容易漏。4.5 坑五Windows 下 DLL 找不到现象编译通过运行时报找不到 nvinfer.dll或cudart64_xx.dll。原因TensorRT 和 CUDA 的 DLL 不在 PATH 里或者位数不匹配64 位程序链接了 32 位库。解决把 TensorRT 的lib目录和 CUDA 的bin目录加到系统 PATH或者把 DLL 拷到 exe 同目录。用 Visual Studio 的话在项目属性里设好PATH环境变量。另外注意 TensorRT 8.x 只有 64 位版本32 位程序用不了。5. 进阶技巧用 CUDA Stream 和 INT8 把推理压到极致5.1 用 CUDA Stream 做异步推理默认的enqueueV3是同步的CPU 要等 GPU 算完才能继续。如果做视频流处理可以用 CUDA Stream 把数据拷贝和推理重叠起来cudaStream_t stream; cudaStreamCreate(stream); // 异步拷贝输入 cudaMemcpyAsync(inputDevice_, blob.ptrfloat(), inputSize_, cudaMemcpyHostToDevice, stream); // 异步推理 context_-enqueueV3(stream); // 异步拷贝输出 cudaMemcpyAsync(outputHost_.data(), outputDevice_, outputSize_, cudaMemcpyDeviceToHost, stream); // 同步等待 cudaStreamSynchronize(stream);这样在拷贝输入的同时上一帧的推理可能还在跑吞吐量能提升 20%~30%。注意enqueueV3的 stream 参数要和 memcpy 用同一个否则会有竞态。5.2 INT8 量化什么时候值得做INT8 能把推理速度再提一倍但需要校准数据集。TensorRT 的 INT8 是 post-training quantization用几百张代表性图片跑一遍校准生成 scale 因子。yolov8 在 INT8 下 mAP 通常掉 1%~2%如果场景简单比如只检测一类目标完全可接受。构建 INT8 engine 的命令trtexec --onnxyolov8n.onnx \ --saveEngineyolov8n_int8.engine \ --int8 \ --calibcalibration.cache \ --workspace4096calibration.cache需要自己写校准器生成TensorRT 的 Python 和 C API 都支持。我一般用 500 张训练集里的图片做校准太多没必要太少 scale 不准。5.3 一个验证部署是否成功的习惯我每次部署完第一件事不是看速度是拿同一张图分别跑 Python 和 C把框的坐标和分数打印出来对比。如果坐标差在 1~2 像素内、分数差在 0.01 内说明前后处理对齐了。如果差得多八成是 letterbox 或者归一化的问题。这个习惯帮我省了无数次返工。另外engine 文件建议在目标机器上构建别在开发机构建完拷过去。虽然同版本同架构理论上通用但驱动版本差异、GPU 型号差异都可能导致微妙的性能退化。构建一次也就几分钟比排查兼容性问题划算。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

YOLO溺水检测实战:339张数据集处理与训练全流程

YOLO溺水检测实战:339张数据集处理与训练全流程

简介:这是一份面向目标检测实战的YOLO系列算法溺水数据集,共339张图像,覆盖溺水、出水、游泳等场景,适合yolov5、yolov8、yolov9、yolov10及yolo11等主流版本直接训练与验证。包体共1018个文件,每张jpg图像均配套txt格…

2026/10/11 0:36:57 阅读更多 →
Python机器学习信用评估实战:从评分卡到风控模型上线

Python机器学习信用评估实战:从评分卡到风控模型上线

简介:这套资源基于 Python 机器学习实现个人信用评估,以阿里天池贷款违约预测比赛数据集为对象,该数据集包含超过 120 万条贷款记录和 47 列特征变量,其中 15 列为匿名脱敏字段;资源面向机器学习初学者、数据挖掘课程设…

2026/10/11 0:36:56 阅读更多 →
YOLOv8水下管道检测识别:从数据集整理到模型训练与部署全流程解析

YOLOv8水下管道检测识别:从数据集整理到模型训练与部署全流程解析

简介:面向海洋工程与基础设施巡检场景,这套基于YOLOv8的水下管道检测资料包,为需要快速落地目标检测方案的开发者和巡检人员,提供了从数据集到训练模型再到部署参考的一站式支持。压缩包共2000个文件,其中以1985个VOC格…

2026/10/11 0:34:55 阅读更多 →

最新新闻

基于CNN的图像风格迁移毕设实战:VGG19原理、PyTorch源码与调参避坑指南

基于CNN的图像风格迁移毕设实战:VGG19原理、PyTorch源码与调参避坑指南

简介:这是一份面向计算机、人工智能、通信工程等专业学生与教师的毕业设计级项目源码,基于CNN卷积神经网络实现图像与视频风格迁移,适合课程设计、毕设答辩或项目初期立项演示,也便于具备一定Python基础的学习者在此基础上二次开发…

2026/10/11 1:25:27 阅读更多 →
深度学习台风路径预测:CNN+LSTM模型实战与工程避坑指南

深度学习台风路径预测:CNN+LSTM模型实战与工程避坑指南

简介:面向深度学习与气象交叉领域的开发者与科研人员,这份资源聚焦“基于深度学习的台风路径预测”完整项目,覆盖卷积神经网络、长短期记忆网络、自编码器等模型在历史气压、风速、海洋温度数据上的训练与调优,系统梳理数据预处理…

2026/10/11 1:25:27 阅读更多 →
基于Python的PCA人脸识别:从原理到调参的完整实践指南

基于Python的PCA人脸识别:从原理到调参的完整实践指南

简介:面向大学生课程设计与机器学习初学者的PCA人脸识别算法资源包,基于Python完整实现了从数据预处理、协方差矩阵计算、特征值分解到特征脸构建与识别的全过程。包内共21个文件,包含4个Python源码模块、16张运行效果或步骤示意图&#xff0…

2026/10/11 1:25:27 阅读更多 →
可复用Python GAN工程包:绕过90%初学者崩溃现场

可复用Python GAN工程包:绕过90%初学者崩溃现场

简介:本资源是一份面向深度学习初学者与实践者的生成对抗网络(GAN)入门级Python实现项目,聚焦GAN核心原理的代码化呈现与可视化验证,帮助读者理解判别器与生成器的协同博弈机制。压缩包共11个文件,含5张训练…

2026/10/11 1:25:27 阅读更多 →
Wand-Enhancer:免费解锁 Wand(WeMod)Pro 功能的本地补丁指南

Wand-Enhancer:免费解锁 Wand(WeMod)Pro 功能的本地补丁指南

Wand-Enhancer:免费解锁 Wand(WeMod)Pro 功能的本地补丁指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wa…

2026/10/11 1:25:27 阅读更多 →
PCIe 4.0时代U.2连接器组装检测设备选型与工艺控制指南

PCIe 4.0时代U.2连接器组装检测设备选型与工艺控制指南

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

2026/10/11 1:24:27 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →