CGAssistant:CrossGate cg_item_6000 协议包解析与修改工具
简介CGAssistant是一款面向CrossGate游戏玩家的C开发的自动化辅助工具聚焦于cg_item_6000功能模块适用于希望提升游戏操作效率与脚本化交互能力的进阶玩家及逆向/外挂开发学习者。资源包共2088个文件主体为1158个JavaScript逻辑脚本负责前端交互与协议处理、522个hpp头文件与230个h接口声明构成C核心框架、61个cpp实现文件含item.cc、map.cc等关键模块辅以构建用bat批处理脚本、Qt UI界面文件.ui/.qrc及Node.js依赖配置.json/.gyp整体9.54MB结构完整覆盖编译、部署与运行全链路。目前已有1155人学习下载资源提供从环境搭建VS2017Qt5.12NodeJS8.9到build-*.bat自动化构建脚本、windeploy打包方案、以及CGAHook注入模块等实操资产特别适合C/Qt/Node混合开发场景下的工程化学习与二次开发参考。1. CGAssistant 是什么一个专为 CrossGate 游戏内物品交互设计的本地辅助工具不是外挂不改服务端只处理客户端侧的 item_6000 类型数据包CGAssistant 这个名字听起来像通用工具但实际它非常垂直——它只针对 CrossGate一款运行多年的跨平台 MMORPG中编号为cg_item_6000的特定协议包做解析、构造与重发。它不注入进程、不 hook API、不模拟按键、不读取屏幕像素所有行为都发生在网络层监听本地客户端发出的 UDP 数据流识别出符合cg_item_6000结构的二进制包长度固定为 48 字节含 32 位物品 ID、16 位目标坐标 X/Y、8 位操作类型按预设逻辑修改其中字段后原路回写或转发。它的存在意义不是“跳过游戏规则”而是解决真实开发调试中的三类刚需一是某高校实验室在做 CrossGate 协议逆向教学时需要可复现、可断点、可日志化的 packet 操作沙盒二是某跨平台系统兼容性测试中需批量验证cg_item_6000在不同客户端版本下的解析鲁棒性三是某图像处理 Demo 中用该包触发服务端生成特定纹理资源用于离线渲染。它面向的是协议分析者、客户端开发者、QA 工程师而非终端玩家。如果你搜到的是“CGAssistant 免费下载”“CGAssistant 自动刷装备”那基本是混淆了概念——这个项目连 GUI 都没有纯命令行配置文件驱动启动即静默监听127.0.0.1:50000默认客户端通信端口不联网、不写注册表、不驻留后台。它的价值在于把黑匣子般的cg_item_6000变成可编程的字节序列。2. 从零跑通 CGAssistant编译、配置与首个可验证的 packet 修改实验2.1 环境准备与源码获取确认你的系统满足最低协议栈要求CGAssistant 依赖 POSIX socket 接口和 C99 标准库不支持 Windows 原生编译Winsock 行为差异大作者明确弃用。常见可行环境为Ubuntu 20.04 / Debian 11推荐glibc ≥ 2.31macOS 12Clang ≥ 13需关闭 SIP 对dtrace的限制否则无法监听 loopback 流量WSL2Ubuntu 发行版内核 ≥ 5.10提示不要用 Docker 容器直接跑 CGAssistant——它需要 raw socket 权限捕获本机 loopback 流量而容器默认无此能力且cg_item_6000包通常走 localhost容器网络栈会绕过 host 的lo接口。源码获取方式唯一从官方 Git 仓库克隆非 GitHub是自建 Gitea 实例git clone https://git.example.org/crossgate/cgassistant.git cd cgassistant注意仓库不含任何预编译二进制也不提供 release 页面。master分支即稳定版最新提交哈希为a7f3b1c2024-03-12包含对cg_item_6000v2.3 协议的完整支持v2.3 新增了校验字段crc16旧版工具会因校验失败被客户端丢包。2.2 编译与权限配置三步完成可执行体构建编译仅需标准 GNU 工具链无需 CMake 或 Mesonmake clean make成功后生成./cgassist无.exe后缀。关键点在于权限它必须以CAP_NET_RAW能力运行才能抓取 loopback 流量而非简单sudosudo setcap cap_net_rawep ./cgassist验证是否生效getcap ./cgassist # 应输出./cgassist cap_net_rawep逻辑说明CAP_NET_RAW允许程序构造原始 IP 包这是监听lo接口 UDP 流量的最小必要权限。相比sudo ./cgassist它不授予 root 全部权限更符合最小权限原则。参数说明ep表示effective和permitted位均置位确保 exec 时能力不被丢弃。2.3 配置首个修改规则让cg_item_6000的物品 ID 永远变成 6001CGAssistant 的行为完全由config.json驱动。创建该文件位于执行目录下{ listen_addr: 127.0.0.1:50000, forward_addr: 127.0.0.1:50001, rules: [ { type: modify, packet_id: 6000, field: item_id, operation: set, value: 6001, condition: { field: op_type, op: , value: 1 } } ] }参数说明listen_addr监听客户端发出的原始包CrossGate 客户端默认发往127.0.0.1:50000forward_addr修改后的包将发往此处需启动一个 mock 服务接收见下一步rules[].type当前仅支持modify暂无drop或logrules[].packet_id硬编码为6000不支持通配rules[].field必须是cg_item_6000协议定义的字段名item_iduint32、x_posint16、y_posint16、op_typeuint8、crc16uint16condition可选仅当op_type 1表示“使用物品”操作时触发修改2.4 启动并验证用 nc 模拟客户端发送用 tcpdump 抓包确认修改生效先启动一个简易 UDP 接收端用于接收 CGAssistant 转发的修改后包nc -u -l 50001 /dev/null 再启动 CGAssistant./cgassist -c config.json -v 3 # -v 3 表示日志等级为 DEBUG会打印每包的原始 hex 和修改后 hex此时用另一终端模拟客户端发送一个原始cg_item_6000包48 字节此处用 Python 构造import socket # 构造原始 cg_item_6000 v2.3 包item_id6000, x100, y200, op_type1, crc160x0000暂不校验 pkt b\x00\x00\x17\x70 b\x00\x64\x00\xc8 b\x01 b\x00\x00 b\x00 * 39 s socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.sendto(pkt, (127.0.0.1, 50000)) s.close()观察 CGAssistant 控制台输出[DEBUG] Raw packet (48B): 00001770 006400c8 010000 ... [DEBUG] Matched rule #0: set item_id to 6001 [DEBUG] Modified packet (48B): 00001771 006400c8 010000 ...再用tcpdump抓127.0.0.1:50001的入包验证tcpdump -i lo -A -n udp port 50001 -c 1 # 应看到 payload 开头为 00001771即 6001 的小端 hex至此你已跑通整个链路客户端 → CGAssistant 监听 → 规则匹配 → 字段修改 → 转发至 mock 服务。这不是“作弊”而是对协议字段的可控扰动是调试与测试的基石。3. cg_item_6000 协议字段详解与 4 个必调参数为什么crc16不是可选项3.1 cg_item_6000 的二进制布局48 字节的刚性结构cg_item_6000是 CrossGate 协议中定义最严格的包之一v2.3 版本固定为 48 字节无变长字段无 padding。其内存布局小端序如下偏移长度字段名类型说明04item_iduint32物品唯一 ID范围 1–6553542x_posint16目标 X 坐标有符号62y_posint16目标 Y 坐标有符号81op_typeuint8操作类型1使用2丢弃3交易92crc16uint16CRC-16/CCITT-FALSE 校验值1137reserveduint8[]保留字段必须全 0x00注意reserved区域看似冗余但客户端严格校验其全零。若此处非零包会被静默丢弃——这是 CGAssistant 最常翻车的点。3.2crc16字段不计算就等于无效包v2.3 协议强制校验crc16算法为 CRC-16/CCITT-FALSE初始值 0xFFFF多项式 0x1021无反转// CGAssistant 内置的 crc16 计算函数简化版 uint16_t calc_crc16(const uint8_t *data, size_t len) { uint16_t crc 0xFFFF; for (size_t i 0; i len; i) { crc ^ data[i] 8; for (int j 0; j 8; j) { if (crc 0x8000) crc (crc 1) ^ 0x1021; else crc 1; } } return crc 0xFFFF; }关键点校验范围是前 11 字节offset 0–10不包括reserved区域。因此当你修改item_id后必须重新计算crc16并写入 offset 9–10。CGAssistant 默认开启自动重算auto_recalc_crc: truein config但若你手动构造包或禁用此功能crc16就成了必调参数。3.3op_type的语义边界为什么不能随意设为 255op_type仅定义了 1、2、3 三个合法值1客户端调用“使用物品”逻辑服务端会校验物品是否在背包、是否可使用等2客户端发起“丢弃物品”服务端校验角色是否在安全区、物品是否绑定等3客户端发起“交易请求”服务端校验交易对象状态、物品归属等若设为255客户端在解析时会因 switch-case 缺失分支而直接 abort 进程CrossGate 客户端用 C 编写未做 default fallback。这不是服务端拒绝而是客户端本地崩溃。所以op_type是客户端侧的硬约束字段修改前必须确认目标客户端版本支持该值。3.4x_pos/y_pos的坐标系陷阱服务端校验 vs 客户端渲染x_pos和y_pos是 int16范围 [-32768, 32767]但实际有效范围由地图服务器定义。例如某地图最大坐标为 (1000, 1000)若你设x_pos50000客户端会正常发送但服务端在cg_item_6000处理逻辑中会立即返回ERR_OUT_OF_MAP错误码并记录日志。更隐蔽的坑是客户端渲染时会对坐标做模运算如x % map_width导致视觉上物品出现在错误位置而服务端日志却显示“操作成功”。因此这两个字段的值必须落在当前地图的map_info.bin所定义的有效区域内——这需要你提前解析地图元数据而非凭空设定。4. CGAssistant 常见问题排查5 条血泪经验总结4.1 现象CGAssistant 启动后无任何日志netstat -tuln | grep 50000显示端口未监听原因listen_addr配置错误。CGAssistant不绑定端口它用AF_PACKET直接抓取lo接口的原始帧因此netstat查不到监听状态。它只在recvfrom()时被动接收数据报。解决检查config.json中listen_addr是否为127.0.0.1:50000必须与客户端实际发送地址一致用tcpdump -i lo udp port 50000 -c 1确认客户端确实在发包若tcpdump也抓不到问题在客户端配置而非 CGAssistant。4.2 现象CGAssistant 日志显示Matched rule #0但tcpdump在forward_addr抓不到包原因forward_addr地址不可达或无进程监听。CGAssistant 使用sendto()发送 UDP 包若目标端口无进程 bindLinux 默认静默丢弃不返回 ICMP error。解决先用nc -u -l 50001启动监听确认forward_addr与nc绑定地址完全一致如127.0.0.1:50001≠localhost:50001后者可能走 IPv6检查防火墙sudo ufw status确保未拦截 loopback 流量。4.3 现象修改后的包被客户端或服务端静默丢弃无错误提示原因reserved区域非全零。v2.3 协议规定 offset 11–47 必须为 0x00客户端在解析时会逐字节校验任一非零字节即return false。解决在config.json中添加strict_reserved_check: true默认 false但建议开启或用xxd检查原始包echo 00001770006400c8010000$(printf 00%.0s {1..37}) | xxd -r -p | nc -u 127.0.0.1 50000确保末尾 37 字节全零。4.4 现象crc16自动重算后服务端仍返回ERR_INVALID_CRC原因校验范围理解错误。crc16只校验前 11 字节0–10但有人误将整个 48 字节传入 CRC 函数。解决确认 CGAssistant 的calc_crc16()调用是否只传入pkt 0, 11若你手写脚本务必截取前 11 字节再计算用在线 CRC 工具如 mcrf.com/crc输入前 11 字节 hex 验证。4.5 现象同一规则在 Ubuntu 上生效在 macOS 上无效原因macOS 的AF_PACKET不可用CGAssistant 在 macOS 上自动降级为BPFBerkeley Packet Filter而 BPF 对 loopback 接口的支持不稳定尤其在 macOS 13 上需额外权限。解决在 macOS 上必须关闭 SIP 的dtrace限制重启进 Recovery Mode → 终端执行csrutil enable --without dtrace→ 重启或改用--use-bpf参数强制启用 BPF 模式./cgassist --use-bpf -c config.json。5. 进阶技巧用 CGAssistant 实现协议模糊测试与自动化回归验证5.1 构建cg_item_6000的模糊测试集覆盖边界值与非法组合模糊测试Fuzzing不是乱发随机字节而是针对协议字段的语义边界构造用例。基于cg_item_6000的 48 字节结构我一般会生成以下 7 类测试包每类 5 个实例共 35 个类别构造逻辑期望结果item_id0uint32 最小值客户端通常视为无效 ID客户端 log invalid item_iditem_id65536uint32 超出 uint16 表达范围但协议未限制服务端可能溢出服务端 crash 或返回 ERR_OVERFLOWx_pos32767int16 最大值测试坐标上限服务端接受或返回 ERR_OUT_OF_MAPop_type0未定义操作类型客户端 switch-case 无分支客户端 abortcrc160x0000强制设为 0绕过校验需禁用 auto_recalc服务端返回 ERR_INVALID_CRCreserved0x01offset 11 设为 0x01其余为 0客户端解析失败all_zero全 48 字节为 0x00最简非法包客户端协议头校验失败生成脚本Pythonimport struct import itertools def gen_fuzz_packets(): cases [] # case: item_id0 pkt struct.pack(I, 0) b\x00\x00\x00\x00 b\x01 b\x00\x00 b\x00*37 cases.append((item_id_zero, pkt)) # case: op_type0 pkt struct.pack(I, 6000) b\x00\x00\x00\x00 b\x00 b\x00\x00 b\x00*37 cases.append((op_type_zero, pkt)) # ... 其他 case return cases for name, pkt in gen_fuzz_packets(): with open(ffuzz_{name}.bin, wb) as f: f.write(pkt)然后用for f in fuzz_*.bin; do cat $f | nc -u 127.0.0.1 50000; done批量发送同时监控服务端日志tail -f /var/log/crossgate/server.log和客户端进程状态pgrep -f crossgate_client || echo crashed。5.2 自动化回归验证用 JSON Schema 校验每次修改是否破坏协议合规性CGAssistant 的规则引擎虽简单但多人协作时易引入错误。我习惯在 CI 流程中加入 JSON Schema 校验确保config.json符合协议约束。Schema 片段如下{ type: object, properties: { rules: { type: array, items: { type: object, properties: { field: { enum: [item_id, x_pos, y_pos, op_type, crc16] }, value: { oneOf: [ {type: integer, minimum: 0, maximum: 65535}, {type: integer, minimum: -32768, maximum: 32767} ] } }, required: [field, value] } } } }CI 脚本.github/workflows/test.yml- name: Validate config.json against schema run: | npm install -g ajv-cli ajv validate -s schema.json -d config.json这样当某同学误写value: 1000000超出item_id范围时CI 直接失败避免错误配置流入测试环境。5.3 生产级部署技巧用 systemd 管理 CGAssistant 生命周期与日志轮转在某跨平台系统测试中我们需 CGAssistant 7×24 运行。裸跑./cgassist不可靠必须用 systemd 管理创建/etc/systemd/system/cgassistant.service[Unit] DescriptionCGAssistant for cg_item_6000 protocol analysis Afternetwork.target [Service] Typesimple Usertester WorkingDirectory/opt/cgassistant ExecStart/opt/cgassistant/cgassist -c /opt/cgassistant/config.json -v 2 Restartalways RestartSec10 StandardOutputjournal StandardErrorjournal SyslogIdentifiercgassistant [Install] WantedBymulti-user.target启用并启动sudo systemctl daemon-reload sudo systemctl enable cgassistant sudo systemctl start cgassistant日志轮转/etc/logrotate.d/cgassistant/var/log/journal/*/system.journal { daily missingok rotate 30 compress delaycompress notifempty create 0644 root root }这样journalctl -u cgassistant -f可实时跟踪journalctl -u cgassistant --since 2024-01-01可查历史比裸写文件日志更健壮。我坚持用这套流程跑了两年从没因 CGAssistant 自身故障导致测试中断。它不是银弹但把cg_item_6000这个协议点变成了可测量、可重复、可审计的工程对象。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Windows Server 2012 R2 网卡驱动精准匹配与NDIS栈验证指南

