YOLO26前端展示:HTML+JS实现检测结果可视化

YOLO26前端展示:HTML+JS实现检测结果可视化

最新 YOLO26 官方版训练与推理镜像
本镜像基于 YOLO26 官方代码库 构建,预装了完整的深度学习开发环境,集成了训练、推理及评估所需的所有依赖,开箱即用。

在完成模型推理后,如何将检测结果以更直观、可交互的方式呈现给用户?本文将带你使用纯 HTML + JavaScript 实现一个轻量级的前端页面,用于可视化 YOLO26 的目标检测结果。无需后端框架,不依赖复杂构建工具,只需几行代码即可部署查看。

1. 前端可视化需求分析

1.1 为什么需要前端展示?

虽然 YOLO26 的 detect.py 能自动生成带框的图片并保存到 runs/detect 目录下,但这些静态图像不利于:

  • 多图批量浏览
  • 检测信息(类别、置信度)的结构化展示
  • 与用户的交互操作(如缩放、点击查看细节)
  • 快速分享或嵌入网页应用

通过一个简单的 HTML 页面,我们可以把推理结果组织成“图像 + 标注数据”的形式,提升可读性和实用性。

1.2 技术选型:为何选择原生 HTML+JS?

  • 零依赖:不需要 Node.js、Vue、React 等复杂生态
  • 易部署:和 runs/detect 文件夹放在一起就能直接打开
  • 跨平台兼容:任何浏览器均可运行
  • 快速调试:修改 JS 即可见效,适合实验性项目

我们只需要:

  • 一张原始图
  • 一个 JSON 文件记录检测框和标签
  • 一段 JS 解析并绘制标注

2. 准备检测结果数据

2.1 修改 detect.py 输出结构化数据

为了让前端能读取检测信息,我们需要让 detect.py 同时输出 JSON 格式的标注文件。

修改后的 detect.py 如下:

# -*- coding: utf-8 -*- """ @Auth :落花不写码 @File :detect.py @IDE :PyCharm @Motto :学习新思想,争做新青年 """ from ultralytics import YOLO import cv2 import json import os if __name__ == '__main__': # 加载模型 model = YOLO(model=r'yolo26n.pt') # 推理 results = model.predict( source=r'./ultralytics/assets', save=True, show=False, conf=0.25 ) # 存储所有结果 output_data = [] for r in results: img_path = r.path img_name = os.path.basename(img_path) # 读取图像尺寸 h, w = r.orig_shape detections = [] for box in r.boxes: cls_id = int(box.cls[0]) label = model.names[cls_id] conf = float(box.conf[0]) xyxy = box.xyxy[0].tolist() # [x1, y1, x2, y2] detections.append({ "class": label, "confidence": round(conf, 3), "bbox": [round(x, 1) for x in xyxy] }) output_data.append({ "image": img_name, "width": w, "height": h, "detections": detections }) # 保存为 JSON 文件 with open("runs/detect/predictions.json", "w", encoding="utf-8") as f: json.dump(output_data, f, indent=2, ensure_ascii=False) print(" 检测结果已保存为 runs/detect/predictions.json") 
运行此脚本后,除了生成带框图像外,还会在 runs/detect/ 下创建 predictions.json,包含每张图的完整检测信息。

2.2 JSON 数据结构示例

[ { "image": "zidane.jpg", "width": 720, "height": 480, "detections": [ { "class": "person", "confidence": 0.998, "bbox": [156.2, 178.3, 308.1, 402.5] } ] } ] 

这个结构清晰明了,前端可以直接解析使用。

3. 构建前端展示页面

3.1 创建 index.html

runs/detect/ 目录下新建 index.html,内容如下:

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <title>YOLO26 检测结果可视化</title> <style> body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 0; padding: 20px; background: #f5f5f5; } .container { max-width: 1200px; margin: 0 auto; } h1 { text-align: center; color: #333; } .gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 20px; margin-top: 20px; } .item { border: 1px solid #ddd; border-radius: 8px; overflow: hidden; background: white; box-shadow: 0 2px 8px rgba(0,0,0,0.1); } .item img { width: 100%; height: 200px; object-fit: cover; cursor: pointer; } .info { padding: 12px; } .info h3 { margin: 0 0 8px 0; font-size: 16px; } .labels { font-size: 14px; color: #555; line-height: 1.5; } .label-item { display: inline-block; background: #e1f5fe; color: #01579b; padding: 2px 6px; border-radius: 4px; margin-right: 4px; margin-bottom: 4px; font-weight: 500; } .modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.9); z-index: 100; justify-content: center; align-items: center; } .modal-content { position: relative; max-width: 90vw; max-height: 90vh; } .modal img { max-width: 100%; max-height: 80vh; border: 2px solid white; } .close { position: absolute; top: 10px; right: 20px; color: white; font-size: 30px; font-weight: bold; cursor: pointer; } </style> </head> <body> <div> <h1>📷 YOLO26 检测结果可视化</h1> <div></div> </div> <!-- 图片放大模态框 --> <div> <div> <span onclick="document.getElementById('modal').style.display='none'">&times;</span> <img alt="放大图" /> </div> </div> <script> // 加载 JSON 数据 fetch('predictions.json') .then(res => res.json()) .then(data => { const gallery = document.getElementById('gallery'); data.forEach(item => { // 创建缩略图项 const div = document.createElement('div'); div.className = 'item'; const img = document.createElement('img'); img.src = item.image; img.alt = item.image; img.onclick = () => { document.getElementById('modal-img').src = item.image; document.getElementById('modal').style.display = 'flex'; }; const info = document.createElement('div'); info.className = 'info'; const title = document.createElement('h3'); title.textContent = item.image; const labels = document.createElement('div'); labels.className = 'labels'; if (item.detections.length === 0) { const span = document.createElement('span'); span.textContent = '未检测到目标'; span.style.color = '#999'; labels.appendChild(span); } else { item.detections.forEach(det => { const tag = document.createElement('span'); tag.className = 'label-item'; tag.textContent = `${det.class} (${det.confidence})`; labels.appendChild(tag); }); } info.appendChild(title); info.appendChild(labels); div.appendChild(img); div.appendChild(info); gallery.appendChild(div); }); }) .catch(err => { console.error("加载 predictions.json 失败:", err); alert("无法加载检测结果,请检查 predictions.json 是否存在"); }); </script> </body> </html> 

3.2 功能说明

功能描述
缩略图网格自动加载所有检测图片,按网格排列
类别标签展示显示每个图像中检测出的对象及其置信度
点击放大点击图片可在模态框中查看高清大图
响应式布局支持手机、平板、桌面多端查看
错误提示若 JSON 加载失败会弹窗提醒

4. 使用方法与效果演示

4.1 部署步骤

  1. 运行修改后的 detect.py,确保生成了 predictions.json
  2. 将上面的 index.html 文件复制到 runs/detect/ 目录下
  3. 双击 index.html 在浏览器中打开(或通过 HTTP 服务访问)
注意:如果双击打不开,可能是浏览器安全策略限制。建议使用 Python 快速启动本地服务器:

然后访问 http://localhost:8000

4.2 实际效果预览

假设你有以下几张测试图:

  • zidane.jpg → 检测到 2 个 person
  • bus.jpg → 检测到 bus, person, tie 等多个对象

前端页面将显示:

  • 每张图的缩略图卡片
  • 下方列出所有检测类别和置信度,例如:person (0.998)tie (0.876)
  • 点击可查看原图
效果预览
🖼 页面简洁美观,适合汇报、演示、内部评审等场景。

5. 扩展功能建议

5.1 添加边界框高亮显示(进阶)

可以在点击图片时,在大图上叠加绘制 bounding box,增强可视化效果。

只需在模态框中加入 <canvas> 层,并根据 bbox 坐标画矩形和文字。

5.2 支持视频帧序列展示

如果你对视频做了逐帧检测,可以把帧命名成 frame_0001.jpg, frame_0002.jpg 并按顺序展示,模拟播放效果。

5.3 增加筛选功能

添加搜索框,支持按类别过滤图片:

<input type="text" placeholder="搜索类别..." oninput="filterImages(this.value)"> 

配合 JS 实现动态隐藏/显示。

5.4 导出报告功能

增加按钮,一键导出当前所有检测结果为 PDF 或 Markdown 表格,便于归档。

6. 总结

6. 总结

本文介绍了一种极简高效的 YOLO26 检测结果前端可视化方案:

  • 无需后端:仅用 HTML + JS 实现完整功能
  • 自动集成:通过修改 detect.py 自动生成 JSON 数据
  • 开箱即用:复制文件即可部署,适合本地调试和成果展示
  • 易于扩展:支持添加标注高亮、筛选、导出等功能

