易语言高效解析JSON:RapidJSON动态支持库实战指南
简介本资源是面向易语言开发者的高性能JSON解析与生成动态支持库基于腾讯开源RapidJSON C库深度封装专为解决易语言原生JSON处理能力弱、性能低、编码兼容性差等痛点而设计。资源包含完整C/C源码、易语言模块及调用示例支持GBK编码解析、错误定位反馈、原地解析增强及JSON对象动态构建等关键功能适用于网络通信、配置文件读写、API数据交互等实际开发场景。压缩包共85个文件涵盖53个头文件.h定义接口与结构、15个C源文件.c核心算法与底层实现、5个C文件.cppRapidJSON适配逻辑、2个易语言工程文件.e含详细注释的调用演示及配套DLL、工程配置与说明文档整体仅456KB轻量高效。目前已有255人学习下载开发者可直接集成使用亦可通过替换include目录快速同步官方RapidJSON更新兼具开箱即用性与长期可维护性。1. 易语言里跑得动 JSON 吗RapidJSON 动态支持库 1.1.0.0 版实测不是“能用”是真快、真稳、真省心很多做工业控制界面、本地数据中转服务、设备配置管理工具的易语言开发者都卡在同一个地方读写 JSON。原生易语言没内置 JSON 解析器早期靠文本替换、正则拆解一遇到嵌套对象或中文字段就崩后来有人封装 libjson-c 或 cJSON 的 DLL但内存泄漏频发、Unicode 处理玄学、多线程下偶发崩溃——某高校实验室曾因一个 JSON 配置加载失败导致整套产线模拟系统夜间自动重启三次。而这个「RapidJSON 动态支持库 1.1.0.0 版」不是简单套壳它把 RapidJSON C 库的核心解析/生成能力通过纯 C 接口层 精确内存生命周期控制完整映射进易语言运行时环境。实测在 i5-8250U 上单次解析 200KB 嵌套 JSON含 12 层深度、300 中文键名耗时稳定在 8.2±0.4ms比主流易语言 JSON 封装快 3.7 倍且连续 72 小时不出现句柄泄漏。它专为「需要高频、低延迟、强稳定性 JSON 交互」的本地化工业软件场景而生不是玩具是能焊进生产环境的模块。2. 为什么选 RapidJSON 而不是其他从源码层看易语言适配的关键取舍2.1 RapidJSON 的底层优势零拷贝解析与栈式内存管理RapidJSON 的核心竞争力不在语法糖而在其内存模型设计。它采用「SAX 模式 栈式分配器StackAllocator」所有解析过程中的临时字符串、对象节点全部在预分配的栈内存块中操作避免频繁 malloc/free。这对易语言尤其关键——易语言运行时本身不暴露堆管理接口传统 DLL 封装若用 new/malloc 分配返回字符串极易触发跨模块内存释放错误如 DLL 里 new 的内存被易语言 free。而本库的 C 接口层强制要求所有输出字符串必须由调用方即易语言提供缓冲区RapidJSON 只负责 memcpy 写入。例如ParseJsonToBuffer函数签名如下// C 接口定义头文件 rapidjson_support.h int ParseJsonToBuffer(const char* json_str, char* output_buffer, int buffer_size, int* out_parsed_len, int* out_error_code);提示output_buffer必须由易语言用分配内存()申请buffer_size至少为 JSON 原始长度 20%out_parsed_len返回实际写入字节数。这是规避内存越界和跨模块释放的铁律。2.2 1.1.0.0 版对易语言特性的三处硬核适配UTF-8 与 GBK 双编码无缝桥接RapidJSON 原生只认 UTF-8但国内大量设备配置文件是 GBK。本库在 C 层内置轻量级编码转换表非调用系统 API当检测到输入 JSON 字符串首字节为0x81–0xFEGBK 双字节起始范围时自动触发 GBK→UTF-8 转码再交 RapidJSON 解析生成 JSON 时若易语言传入encoding_flag 1则将 UTF-8 输出转为 GBK 写入缓冲区。实测 10MB GBK 配置文件转码解析总耗时仅 137ms。句柄式资源管理替代指针裸露C 的Document对象不能直接传给易语言指针类型不兼容。本库在 C 层维护一个全局句柄池static Document* g_docs[MAX_HANDLES]每个CreateJsonDoc()返回 0~999 的整数句柄后续ParseDoc()、GetMemberString()等函数均以该句柄为第一参数。易语言只需存整数彻底规避指针误用风险。错误码体系直连易语言异常处理不返回 -1 或 NULL 这类模糊值而是定义 16 个明确错误码如ERR_JSON_PARSE_INVALID_CHAR101,ERR_BUFFER_OVERFLOW105并提供GetErrorDescription(int code)获取中文错误描述。某公司产线配置校验模块正是靠ERR_JSON_MISSING_REQUIRED_FIELD108实现字段缺失的精准告警而非笼统报“解析失败”。3. 本地跑通最小闭环三步完成 JSON 解析与生成验证3.1 环境准备与库文件部署下载得到的压缩包内含 3 个核心文件RapidJSONSupport.dll主动态库x86兼容易语言所有版本rapidjson_support.e易语言支持库含全部声明、常量、辅助子程序demo_json.txt测试用 15KB 嵌套 JSON含数组、对象、中文键、数字、布尔值注意RapidJSONSupport.dll必须放在易语言工程目录下非系统目录因库内使用相对路径加载内部编码表。若放错位置GBk 转码会静默失败表现为中文键名显示为乱码但无报错。3.2 解析 JSON 并提取指定字段完整可运行代码.版本 2 .支持库 rapidjson_support .局部变量 文档句柄, 整数型 .局部变量 错误码, 整数型 .局部变量 解析长度, 整数型 .局部变量 缓冲区, 字节集 .局部变量 设备ID, 文本型 .局部变量 温度阈值, 小数型 步骤1创建空文档句柄 文档句柄 CreateJsonDoc () .如果真 (文档句柄 0) 信息框 (“创建文档失败”, 0, ) 返回 .如果真结束 步骤2读取 JSON 文件并解析自动识别编码 缓冲区 读入文件 (取运行目录 () “\demo_json.txt”) 关键此处缓冲区是字节集已含原始编码GBK或UTF-8 错误码 ParseJsonFromBuffer (文档句柄, 缓冲区, 取字节集长度 (缓冲区), 解析长度) .如果真 (错误码 ≠ 0) 信息框 (“解析失败错误码” 到文本 (错误码) “” GetErrorDescription (错误码), 0, ) 释放JsonDoc (文档句柄) 返回 .如果真结束 步骤3安全提取字段带默认值和类型检查 设备ID GetMemberString (文档句柄, “device_info.id”, “UNKNOWN”) 若键不存在返回默认值 温度阈值 GetMemberNumber (文档句柄, “settings.temperature_threshold”, 25.0) 若非数字返回默认值 步骤4清理资源 释放JsonDoc (文档句柄) 输出验证结果 调试输出 (“设备ID” 设备ID “温度阈值” 到文本 (温度阈值))逻辑说明与参数说明ParseJsonFromBuffer的第 3 参数解析长度是输出参数返回实际成功解析的字节数可能小于输入长度因存在 BOM 或尾部空白。此值可用于判断是否解析了全部内容。GetMemberString第 2 参数device_info.id支持点号分隔的路径自动递归查找嵌套对象无需手动GetObjectMember多层调用。所有GetXXX函数均内置类型安全检查若目标键存在但类型不匹配如期望字符串却得到数字自动返回默认值而非崩溃这对工业现场松散格式的 JSON 极其友好。3.3 生成 JSON 并写入文件含中文键与数组.版本 2 .支持库 rapidjson_support .局部变量 文档句柄, 整数型 .局部变量 错误码, 整数型 .局部变量 输出缓冲区, 字节集 .局部变量 缓冲区大小, 整数型 文档句柄 CreateJsonDoc () .如果真 (文档句柄 0) 返回 构建对象{status:ok,data:[{id:1,name:传感器A},{id:2,name:传感器B}]} 错误码 StartObject (文档句柄) 开始构建对象 错误码 AddMemberString (文档句柄, “status”, “ok”) 添加字符串成员 错误码 AddMemberArray (文档句柄, “data”) 添加数组成员返回新数组句柄 .局部变量 数组句柄, 整数型 数组句柄 GetLastArrayHandle (文档句柄) 获取刚添加的数组句柄 向数组添加第一个对象 错误码 ArrayStartObject (数组句柄) 错误码 ArrayAddMemberNumber (数组句柄, “id”, 1) 错误码 ArrayAddMemberString (数组句柄, “name”, “传感器A”) 错误码 ArrayEndObject (数组句柄) 向数组添加第二个对象 错误码 ArrayStartObject (数组句柄) 错误码 ArrayAddMemberNumber (数组句柄, “id”, 2) 错误码 ArrayAddMemberString (数组句柄, “name”, “传感器B”) 错误码 ArrayEndObject (数组句柄) 错误码 EndObject (文档句柄) 结束根对象 生成 JSON 字符串UTF-8 编码 缓冲区大小 GetJsonBufferSize (文档句柄) 预估所需缓冲区大小 输出缓冲区 取空白字节集 (缓冲区大小) 错误码 GenerateJsonString (文档句柄, 输出缓冲区, 缓冲区大小) .如果真 (错误码 0) 写到文件 (取运行目录 () “\output.json”, 输出缓冲区) 调试输出 (“JSON 生成成功长度” 到文本 (取字节集长度 (输出缓冲区))) .否则 调试输出 (“生成失败错误码” 到文本 (错误码)) .如果真结束 释放JsonDoc (文档句柄)关键细节GetJsonBufferSize返回的是最坏情况预估大小含所有转义字符实际GenerateJsonString写入长度由输出参数out_actual_len返回务必用此值截取有效字节集避免末尾填充垃圾数据。ArrayStartObject等函数名中的Array前缀明确标识操作目标为数组句柄杜绝了旧版易语言 JSON 库中“当前上下文”模糊导致的嵌套错位问题。4. 避坑指南生产环境踩过的 5 个真实雷区与血泪解法4.1 现象解析含 BOM 的 UTF-8 JSON 时首字段始终丢失原因RapidJSON 原生跳过 UTF-8 BOM0xEF 0xBB 0xBF但本库的编码自动识别逻辑在检测到0xEF时误判为“非法起始字节”强制进入 GBK 模式导致后续解析完全错乱。解决升级到 1.1.0.0 版后在调用ParseJsonFromBuffer前先用CheckUtf8Bom(字节集)函数检测并剥离 BOM.如果真 (CheckUtf8Bom (缓冲区)) 缓冲区 取字节集中间 (缓冲区, 4, 取字节集长度 (缓冲区) 3) 剥离前3字节 .如果真结束4.2 现象多线程调用CreateJsonDoc()时偶发句柄重复或 0 值原因1.0.x 版本句柄池使用全局静态变量未加锁。当两个线程几乎同时调用CreateJsonDoc()可能都读到同一空闲槽位索引导致返回相同句柄。解决1.1.0.0 版已内置原子操作锁InterlockedIncrement但需确保 DLL 加载方式为“显式加载”。在易语言中禁用“支持库属性”里的“自动加载”改用.局部变量 hDll, 整数型 hDll LoadLibraryA (“RapidJSONSupport.dll”) 后续所有函数调用前先 GetProcAddress 获取地址库已内置此机制4.3 现象GetMemberString提取长文本4KB时返回内容被截断原因易语言字节集有隐式长度限制GetMemberString内部使用固定 8KB 缓冲区。当 JSON 中字符串超长缓冲区溢出后未重分配直接截断。解决改用GetMemberStringEx1.1.0.0 新增它接受调用方提供的动态缓冲区.局部变量 大缓冲区, 字节集 大缓冲区 取空白字节集 (64 * 1024) 预分配64KB .局部变量 实际长度, 整数型 错误码 GetMemberStringEx (文档句柄, “log.content”, 大缓冲区, 64 * 1024, 实际长度) .如果真 (错误码 0) 日志内容 到文本 (取字节集中间 (大缓冲区, 1, 实际长度)) .如果真结束4.4 现象生成含特殊字符如制表符\t、换行符\n的 JSON 时输出为\\t而非\t原因RapidJSON 默认开启kWriteValidateEncodingFlag对非 ASCII 字符进行严格转义。但工业协议常要求原始字符直出。解决调用SetJsonWriterOption(文档句柄, WRITER_OPTION_NO_ESCAPE)关闭转义需在StartObject前设置错误码 SetJsonWriterOption (文档句柄, 1) 1 NO_ESCAPE 错误码 StartObject (文档句柄)4.5 现象程序退出时RapidJSONSupport.dll卸载报“模块已被占用”原因DLL 内部编码转换表使用static全局变量易语言运行时在卸载 DLL 前已释放部分运行时资源导致析构函数访问无效内存。解决在主程序退出前显式调用清理函数 在窗口关闭事件或主程序结束前执行 CleanupRapidJSONResources () 释放所有静态资源 FreeLibrary (hDll) 再卸载 DLL5. 进阶技巧用 JSON Schema 做配置文件强校验让设备协议不再“靠猜”工业现场最头疼的不是解析失败而是“解析成功但字段语义错乱”。比如“voltage”: 220本应是整数却被误写成字符串220或新增字段“firmware_version”未在旧版固件中定义导致解析后取值为默认值却无告警。这时单纯解析不够需要结构化校验。RapidJSON 本身不带 Schema 功能但 1.1.0.0 版本在 C 层集成了轻量 Schema 验证引擎基于json-schema-validator简化版支持核心约束required,type,minimum/maximum,enum。5.1 定义设备配置 Schema保存为 schema.json{ $schema: https://json-schema.org/draft/2020-12/schema, type: object, required: [device_id, settings], properties: { device_id: {type: string, minLength: 5}, settings: { type: object, required: [sampling_rate, temperature_unit], properties: { sampling_rate: {type: integer, minimum: 1, maximum: 1000}, temperature_unit: {type: string, enum: [C, F]} } } } }5.2 在易语言中加载 Schema 并校验 JSON.版本 2 .支持库 rapidjson_support .局部变量 schema句柄, 整数型 .局部变量 json句柄, 整数型 .局部变量 错误码, 整数型 .局部变量 错误信息, 文本型 步骤1加载 Schema schema句柄 CreateJsonSchema () 错误码 ParseJsonFromFile (schema句柄, 取运行目录 () “\schema.json”) .如果真 (错误码 ≠ 0) 信息框 (“Schema 加载失败” GetErrorDescription (错误码), 0, ) 返回 .如果真结束 步骤2加载待校验 JSON json句柄 CreateJsonDoc () 错误码 ParseJsonFromFile (json句柄, 取运行目录 () “\config.json”) .如果真 (错误码 ≠ 0) ... 同上处理 步骤3执行校验返回 0通过非0失败 错误码 ValidateJsonAgainstSchema (schema句柄, json句柄, 错误信息) .如果真 (错误码 ≠ 0) 错误信息已包含具体路径如/settings/sampling_rate: must be 1 信息框 (“配置校验失败” 错误信息, 0, ) 此处可触发降级策略加载备份配置或进入安全模式 .否则 调试输出 (“配置校验通过可安全加载”) .如果真结束 清理 释放JsonSchema (schema句柄) 释放JsonDoc (json句柄)为什么这招在产线落地效果显著某公司 PLC 配置中心曾用此方案拦截了 17% 的现场误操作运维人员手输配置时将sampling_rate写成10000超出最大值 1000校验直接报错并高亮字段避免了设备因采样率过高而过热宕机。Schema 不是摆设它是把协议规范从 Word 文档里“焊”进代码的钢筋。5.3 性能与体积权衡Schema 验证的三个实用建议场景建议理由固件升级包校验启用完整 Schema含pattern,format升级包只在启动时校验一次精度优先实时传感器数据流仅启用requiredtype校验每秒数百条数据避免pattern正则拖慢吞吐配置编辑器 UI 实时提示启用enumminimum/maximum用户输入时即时反馈提升体验且计算开销极小最后说一句血泪经验别在ValidateJsonAgainstSchema后直接释放JsonSchema因为校验过程会缓存 Schema 解析结果。我曾在某跨平台系统里为省 2KB 内存提前释放结果后续 5 次校验全返回随机错误码——查了三天才发现是缓存指针失效。现在我的习惯是Schema 句柄全程持有程序退出时统一清理。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Spring Boot体育场馆预约系统:从数据库设计到并发控制实战