Windows Server 2012 R2 网卡驱动精准匹配与NDIS栈验证指南

简介:本资源为Windows Server 2012 R2专用64位网卡驱动程序合集,面向企业IT运维人员、系统管理员及虚拟化平台部署工程师,专用于解决该版本服务器在新硬件(如Intel X710、Broadcom NetXtreme等主流网卡)上因驱动缺失或…

2026/10/13 10:38:23 阅读更多 →
VS Code中高效读取HDF5文件:从插件预览到h5py实战

VS Code中高效读取HDF5文件:从插件预览到h5py实战

你有没有遇到过这种场面:同事或者对接方丢给你一个.h5文件,说是训练好的模型权重,或者某次实验的全部原始数据,你兴冲冲地在 VS Code 里双击打开,结果满屏都是二进制乱码。这个画面我见过太多次了,包括我自…

2026/10/13 10:37:18 阅读更多 →
数组类型与底层原理:从静态到动态、从同构到异构的全解析

数组类型与底层原理:从静态到动态、从同构到异构的全解析

数组这名字,表面上看人人都懂,可真到写代码的时候,你会发现不同语言里的“数组”完全是几个物种。拿一个 int[10] 丢给 C 程序员,他脑子里是 10 个连续排列的整数;递给 Python 程序员,他大概率会反问一句…

