可视化识别结果:matplotlib绘图代码示例

可视化识别结果:matplotlib绘图代码示例

1. 引言:让图像识别结果“看得见”

在计算机视觉任务中,模型输出的Top-K类别和置信度是基础信息,但仅以文本形式展示难以直观理解识别效果。尤其在调试、演示或产品集成阶段,将识别结果与原始图像结合可视化,能显著提升可读性和用户体验。

本文基于阿里开源的「万物识别-中文-通用领域」模型,重点介绍如何使用matplotlib将图像识别结果进行图形化呈现。我们将从推理脚本出发,扩展其功能,实现带标签标注的图像显示与保存,并提供完整可运行代码,帮助开发者快速构建具备可视化能力的图像识别系统。

文章内容适用于已完成基础部署并成功运行推理.py的用户,目标是进一步提升结果表达的专业性与实用性。

2. matplotlib可视化核心逻辑设计

2.1 可视化目标定义

我们期望达成以下可视化效果:

  • 显示原始输入图像
  • 在图像上方或侧边标注Top-N识别结果(含中文标签与置信度)
  • 支持保存为高质量图片文件
  • 保持代码简洁、易于集成到现有流程

2.2 技术选型说明

工具作用
matplotlib.pyplot主要绘图引擎,支持图像显示与文字标注
PIL.Image图像加载与格式统一处理
torchvision.transforms确保图像张量与numpy数组正确转换

关键提示:matplotlib 默认不支持中文显示,需显式配置字体以避免标签乱码。

3. 完整可视化代码实现

3.1 扩展后的推理+可视化脚本

以下是整合了模型推理与结果可视化的完整Python代码,可在/root/workspace/目录下新建可视化推理.py文件使用:

# -*- coding: utf-8 -*- import torch from PIL import Image import matplotlib.pyplot as plt import matplotlib.font_manager as fm from torchvision import transforms import numpy as np import os # --- 1. 模型加载 --- print("正在加载模型...") device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = torch.hub.load('alibaba-damo-academy/vision', 'universal_image_recognition', source='github') model.to(device).eval() # --- 2. 图像路径配置 --- image_path = "/root/workspace/bailing.png" # 检查文件是否存在 if not os.path.exists(image_path): raise FileNotFoundError(f"图像未找到: {image_path}") print(f"正在处理图像: {image_path}") image = Image.open(image_path).convert("RGB") # --- 3. 图像预处理 --- preprocess = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) input_tensor = preprocess(image) input_batch = input_tensor.unsqueeze(0).to(device) # --- 4. 执行推理 --- with torch.no_grad(): output = model(input_batch) # --- 5. 后处理:获取Top-5结果 --- probabilities = torch.nn.functional.softmax(output[0], dim=0) top5_prob, top5_catid = torch.topk(probabilities, 5) # --- 6. 标签映射(实际项目应从 label_map_zh.json 加载)--- labels = [ "白领女性", "办公室工作场景", "笔记本电脑", "商务休闲装", "日光照明", "会议室", "文档工作" ] # 示例标签,需与模型输出ID对齐 # 构建结果列表 results = [] for i in range(top5_prob.size(0)): label = labels[top5_catid[i]] confidence = top5_prob[i].item() * 100 results.append(f"{i+1}. {label} ({confidence:.1f}%)") # --- 7. Matplotlib 可视化设置 --- # 设置中文字体(防止乱码) plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans'] # 常见中文字体 plt.rcParams['axes.unicode_minus'] = False # 正常显示负号 # 创建子图布局:1行2列,左侧原图,右侧文字 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6)) # --- 8. 左侧:显示原始图像 --- ax1.imshow(image) ax1.set_title("输入图像", fontsize=16, fontweight='bold') ax1.axis("off") # 隐藏坐标轴 # --- 9. 右侧:显示识别结果 --- ax2.axis("off") # 隐藏坐标轴 text_str = "\n".join(results) ax2.text(0.1, 0.9, "Top-5 识别结果:", fontsize=18, fontweight='bold', transform=ax2.transAxes) ax2.text(0.1, 0.7, text_str, fontsize=14, verticalalignment='top', transform=ax2.transAxes, bbox=dict(boxstyle="round,pad=0.5", facecolor="lightblue", alpha=0.3)) # --- 10. 调整布局并显示 --- plt.tight_layout() plt.savefig("/root/workspace/识别结果_可视化.png", dpi=150, bbox_inches='tight') plt.show() print("可视化完成!结果已保存至 /root/workspace/识别结果_可视化.png")