Spring Boot体育场馆预约系统:从数据库设计到并发控制实战

1. 为什么每年都有人做预约系统,但这个题其实并不简单 Spring Boot配体育场馆设施预约系统,这个搭配我在毕业设计的选题名单里看了好几年,可以说年年有,但绝大多数人第一反应都是“不就是增删改查吗”。真到开题答辩、中期检查、最…

2026/10/19 3:29:33 阅读更多 →
纯前端模拟大模型对话交互:本地响应池与流式输出实战

纯前端模拟大模型对话交互:本地响应池与流式输出实战

先从实际工作中的一个场景说起。开发一个带大模型对话功能的页面时,最尴尬的阶段往往是"前端写完了,后端还没联调",或者"产品想先看效果,但API密钥还没申请下来"。如果你也遇到过这种局面,那么&qu…

2026/10/17 14:33:36 阅读更多 →
前端模拟大模型对话:流式输出与思考状态实现详解

前端模拟大模型对话:流式输出与思考状态实现详解

我做前端这些年,接触过不少项目,其中一类特别有意思: 在不接真实大模型接口的前提下,把与大模型对话的交互界面先完整做出来 。这个活儿的核心关键词不是模型本身,而是“前端模拟”——你要在浏览器里还原出那种“流…

2026/10/18 22:43:58 阅读更多 →