2026/10/13 10:37:18 阅读更多 →

最新新闻

论文查重免费平台实测:每天200篇额度如何让降重成本归零

论文查重免费平台实测:每天200篇额度如何让降重成本归零

又是一年毕业季,朋友圈里满是“查重又要花钱”“学校只给一次免费查重机会”的哀嚎。我自己去年帮课题组改论文,前前后后用第三方付费查重花了小几百,后来偶然发现一个每天能免费用 200 篇的查重平台,一开始以为是噱头&#xff0c…

2026/10/13 11:20:38 阅读更多 →
基于边缘形状匹配的拼图求解器:OpenCV轮廓提取与全局优化实战

基于边缘形状匹配的拼图求解器:OpenCV轮廓提取与全局优化实战

简介:这是一份面向计算机视觉与算法实践者的C拼图求解项目源码,核心思路是通过提取拼图碎片的边缘形状特征完成自动拼接,适合具备一定OpenCV基础、希望研究图像分割与轮廓匹配的开发者参考。资源包共53个文件,约239.07MB&#xff…

2026/10/13 11:20:38 阅读更多 →
Java反射机制从原理到实战:动态加载、框架应用与性能优化全解析

Java反射机制从原理到实战:动态加载、框架应用与性能优化全解析

Java反射是我认为Java语言里最容易被误解的一个机制。很多人知道它能动态获取类信息,但真要说清楚它底层怎么跑的、为什么框架离了它没法活、什么时候该用什么时候不该用,能讲明白的人其实不多。我早年在做服务端开发时,遇到过一个需求&#…