3.2 关键代码解析

代码段功能说明
plt.rcParams['font.sans-serif'] = ['SimHei']强制启用黑体等常见中文字体,解决中文乱码问题
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))创建双面板布局,兼顾图像与文本展示
ax1.imshow(image)在左侧面板绘制原始图像
ax2.text(...)在右侧面板逐行打印Top-5结果,使用\n换行
bbox=dict(...)为文本添加背景框,增强可读性
plt.savefig(..., dpi=150, bbox_inches='tight')高质量保存图像,去除多余空白边缘

3.3 运行方式

确保已激活环境后执行:

cd /root/workspace python 可视化推理.py

预期输出:

  • 弹出一个包含两栏的图形窗口
  • 左侧显示原图
  • 右侧列出Top-5识别结果
  • 同时生成识别结果_可视化.png文件用于后续分享或报告

4. 可视化样式优化建议

4.1 单图叠加标签模式(紧凑型)

若希望直接在图像上方叠加识别结果,可采用如下布局:

# 替换原双面板代码为单图模式 fig, ax = plt.subplots(1, 1, figsize=(10, 8)) ax.imshow(image) ax.set_title("图像识别结果", fontsize=16, fontweight='bold') # 在图像顶部添加半透明背景文本框 result_text = "\n".join([f"{r}" for r in results]) props = dict(boxstyle="round,pad=0.5", facecolor="black", alpha=0.7, edgecolor="white") ax.text(0.02, 0.98, result_text, transform=ax.transAxes, fontsize=12, verticalalignment='top', bbox=props, color="white") ax.axis("off") plt.tight_layout() plt.savefig("/root/workspace/识别结果_紧凑版.png", dpi=150, bbox_inches='tight') plt.show()

此风格更适合嵌入移动端预览或轻量级界面。

4.2 多图批量可视化(进阶用法)

对于测试集评估场景,可遍历目录中的多张图片并生成拼接图:

import glob image_paths = glob.glob("/root/workspace/test_images/*.png")[:4] # 最多取4张 fig, axes = plt.subplots(2, 2, figsize=(12, 12)) axes = axes.flatten() for idx, path in enumerate(image_paths): img = Image.open(path).convert("RGB") input_tensor = preprocess(img).unsqueeze(0).to(device) with torch.no_grad(): output = model(input_tensor) prob = torch.nn.functional.softmax(output[0], dim=0) _, catid = torch.topk(prob, 1) label = labels[catid[0]] axes[idx].imshow(img) axes[idx].set_title(f"预测: {label}", fontsize=12, color="red") axes[idx].axis("off") # 隐藏空余子图 for j in range(len(image_paths), 4): axes[j].axis("off") plt.suptitle("批量图像识别结果", fontsize=16) plt.tight_layout() plt.savefig("/root/workspace/批量识别结果.png", dpi=120) plt.show()

5. 常见问题与解决方案

5.1 中文乱码问题

现象:标签显示为方框或问号
原因:matplotlib 缺少可用中文字体
解决方案

  1. 查看当前可用字体:

    import matplotlib print([f.name for f in matplotlib.font_manager.fontManager.ttflist if 'Sim' in f.name])
  2. 若无合适字体,安装思源黑体:

    wget https://github.com/adobe-fonts/source-han-sans/raw/release/OTF/SimplifiedChinese/SourceHanSansSC-Regular.otf mv SourceHanSansSC-Regular.otf /usr/local/lib/python*/site-packages/matplotlib/mpl-data/fonts/ttf/
  3. 清除缓存并重新加载:

    import matplotlib.font_manager as fm fm._rebuild()

5.2 图像尺寸过大导致显示异常

建议处理方式

  • 使用transforms.Resize(480)控制最大边长
  • 或在plt.figure(figsize=...)中动态调整画布大小

5.3 保存图像模糊

解决方法

  • 提高dpi参数(如设为dpi=200
  • 使用矢量格式保存(推荐用于论文或PPT):
    plt.savefig("result.pdf", format='pdf', bbox_inches='tight')

6. 总结

本文围绕「万物识别-中文-通用领域」模型的实际应用需求,详细介绍了如何利用matplotlib实现图像识别结果的可视化展示。通过完整的代码示例,我们实现了:

  • 原始图像与识别结果的并排展示
  • 支持中文标签的清晰渲染
  • 高质量图像导出功能
  • 多种布局风格适配不同使用场景

这些可视化能力不仅有助于模型调试与效果验证,也为后续集成至Web服务、移动App或数据分析平台提供了坚实基础。


获取更多AI镜像

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1180365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MiDaS模型监控技巧:云端GPU资源利用率优化指南

MiDaS模型监控技巧:云端GPU资源利用率优化指南 你是不是也遇到过这样的情况:在云上部署了多个MiDaS深度估计模型实例,刚开始运行还挺流畅,但随着请求量增加,GPU使用率忽高忽低,有时候飙到95%以上导致服务卡…

opencode服务器模式部署:移动端驱动本地Agent实战

opencode服务器模式部署:移动端驱动本地Agent实战 1. 引言 随着AI编程助手在开发者群体中的普及,对隐私安全、模型灵活性和终端集成能力的要求日益提升。OpenCode作为2024年开源的AI编程框架,凭借其“终端优先、多模型支持、零代码存储”的…

精确制导——运用系统思维定义问题的真正边界

引言:为你的导弹装上制导系统 在解决任何复杂问题之前,我们都如同站在发射井前,手握着一枚威力巨大但没有目标的导弹。这枚导弹,就是我们有限的资源——我们的时间、金钱、团队的精力与才华。如果我们对目标一无所知,或…

Qwen3-Reranker-4B企业级应用:客户支持系统优化

Qwen3-Reranker-4B企业级应用:客户支持系统优化 1. 引言 在现代企业级客户支持系统中,信息检索的准确性和响应效率直接影响用户体验与服务成本。传统的关键词匹配或基础语义模型往往难以应对复杂查询、多语言场景以及长上下文理解等挑战。随着大模型技…

TurboDiffusion问题排查:日志查看与错误定位详细步骤

TurboDiffusion问题排查:日志查看与错误定位详细步骤 1. 引言 1.1 业务场景描述 TurboDiffusion是由清华大学、生数科技和加州大学伯克利分校联合推出的视频生成加速框架,基于Wan2.1/Wan2.2模型进行二次WebUI开发。该框架通过SageAttention、SLA&…

GPT-OSS-20B多语言支持:国际化部署配置详解

GPT-OSS-20B多语言支持:国际化部署配置详解 随着大模型在国际业务场景中的广泛应用,多语言支持能力成为衡量模型实用性的关键指标。GPT-OSS-20B作为OpenAI最新开源的大型语言模型之一,凭借其强大的语义理解与生成能力,在多语言任…

企业级编程训练系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价。我就是个在校研究生,兼职赚点饭钱贴补生活费&…

YOLOv8模型对比:v8n/v8s/v8m性能差异分析

YOLOv8模型对比:v8n/v8s/v8m性能差异分析 1. 引言:工业级目标检测的选型挑战 在当前智能视觉应用快速落地的背景下,实时目标检测已成为安防监控、智能制造、零售分析等场景的核心能力。Ultralytics推出的YOLOv8系列模型凭借其卓越的速度-精…

破局重构——以第一性原理穿透问题的复杂性迷雾

引言:从诊断到颠覆性治疗 在扮演“诊断医师”的角色中,我们从混乱的症状中,通过严谨的逻辑与工具,得到了一个清晰、可量化、且瓶颈明确的“诊断报告”。然而,一份精准的诊断报告本身并不能治愈疾病。传统的治疗方案&a…

Qwen3-1.7B实战教程:结合向量数据库实现语义搜索增强

Qwen3-1.7B实战教程:结合向量数据库实现语义搜索增强 1. 引言 1.1 学习目标 本文旨在通过一个完整的实践案例,帮助开发者掌握如何将轻量级大语言模型 Qwen3-1.7B 与向量数据库相结合,构建具备语义理解能力的智能搜索系统。学习完成后&…

AutoGen Studio快速上手:Qwen3-4B-Instruct模型测试与验证步骤

AutoGen Studio快速上手:Qwen3-4B-Instruct模型测试与验证步骤 AutoGen Studio 是一个低代码开发平台,专为构建基于大语言模型(LLM)的智能代理(Agent)应用而设计。它依托于 AutoGen AgentChat 框架&#x…

YOLO-v8.3技术指南:如何用model.info()查看网络结构?

YOLO-v8.3技术指南:如何用model.info()查看网络结构? YOLO-v8.3 是 Ultralytics 公司在 YOLO 系列持续迭代中推出的优化版本,继承了 YOLOv8 高效、轻量、易部署的核心优势。该版本在模型结构、训练策略和推理性能方面进行了多项微调&#xf…

轻量TTS模型选型:CosyVoice-300M Lite部署优势全面解析

轻量TTS模型选型:CosyVoice-300M Lite部署优势全面解析 1. 引言:轻量级语音合成的现实需求 随着智能硬件、边缘计算和云原生架构的普及,语音合成(Text-to-Speech, TTS)技术正从高性能服务器向资源受限环境延伸。传统…

告别模糊照片!用GPEN镜像快速实现人脸超分增强

告别模糊照片!用GPEN镜像快速实现人脸超分增强 在图像处理和数字内容创作领域,低分辨率、模糊或退化的人脸照片一直是影响视觉质量的关键问题。尤其是在老照片修复、安防监控、社交媒体图像优化等场景中,如何从一张模糊的人像中恢复出清晰、…

Java Web 网上商城系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

💡实话实说:CSDN上做毕设辅导的都是专业技术服务,大家都要生活,这个很正常。我和其他人不同的是,我有自己的项目库存,不需要找别人拿货再加价。我就是个在校研究生,兼职赚点饭钱贴补生活费&…

DeepSeek-R1-Distill-Qwen-1.5B优化技巧:6GB显存跑满速配置

DeepSeek-R1-Distill-Qwen-1.5B优化技巧:6GB显存跑满速配置 1. 技术背景与选型价值 在边缘计算和本地化部署日益普及的今天,如何在有限硬件资源下运行高性能语言模型成为开发者关注的核心问题。DeepSeek-R1-Distill-Qwen-1.5B 正是在这一背景下诞生的“…

Qwen小模型适合哪些场景?极速对话部署实战告诉你答案

Qwen小模型适合哪些场景?极速对话部署实战告诉你答案 1. 引言:轻量级大模型的现实需求 随着人工智能技术的普及,越来越多的应用场景开始向边缘设备迁移。在实际落地过程中,企业与开发者面临一个核心矛盾:强大的大模型…

利用es连接工具实现日志的准实时同步方案

构建高效日志链路:用 Filebeat Logstash 实现 Elasticsearch 的准实时同步在今天这个微服务横行、系统复杂度飙升的时代,运维早已不再是“看日志 tail -f”就能搞定的事。一个请求可能穿过十几个服务,每台机器都在写自己的日志文件——问题来…

亲测IndexTTS-2-LLM:智能语音合成真实体验分享

亲测IndexTTS-2-LLM:智能语音合成真实体验分享 在AI语音技术快速演进的今天,文本转语音(TTS)已不再局限于“能听清”这一基础要求,用户对自然度、情感表达和部署灵活性提出了更高标准。近期,我基于 kusuru…

通义千问2.5中文纠错实战:5分钟部署,比Grammarly更懂中文

通义千问2.5中文纠错实战:5分钟部署,比Grammarly更懂中文 你是不是也遇到过这样的问题?作为出版社编辑,每天要处理几十万字的书稿,光靠人工校对不仅效率低,还容易漏掉错别字、语法错误甚至逻辑不通的地方。…