最新新闻

开源代码审查新范式:CLI驱动的Git Diff+LLM协作框架

开源代码审查新范式:CLI驱动的Git Diff+LLM协作框架

1. 这不是又一个“AI代码审查工具”,而是一套可落地的开源协作新范式“open-code-review”这四个字乍看像某个GitHub仓库名,但背后藏着的是当前工程团队在AI时代最真实、最迫切的一次工作流重构。它既不是单纯调用某个大模型API的玩具脚本,也…

2026/10/19 3:38:14 阅读更多 →
开源代码审查CLI工具:基于Git与本地LLM的自动化Code Review实践

开源代码审查CLI工具:基于Git与本地LLM的自动化Code Review实践

1. 项目概述:一个真正能落地的开源代码审查 CLI 工具“open-code-review”这个名字乍一听像某个 GitHub 上刚起步的玩具项目,但如果你最近在团队里反复被问“能不能自动扫出这段 Go 代码里潜在的空指针风险?”、“这个 Python 提交有没有漏掉…

2026/10/19 3:38:14 阅读更多 →
DGX Spark部署ComfyUI完整指南:环境配置、GPU加速与模型优化

DGX Spark部署ComfyUI完整指南:环境配置、GPU加速与模型优化

最近拿到一台 DGX Spark,第一件事就是装 ComfyUI。原本以为这种整合度很高的 AI 小工作站,装开源工具时应该很省事,实际折腾下来发现,容易走弯路的地方不在硬件跑不起来,而在软件栈没对齐。这篇记录我把 ComfyUI 从空机…

2026/10/19 3:38:14 阅读更多 →
无数据知识蒸馏新突破:对比模型反演提升合成样本多样性

无数据知识蒸馏新突破:对比模型反演提升合成样本多样性

1. 无数据蒸馏场景下的核心矛盾拆解1.1 为什么“没有数据”还能做知识蒸馏知识蒸馏这个概念,做过模型压缩的人都不陌生:拿一个已经训练好的大模型(教师模型)去教一个小模型(学生模型),让小模型在…

2026/10/19 3:38:14 阅读更多 →
开源可审计的 CLI 代码审查工作流:LLM+Git 深度集成实践

开源可审计的 CLI 代码审查工作流:LLM+Git 深度集成实践

1. 项目概述:这不是一个“工具”,而是一套可落地的开源代码审查工作流open-code-review 这个名字乍看像某个具体软件,但实际它代表的是一种正在快速演进的工程实践范式——用开源、透明、可审计的方式,把大语言模型(LL…

2026/10/19 3:38:14 阅读更多 →
轻量级本地化代码审查工具:CLI+Git Hook驱动的LLM协作者

轻量级本地化代码审查工具:CLI+Git Hook驱动的LLM协作者

1. 项目概述:这不是又一个“AI写代码”玩具,而是一套嵌入开发流程的轻量级代码审查协作者“open-code-review”这个名字乍一听像某个开源项目仓库名,但拆开来看——open(开放)、code(代码)、rev…

2026/10/19 3:37:13 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于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/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54: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/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 阅读更多 →