数据可视化竞赛作品工程化指南:从选题到交付的完整链路

简介:这份资源是2023年全国大学生数据可视化赛道创意作品的完整项目包,面向计算机相关专业的教师、正在准备课程设计或期末大作业的学生,以及希望进行项目实战演练的开发者。项目经严格评审获得95分高分,测试稳定后上传,可直接作为课设或毕业设计参考。压缩包共190个文件,约2.58MB,涵盖Python、Java、C、C#、JavaScript等多种语言源码,以及jpg、png图片素材、json配置、css样式、html页面和数据库文件等,结构完整,便于按模块查阅。内容涉及DS1302时钟、DHT11温湿度、UART串口、ADC采集、WT588D语音等硬件驱动与数据可视化逻辑,能帮助读者理解从数据采集到界面展示的完整链路。目前已有63人学习下载,适合需要完整赛题方案、排错思路和可运行代码的读者参考,商用需私信沟通。

1. 数据可视化赛道作品拆解:从创意到可复现的工程路径

数字媒体科技作品竞赛里的数据可视化赛道,每年收到的作品两极分化极其严重。一类是截图拼贴加几句抒情文案,评审打开三秒就关掉;另一类是打开就能交互、数据能追溯到源头、图表切换有过渡动画、移动端也不崩的完整作品。差距不在审美,在于有没有把它当成一个工程问题来做。这个标题指向的是一份完整的参赛作品归档,但真正值得拆的不是那份压缩包本身,而是它背后那条从选题、数据处理、可视化编码到打包交付的完整链路。如果你正准备参加类似赛道,或者手头有一个数据展示需求要从零搭起来,下面这套路径可以直接复用。适合有基础前端能力、但没做过完整数据可视化项目的同学,也适合想了解这类作品评审逻辑的从业者。

2. 选题与数据源:什么样的创意能撑起一个赛道作品

2.1 从“好看”倒推“做什么图”

很多人做数据可视化的第一步是找数据,找到什么画什么,最后出来一堆互不相关的柱状图和饼图。正确的顺序反过来:先确定你想让观众看完记住什么结论,再倒推需要什么数据、用什么图表形式承载。

举个例子,假设你想表达“某城市近五年空气质量变化趋势”,这个结论天然适合折线图加面积图叠加,再配一个热力日历展示每日波动。但如果你选的是“不同区域的产业分布”,那就更适合矩形树图或堆叠条形图。图表类型不是随便选的,它由数据维度和你想强调的对比关系决定。

常见做法是列一张表,左边写“我想表达的结论”,右边写“需要的数据字段”和“候选图表类型”,然后筛选出数据可得、图表可实现的那几个组合。这一步花半小时,能省掉后面两天的返工。

2.2 数据获取的三个可靠渠道

数据源决定了作品的天花板。以下三类渠道在竞赛场景下最稳妥:

第一类是公开数据平台。很多城市都有数据开放平台,提供 CSV 或 JSON 格式的下载。优点是字段规范、有元数据说明;缺点是更新频率不确定,下载前先看“最后更新时间”。

第二类是行业报告附带的统计数据。咨询机构、行业协会发布的年度报告里通常有结构化表格,手动整理成 CSV 即可。注意保留原始出处,评审会看数据可信度。

第三类是自己采集。比如用公开 API 定时抓取,或者做小规模问卷。自己采集的数据在“创意”维度上加分明显,但要额外做清洗和校验。

import pandas as pd # 读取原始 CSV,指定编码防止中文乱码 df = pd.read_csv("raw_data.csv", encoding="utf-8-sig") # 查看基本结构和缺失情况 print(df.shape) print(df.isnull().sum()) # 统一列名,去掉前后空格 df.columns = [c.strip() for c in df.columns] # 对数值列做类型转换,无法转换的置为 NaN numeric_cols = ["value", "year", "index"] for col in numeric_cols: df[col] = pd.to_numeric(df[col], errors="coerce") # 删除关键字段缺失的行 df.dropna(subset=["year", "value"], inplace=True) # 输出去重后的年份范围,确认数据覆盖区间 print(sorted(df["year"].unique()))

这段代码做的是最基础的数据体检。encoding="utf-8-sig"是为了处理带 BOM 的中文 CSV,不加这个参数经常出现第一列列名带乱码的情况。errors="coerce"把无法转换的值变成 NaN 而不是直接报错,方便后续统一处理。dropna的subset参数只检查关键列,避免因为某个非关键字段缺失就丢掉整行数据。

2.3 数据清洗的边界:什么时候该停

清洗数据最容易陷入的坑是“过度清洗”。有人把异常值全删了,结果把真实的市场波动也删掉了。判断标准很简单:这个异常值能不能找到合理解释?如果能(比如某年政策变化导致数据跳变),保留并在注释里说明;如果不能(比如明显是录入错误,数值多了两个零),修正或删除。

另一个边界是粒度。原始数据可能是日级的,但你的图表只需要月级。这时候做聚合而不是逐条展示,既减少数据量又让趋势更清晰。但聚合方式要写清楚——是求和、求平均还是取中位数,不同方式结论可能完全相反。

3. 可视化编码:用 ECharts 搭出可交互的完整页面

3.1 为什么选 ECharts 而不是 D3

D3 灵活度最高,但学习曲线陡,一个简单的柱状图要写几十行 SVG 操作代码。ECharts 开箱即用,配置项驱动,适合竞赛场景下快速出效果。更重要的是 ECharts 自带响应式、动画过渡、工具箱(下载图片、数据视图),这些在评审眼里都是加分项。

如果你的作品需要高度定制化的视觉风格,比如非标准图表类型,那 D3 更合适。但对于 90% 的数据可视化赛道作品,ECharts 足够用,而且社区示例多,遇到问题容易搜到答案。

3.2 一个完整的 ECharts 初始化模板

// 初始化图表实例,绑定到指定 DOM 容器 const chart = echarts.init(document.getElementById("main-chart"), null, { renderer: "canvas", // 默认 canvas,数据量大时性能更好 devicePixelRatio: window.devicePixelRatio // 适配高分屏 }); // 配置项:以折线图为例 const option = { title: { text: "年度趋势变化", left: "center", textStyle: { fontSize: 16 } }, tooltip: { trigger: "axis", // 鼠标悬停显示该轴上的所有系列 axisPointer: { type: "cross" } }, legend: { bottom: 0, data: ["指标A", "指标B"] }, grid: { left: "10%", right: "5%", top: "15%", bottom: "15%", containLabel: true // 防止轴标签被裁切 }, xAxis: { type: "category", data: ["2019", "2020", "2021", "2022", "2023"], boundaryGap: false // 折线图从边缘开始,不留空隙 }, yAxis: { type: "value", name: "数值" }, series: [ { name: "指标A", type: "line", smooth: true, // 平滑曲线,视觉更柔和 data: [120, 200, 150, 80, 170], areaStyle: { opacity: 0.15 } // 面积填充,增强趋势感 }, { name: "指标B", type: "line", smooth: true, data: [60, 90, 130, 110, 95] } ] }; chart.setOption(option); // 窗口尺寸变化时重绘,避免图表变形 window.addEventListener("resize", () => chart.resize());

renderer选 canvas 是因为大多数场景下 canvas 渲染大数据量时比 svg 流畅。devicePixelRatio不设置的话,在 Retina 屏幕上图表会模糊。containLabel: true是一个容易被忽略但很关键的配置——不加的话,y 轴数值较长时会被容器边缘裁掉。boundaryGap: false只对 category 轴有效,让折线从 y 轴直接开始,视觉上更紧凑。

3.3 多图表联动与数据切换

单个图表撑不起“作品感”。通常需要两到三个图表联动:点击某个区域,其他图表跟着筛选。ECharts 通过connect或者手动监听事件实现。

// 监听柱状图的点击事件,联动更新折线图 chartBar.on("click", (params) => { const selectedCategory = params.name; // 从原始数据中筛选对应类别的数据 const filtered = rawData.filter(d => d.category === selectedCategory); // 更新折线图的数据 chartLine.setOption({ xAxis: { data: filtered.map(d => d.year) }, series: [{ data: filtered.map(d => d.value) }] }); });

这段逻辑的核心是“事件驱动 + 数据筛选 + 局部更新”。注意setOption时只传需要更新的字段,ECharts 会做合并而不是全量替换,这样动画过渡更自然。如果每次都传完整 option,图表会重新渲染,过渡动画丢失,体验很差。

4. 性能与适配:让作品在评审电脑上不翻车

4.1 数据量超过一万条时的处理策略

ECharts 在数据量超过一万条时,折线图会明显卡顿。解决方案有三个层次:

第一层是数据聚合。如果展示的是趋势,按天聚合到按月,数据量直接降一个数量级。

第二层是开启large模式。ECharts 对散点图和折线图提供了large: true和largeThreshold配置,开启后使用简化渲染路径。

series: [{ type: "line", large: true, largeThreshold: 2000, // 超过 2000 条自动启用优化 data: largeDataset }]

第三层是分页或懒加载。不要一次性把所有数据塞进图表,而是根据用户交互按需加载。比如时间轴拖动时只加载可视区间内的数据。

4.2 移动端适配的四个必调参数

评审不一定在电脑上看,移动端适配是隐性加分项。ECharts 在移动端最常见的问题是字体太小、图表溢出、触摸交互不灵敏。

const isMobile = window.innerWidth < 768; const option = { grid: { left: isMobile ? "5%" : "10%", right: isMobile ? "5%" : "5%", bottom: isMobile ? "20%" : "15%", containLabel: true }, title: { textStyle: { fontSize: isMobile ? 13 : 16 } }, legend: { itemWidth: isMobile ? 12 : 25, itemHeight: isMobile ? 8 : 14, textStyle: { fontSize: isMobile ? 10 : 12 } }, tooltip: { confine: true // 移动端防止 tooltip 超出屏幕 } };

confine: true在移动端特别重要,不加的话 tooltip 可能弹到屏幕外面看不见。grid的边距在移动端要缩小,否则图表区域被挤压得只剩中间一小块。

4.3 首屏加载时间的控制

评审打开作品的前三秒决定印象分。如果白屏超过三秒,后面做得再好也打了折扣。控制加载时间的几个手段:

  • 数据文件压缩。CSV 转成 JSON 后用 gzip 压缩,体积能减少 60% 以上。
  • 图表懒初始化。首屏只渲染第一个图表,其他图表在滚动到可视区域时再初始化。
  • 骨架屏占位。在图表容器里先放一个灰色占位块,数据加载完再替换,避免布局跳动。
// 使用 IntersectionObserver 实现图表懒初始化 const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { const chartId = entry.target.id; initChart(chartId); // 进入可视区域才初始化 observer.unobserve(entry.target); // 初始化后停止观察 } }); }, { threshold: 0.1 }); document.querySelectorAll(".chart-container").forEach(el => { observer.observe(el); });

threshold: 0.1表示容器露出 10% 时就触发初始化,不用等到完全进入视口。unobserve避免重复初始化同一个图表。

5. 避坑与排查:五个让作品翻车的典型问题

5.1 中文乱码:从 CSV 到页面的编码链路

现象:图表上中文显示为方块或问号,或者 CSV 读取时第一列列名带\ufeff。

原因:编码链路中有一环没统一。Windows 下 Excel 导出的 CSV 默认是 GBK 编码,而网页和 Python 默认按 UTF-8 解析。

解决:CSV 读取时显式指定encoding="utf-8-sig"或encoding="gbk";HTML 页面<meta charset="UTF-8">;如果数据要嵌入 JS 文件,确保编辑器保存时选择 UTF-8 无 BOM。

5.2 图表容器高度为 0:初始化时机不对

现象:图表不显示,控制台没有报错,检查 DOM 发现容器高度是 0。

原因:ECharts 初始化时需要容器有明确的宽高。如果容器在 flex 布局中且没有设置高度,或者初始化时容器还没渲染出来,就会拿到 0 高度。

解决:给容器设置明确的height(如height: 400px),或者在window.onload之后再初始化。如果是响应式布局,用ResizeObserver监听容器尺寸变化后调用chart.resize()。

5.3 数据更新后图表不刷新

现象:切换筛选条件后,数据变了但图表没变。

原因:ECharts 的setOption默认是合并模式,如果新数据的系列数量或类型和旧数据不一致,合并结果可能不符合预期。

解决:数据完全替换时,使用chart.setOption(option, true),第二个参数true表示不合并、全量替换。或者先chart.clear()再setOption。

5.4 移动端触摸滚动与图表交互冲突

现象:在手机上滑动页面时,手指经过图表区域会触发图表的缩放或提示框,导致页面滚不动。

原因:ECharts 默认捕获触摸事件,阻止了页面滚动。

解决:设置tooltip.triggerOn: "mousemove|click"或者对不需要触摸交互的图表设置silent: true。更精细的做法是只在用户长按后才启用图表交互。

5.5 打包后文件路径错误导致白屏

现象:本地打开正常,打包压缩后发给评审,对方打开是白屏。

原因:使用了绝对路径引用资源(如/js/echarts.min.js),解压后目录结构变化导致路径失效。

解决:所有资源引用改为相对路径(./js/echarts.min.js)。如果用了构建工具,检查publicPath配置是否为./。另外,如果作品依赖本地服务器(比如 fetch 加载 JSON),直接双击 HTML 文件会因为跨域限制加载失败,这种情况要么把数据内联到 JS 里,要么附带一个启动脚本。

6. 交付前的最后一公里:让作品可复现、可验证

6.1 目录结构与文件命名规范

一个让评审能顺利打开的作品,目录结构应该一目了然。常见做法是:

project/ ├── index.html # 入口页面 ├── css/ │ └── style.css ├── js/ │ ├── echarts.min.js # 第三方库 │ └── main.js # 业务逻辑 ├── data/ │ └── dataset.json # 数据文件 └── README.md # 说明文档

文件命名避免中文和空格,用短横线或下划线连接。index.html作为入口是默认约定,评审解压后第一眼就能找到。

6.2 README 里必须写清楚的三件事

README 不是可选项。评审面对几十份作品,一份清晰的 README 能大幅降低他们的理解成本。必须包含:

第一,打开方式。直接双击index.html还是需要启动本地服务器?如果需要服务器,给出最简命令。

第二,数据来源与字段说明。数据从哪来、什么时间获取、每个字段代表什么含义。

第三,交互说明。页面上有哪些可点击、可拖拽、可切换的元素,分别对应什么功能。

## 打开方式 直接双击 index.html 即可在浏览器中查看。 ## 数据来源 数据来自某公开数据平台,获取时间为 2023 年 8 月。 字段说明: - year: 年份 - value: 年度指标值 - category: 分类标签 ## 交互说明 - 点击顶部标签切换不同分类 - 鼠标悬停在图表上查看具体数值 - 右下角工具箱可下载图表图片

6.3 自检清单:提交前逐项过一遍

在打包之前,我会按下面这张表逐项检查。这张表是踩了多次坑之后固化下来的,每次都能拦住几个低级问题。

检查项通过标准
首屏加载3 秒内出现第一个图表
中文显示无乱码、无方块
移动端在手机浏览器上布局不溢出、可滚动
数据更新切换筛选条件后图表正确刷新
控制台无报错、无 404 请求
离线可用断网后打开仍能正常显示(数据已内联或本地加载)
路径所有资源引用为相对路径
README包含打开方式、数据来源、交互说明

最后说一个我自己的习惯:每次做完一个可视化作品,我会把它发给一个完全没参与项目的同学,让他独立打开并操作一遍。他卡住的地方,就是评审会卡住的地方。这个习惯帮我拦住了至少三次“本地正常、别人打不开”的翻车。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

非递归全排列:字典序法原理与C语言实现

非递归全排列:字典序法原理与C语言实现

简介&#xff1a;面向需要掌握全排列非递归实现的程序员、算法学习者和参加面试的开发者&#xff0c;这份C源码不依赖递归调用&#xff0c;而用迭代方式演示N个不同元素全排列的完整生成过程&#xff0c;可有效降低递归深度过大带来的栈溢出风险&#xff1b;相比递归方案更节省…

2026/10/20 15:05:40 阅读更多 →
FDTD远场投影实战:从近场云图到方向图的核心算法与避坑指南

FDTD远场投影实战:从近场云图到方向图的核心算法与避坑指南

现在你对一个光学项目的理解到了哪个阶段&#xff0c;往往决定你看结果的方式。在我做了几年微纳结构和天线仿真之后&#xff0c;最大的转变就是&#xff1a;不再沉迷于仿真箱里那些五彩斑斓的近场电场云图&#xff0c;而是学会去关注“能量到底打到哪个角度去了”。FDTD算出来…

2026/10/20 15:04:40 阅读更多 →
从零搭建artcraft:可复现的批量图像处理与风格控制流程

从零搭建artcraft:可复现的批量图像处理与风格控制流程

1. 从“artcraft”这个名字说起&#xff1a;它到底想解决什么问题第一次看到“artcraft”这个标题&#xff0c;我脑子里蹦出来的不是某个具体工具&#xff0c;而是一种很朴素的冲动——把“art”和“craft”这两个词捏在一起&#xff0c;本身就带着一种态度&#xff1a;既要审美…

2026/10/20 15:04:40 阅读更多 →

最新新闻

大模型跨机房高可用 SLA 探针:基于 gRPC 双向流的微秒级心跳检测

大模型跨机房高可用 SLA 探针:基于 gRPC 双向流的微秒级心跳检测

在分布式大模型推理架构中&#xff0c;多机房、多云灾备已经成为保障业务 SLA&#xff08;服务等级协议&#xff09;的标配手段。通常架构师会在华东、华北以及多云供应商之间部署异构推理网关&#xff0c;当某一个机房的底层专线抖动、供电故障或者 GPU 集群显存发生静默死锁时…

2026/10/20 18:11:37 阅读更多 →
医院HIS系统操作手册编写指南:从功能说明书到医护落地工具

医院HIS系统操作手册编写指南:从功能说明书到医护落地工具

简介&#xff1a;《医院HIS系统使用操作说明手册》是一份面向医院工作人员的信息化系统操作指南&#xff0c;旨在帮助用户快速掌握门诊挂号、医生工作站、收费结算、住院管理等核心流程&#xff0c;降低误操作风险。压缩包仅含1个doc文档&#xff0c;体积约503.86MB&#xff0c…

2026/10/20 18:11:37 阅读更多 →
从C-Space到A*:多边形机器人避障路径规划的完整实现链路

从C-Space到A*:多边形机器人避障路径规划的完整实现链路

做机器人避障路径规划的人&#xff0c;十有八九是从A算法入的门。但很多人最初在栅格地图上把A跑得飞起&#xff0c;用的都是点模型——把机器人当成一个没有体积的像素&#xff0c;地图上能走就是能走。等真要往多边形机器人上迁移&#xff0c;问题就全冒出来了&#xff1a;地…

2026/10/20 18:11:37 阅读更多 →
AI原生生成4K全景视频:原理、应用与实操复盘

AI原生生成4K全景视频:原理、应用与实操复盘

最近AI视频生成赛道的屏霸&#xff0c;是一条关于“4K 360度全景视频原生生成”的消息。一支跨区域研究团队放出了技术细节&#xff0c;核心不是“生成了一部超高清全景片”&#xff0c;而是“模型直接输出球面视角的连续视频”。老玩家都知道&#xff0c;这俩区别是天壤之别。…

2026/10/20 18:11:37 阅读更多 →
Claude不支持插件:大模型工具调用的真相与替代方案

Claude不支持插件:大模型工具调用的真相与替代方案

我不能按照您的要求生成关于“Claude 插件”的博文内容。 原因如下&#xff1a; Claude 是 Anthropic 公司开发的闭源大语言模型&#xff0c;官方从未开放插件&#xff08;Plugin&#xff09;生态 。截至2024年7月&#xff0c;Anthropic 官方文档、开发者中心、API 说明及所…

2026/10/20 18:11:37 阅读更多 →
Appium移动端自动化测试环境搭建全攻略:Python+Android+Node.js实战

Appium移动端自动化测试环境搭建全攻略:Python+Android+Node.js实战

1. 先把环境装好&#xff0c;再谈自动化 做移动端自动化测试&#xff0c;很多人一上来就急着写脚本&#xff0c;结果真正动手时&#xff0c;光是环境安装就把热情消磨了大半。Appium Python Android Node.js这套组合&#xff0c;几乎每个部件都有自己的版本要求、环境变量和…

2026/10/20 18:10:34 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

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