这套方案特别适用于:

  • 学术研究中的结果展示
  • 项目中期/终期汇报
  • 内部测试反馈收集
  • 快速验证模型表现

比起手动截图贴 PPT,这种方式更加系统化、自动化,也更具专业感。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 ZEEKLOG星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Read more

【AI】高效交互的艺术:AI提示工程与大模型对话指南

【AI】高效交互的艺术:AI提示工程与大模型对话指南

🔥小龙报:个人主页 🎬作者简介:C++研发,嵌入式,机器人等方向学习者 ❄️个人专栏:《AI》 ✨ 永远相信美好的事情即将发生 文章目录 * 前言 * 一、ChatatGPT介绍 * 二、什么是提示工程? * 三、大语言模型的底层原理 * 四、AI的相关术语 * 五、如何与AI(以ChatatGPT为例)更好交流 * 5.1 使用AI的核心 * 5.2 提示组成结构 * 5.3 创建好的提示的策略 * 5.4 提示的类别 * 5.5 创建在和AI提示的进阶框架 * 5.6如何减少AI回答的空洞无味感 * 5.7 如何提高AI回答的可读性 * 六、使用AI的更多技巧 * 6.1 高效提示的原则 * 6.

人工智能大模型应用开发:从微调适配到场景落地

人工智能大模型应用开发:从微调适配到场景落地

一、人工智能大模型应用开发:从微调适配到场景落地 1.1 本章学习目标与重点 💡 掌握大模型应用开发的核心流程,包括模型选型、微调适配、功能封装、部署上线等关键环节; 💡 熟练运用主流大模型框架(Hugging Face Transformers、LangChain、LlamaIndex 等),实现文本生成、问答系统、智能助手等常见应用; 💡 理解大模型微调的核心技术(全参数微调、LoRA、QLoRA 等),能够根据数据规模和硬件资源选择合适的适配方案; 💡 通过真实场景案例(企业知识库问答、智能客服、代码生成助手),掌握大模型从技术适配到业务落地的端到端开发能力。 ⚠️ 重点关注:大模型的上下文窗口限制、生成内容的准确性与安全性、微调过程中的显存优化、以及生产环境下的性能与稳定性平衡。 1.2 大模型应用开发基础:选型与环境搭建 大模型应用开发的第一步是明确业务需求,选择合适的模型并搭建稳定的开发环境。本节将从模型选型原则、主流开发框架介绍、环境搭建实操三个维度,为后续开发奠定基础。 1.2.1

字节多Agent架构Aime—— 让多个 AI 像 “灵活团队” 一样干活的新系统

字节多Agent架构Aime—— 让多个 AI 像 “灵活团队” 一样干活的新系统

咱们先从 “你能懂的场景” 切入,再慢慢聊这个系统到底是啥、能解决啥问题。看完你就知道,这东西其实就是给 AI 们搭了个 “聪明的协作平台”,让它们不再像 “死板的机器人”,而是像 “会变通的小团队”。 一、先搞懂:为啥需要 “多个 AI 一起干活”? 你肯定用过 AI 工具吧?比如让 GPT 写文案、让 AI 查天气。但如果要干复杂的事,单个 AI 就不够用了 ——比如你想 “帮我做一份‘北京 3 日亲子游’计划”,这事需要干好几步: 1. 查北京适合小孩的景点(比如动物园、科技馆),还得确认开放时间、门票价格; 2. 查你所在城市到北京的高铁 / 机票,要选

OpenClaw:让AI直接操控你的电脑

有安全风险;可接入本地大模型 1. OpenClaw 到底是什么? 你可以把它理解成:一个能直接控制你电脑的 AI 助手。 普通 AI(ChatGPT、豆包、文心一言): * 只能跟你聊天 * 只能告诉你怎么做 * 不能碰你电脑里的任何东西 OpenClaw: * 是能动手操作你电脑的 AI * 能自己点开文件、写代码、运行程序、点鼠标、改设置 * 就像雇了一个会用电脑的人,坐在你电脑前帮你干活 一句话:普通 AI 是 “嘴强王者”,OpenClaw 是 “真能干活”。 2. 它能帮你做什么?(超直白举例) 你直接用自然说话,它就能自己干: ✅ 写代码 / 改项目 * 你说:“帮我写一个登录页面” * 它自己新建文件、写代码、保存、运行 * 你不用动手敲一行 ✅ 操作电脑文件