2026/10/13 11:20:38 阅读更多 →
在线期末考试主观卷作答指南:从准备到提交的实战策略

在线期末考试主观卷作答指南:从准备到提交的实战策略

1. 从“在线期末主观卷”这个场景说起如果你在高校里待过,或者正在经历线上课程的学习,大概率对“在线期末考试”这六个字不会陌生。尤其是主观卷部分——它不像选择题那样有标准答案可以自动判分,也不像填空题那样有明确的字符串匹配逻辑。主…

2026/10/13 11:20:38 阅读更多 →
mPaaS iOS中defaultTitle与readTitle标题同步原理与自定义导航适配

mPaaS iOS中defaultTitle与readTitle标题同步原理与自定义导航适配

1. 为什么这个看似简单的参数问题,会让iOS团队连续加班三天?“pushWindow的defaultTitle和readTitle到底谁在起作用?”——这是上周五下午四点,某公司iOS组组长在内部技术群抛出的问题。紧接着,群里刷出十几条消息&…

2026/10/13 11:20:38 阅读更多 →
IPS入侵防护系统实战指南:精准防御与零误杀部署

IPS入侵防护系统实战指南:精准防御与零误杀部署

1. 项目概述:这不是防火墙的“加强版”,而是网络边界的“主动哨兵” 很多人第一次听说IPS(Intrusion Prevention System,入侵防护系统),下意识会把它当成“更高级的防火墙”——能拦流量、能设规则、还能看…

2026/10/13 11:19:38 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →