news 2026/3/10 16:35:47

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
可视化识别结果: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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/10 12:26:41

Qwen3-Reranker-0.6B入门必看:Gradio WebUI调用详解

Qwen3-Reranker-0.6B入门必看:Gradio WebUI调用详解 1. 引言 随着信息检索和自然语言处理技术的不断发展,文本重排序(Re-ranking)在搜索、推荐系统和问答系统中扮演着越来越关键的角色。Qwen3-Reranker-0.6B 是通义千问&#xf…

作者头像 李华
网站建设 2026/3/9 5:34:37

内存溢出怎么办?低配设备运行优化建议

内存溢出怎么办?低配设备运行优化建议 1. 引言:低配环境下的推理挑战与应对策略 在实际部署深度学习模型时,尤其是像「万物识别-中文-通用领域」这类基于大规模预训练的视觉模型,开发者常常面临一个现实问题:硬件资源…

作者头像 李华
网站建设 2026/3/10 6:56:52

PaddleOCR-VL-WEB性能测试:不同硬件平台对比分析

PaddleOCR-VL-WEB性能测试:不同硬件平台对比分析 1. 简介 PaddleOCR-VL 是百度开源的一款面向文档解析任务的视觉-语言大模型(Vision-Language Model, VLM),专为高精度、低资源消耗的OCR识别场景设计。其核心模型 PaddleOCR-VL-…

作者头像 李华
网站建设 2026/3/9 13:15:41

PyTorch-2.x-Universal-Dev-v1.0详细步骤:混淆矩阵绘制分类效果评估

PyTorch-2.x-Universal-Dev-v1.0详细步骤:混淆矩阵绘制分类效果评估 1. 引言 1.1 场景描述 在深度学习模型开发过程中,分类任务的性能评估是关键环节。准确率虽常用,但难以反映类别不平衡或误分类分布等细节问题。混淆矩阵(Con…

作者头像 李华
网站建设 2026/3/6 4:27:47

IndexTTS2实操教程:导出ONNX模型用于边缘设备部署

IndexTTS2实操教程:导出ONNX模型用于边缘设备部署 1. 引言 1.1 技术背景与应用场景 随着语音合成技术在智能硬件、车载系统、IoT设备等边缘场景中的广泛应用,对模型轻量化和高效推理的需求日益增长。IndexTTS2作为一款支持高质量文本转语音&#xff0…

作者头像 李华
网站建设 2026/3/10 11:42:12

ComfyUI历史重现:古代人物与场景复原生成

ComfyUI历史重现:古代人物与场景复原生成 1. 引言:数字时代的文化复原新路径 随着人工智能技术在图像生成领域的持续突破,历史文化的数字化复原正迎来前所未有的可能性。传统上依赖考古资料、文献记载和艺术想象的历史场景重建,…

作者头像 李华