欢迎光临
我们一直在努力

Python 项目应用:Python AI 图像识别工具从入门到实战应用指南

图像识别是人工智能领域应用最广泛的技术之一,从手机相册的智能分类到工业质检的缺陷检测,它正在深刻改变我们的生产方式。然而,对于零基础的开发者而言,从环境搭建到模型选型,再到最终的工程落地,每一步都可能遇到意想不到的障碍。本文将以 PyTorch 为核心,手把手带你走完图像识别项目的完整流程,涵盖环境配置、模型选型、单图测试、批量处理、结果可视化、精度优化以及性能加速等关键环节。阅读本文前,你只需具备基础的 Python 语法知识即可,无需任何深度学习背景。

摘要:本文是一篇面向零基础开发者的 PyTorch 图像识别实战教程,从环境搭建、模型选型到单图测试、批量处理、结果可视化、精度优化与性能加速,手把手带你走通图像识别项目的完整落地流程。适合具备基础 Python 语法、希望快速上手计算机视觉的读者。学完本文,你将能独立搭建一套可运行的图像识别系统,并掌握将其扩展为生产级应用的核心思路。

关键词:PyTorch;图像识别;模型选型;批量推理;性能优化

本文你将学到什么

读完本文,你将掌握以下核心能力:

  • 搭建一套可运行的 PyTorch 图像识别环境:从创建虚拟环境、安装依赖到环境验证,一步到位,告别「装了半天跑不起来」的困境。
  • 看懂并选对模型:理解推理、预处理、后处理等核心概念,能根据任务类型(分类 / 检测)和硬件条件,在 ResNet、MobileNet、YOLO 之间做出合理选型。
  • 跑通单图识别与批量处理:从第一张图片的识别测试,到借助 Dataset 与 DataLoader 实现批量推理,掌握工程落地的关键一步。
  • 可视化结果并导出数据:在原图上绘制预测标签、生成类别分布图,并把结果导出为结构化 CSV 文件,形成「识别 → 可视化 → 导出」的完整闭环。
  • 优化精度与性能:通过置信度阈值过滤低质量结果,并利用 GPU 加速、模型量化、ONNX 推理引擎等手段提升推理速度与吞吐量。
  • 规避常见坑点:掌握高频报错的排查思路,并了解安全合规的使用规范,让技术落地更稳妥。

学完本文,你将能独立搭建一套可运行的图像识别系统,并具备将其扩展为生产级应用的核心思路。

主流图像识别模型横向对比

在正式进入环境搭建之前,先花两分钟了解当前最主流的三个开源模型,能帮你少走很多弯路。下面这张表从参数量、推理速度、适用场景、硬件要求、开源生态五个维度,对 ResNet50、MobileNetV2、YOLOv8 做了横向对比:

模型
参数量
推理速度
适用场景
硬件要求
开源生态
ResNet50 约 25.6M 中等 通用图像分类,对精度要求较高的场景 建议 GPU,CPU 可运行但较慢 极成熟,PyTorch/TF 官方预训练权重,社区资料丰富
MobileNetV2 约 3.4M 移动端 / 嵌入式实时分类 CPU 即可流畅运行 成熟,轻量部署方案多,适合边缘设备
YOLOv8 约 3.2M ~ 68M(按版本) 目标检测(需框出物体位置) 小版本可跑 CPU,大版本建议 GPU 活跃,Ultralytics 持续维护,文档与示例齐全

选型决策建议:如果你的任务是「判断图片里是什么」这类通用分类,且对精度要求高、硬件条件允许,选 ResNet50;如果部署在手机、树莓派等资源受限设备上,追求实时响应,选 MobileNetV2;如果任务需要「框出物体位置」做目标检测(如质检定位缺陷、人流统计),则直接选 YOLOv8。对于零基础新手,建议先从 MobileNetV2 或 ResNet18 这类轻量模型入手,先跑通完整流程,再根据业务需求逐步升级。

在开始之前,先用 5 个要点快速预览全文的核心内容,方便你按需跳读:

  • 零基础搭建 PyTorch 图像识别环境:从创建虚拟环境到安装 OpenCV、PyTorch 等核心依赖,一步到位跑通环境验证(见 ①)。
  • 如何选择适合业务场景的模型:对比 ResNet50、MobileNetV2、YOLOv8 的差异,按任务类型与硬件约束做出合理选型(见 ②)。
  • 从单图测试到批量处理的完整流程:先跑通第一张图片的识别,再借助 Dataset 与 DataLoader 实现批量推理(见 ③④)。
  • 结果可视化与 CSV 导出方法:在原图上绘制标签、生成类别分布图,并把结果导出为结构化 CSV 文件(见 ⑤)。
  • 阈值调优与 GPU 加速技巧:通过置信度阈值过滤低质量结果,并利用 GPU、量化与推理引擎提升性能(见 ⑥⑧)。
  • 刚开始接触图像识别时,最让人头疼的往往不是算法本身有多深奥,而是环境配置这一步就卡住了很多人。很多开发者在本地电脑上折腾了半天,装了一堆依赖库,结果因为版本冲突或者路径问题,程序根本跑不起来。其实,对于零基础的新手来说,完全不需要一开始就追求完美的本地开发环境。我们可以利用云端 Notebook 或者轻量级的 Docker 容器,快速搭建一个干净、隔离的运行空间。这样不仅避免了污染本机系统,还能确保所有依赖包版本一致,复现性极高。当你把环境理顺之后,会发现后续的学习过程顺畅太多,不再把时间浪费在解决“找不到模块”这种低级错误上。

    除了环境,另一个常见的误区是盲目选择模型。市面上开源的模型成千上万,从经典的 ResNet 到最新的 Vision Transformer,参数量和精度各不相同。对于初学者而言,直接上手超大模型不仅推理速度慢,对硬件要求也高,很容易打击自信心。合理的策略是先明确自己的业务场景:是需要识别具体的物体类别,还是检测物体的位置,亦或是进行简单的图像分类?不同的任务对应着不同的模型架构。选型时不要只看论文里的准确率数字,更要考虑推理延迟、模型体积以及是否容易部署。很多时候,一个经过适当剪枝的轻量级模型,在实际应用中反而比庞大的巨型模型表现更好,因为它能在普通显卡甚至 CPU 上流畅运行。

    当你真正跑通第一张图像的识别测试,看到程序准确输出标签的那一刻,那种成就感是无可替代的。但这只是开始,实际工作中我们面对的不是单张图片,而是成千上万的数据流。如何将单点测试转化为批量处理流程?如何把枯燥的数字结果变成直观的可视化图表?又如何根据实际反馈调整阈值以提升精度?这些问题才是工程落地的关键。本文将沿着从零搭建环境到最终实战应用的完整路径,一步步拆解图像识别项目的核心环节。无论你是想快速验证一个想法,还是准备构建一个生产级的识别服务,这里的经验和代码示例都能帮你避开坑洼,高效达成目标。

    ① 零基础环境搭建与依赖安装

    对于刚入门的开发者,推荐使用 Python 作为主要开发语言,因为它拥有最丰富的计算机视觉生态。在开始之前,我们需要创建一个独立的虚拟环境,这是保证项目稳定性的第一步。可以使用 venv 或 conda 来管理环境,避免不同项目之间的依赖冲突。如果你还没有安装 Anaconda 或 Miniconda,建议先到官网下载对应系统的安装包,一路默认安装即可,安装完成后在终端输入 conda –version 验证是否成功。

    假设你选择了 conda,可以先创建一个名为 cv_project 的环境,并指定 Python 版本为 3.9(目前兼容性较好的版本)。创建完成后,记得激活环境,后续所有依赖都安装在这个环境里,互不干扰:

    conda create -n cv_project python=3.9
    conda activate cv_project

    环境激活后,接下来安装核心依赖库。图像识别离不开 OpenCV 用于图像预处理,PyTorch 或 TensorFlow 用于模型加载与推理,以及 Pillow 用于基本的图像操作。为了减少下载等待时间,建议配置国内镜像源,例如使用清华源或阿里源,可以显著提升 pip 的下载速度。以下是一个典型的安装命令组合:

    # 先配置清华镜像源(可选,能大幅提升下载速度)
    pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

    # 安装核心依赖(CPU 版本)
    pip install opencv-python-headless torch torchvision torchaudio
    pip install pillow matplotlib pandas

    # 如果你有 NVIDIA 显卡,可安装 CUDA 版本以启用 GPU 加速
    # pip install torch torchvision torchaudio –index-url https://download.pytorch.org/whl/cu118

    这里特意安装了 opencv-python-headless 版本,因为它不包含 GUI 功能,更适合在服务器或无显示界面的环境中运行,能有效减少不必要的依赖负担。如果你需要在本地弹窗显示图像,则可以选择标准的 opencv-python。安装完成后,务必运行一个简单的导入测试,确保所有库都能正常加载且没有版本冲突报错。建议把下面这段验证代码保存为 check_env.py,每次换新环境时跑一遍,能快速定位问题:

    import torch
    import cv2
    import PIL
    import matplotlib
    import pandas as pd

    print(\”PyTorch 版本:\”, torch.__version__)
    print(\”CUDA 是否可用:\”, torch.cuda.is_available())
    print(\”OpenCV 版本:\”, cv2.__version__)
    print(\”Pillow 版本:\”, PIL.__version__)

    如果所有版本号都能正常打印,说明环境搭建成功,可以放心进入下一步。若某个库导入报错,多半是版本冲突或未安装成功,回到上一步重新安装即可。这能为后续工作打下坚实基础。

    ② 核心概念解析与模型选型策略

    在动手写代码前,理解几个核心概念至关重要。首先是“推理”(Inference),它指的是将训练好的模型应用于新数据以得到预测结果的过程,与我们常说的“训练”相对。训练阶段模型通过大量标注数据学习特征,而推理阶段则直接使用这些学到的知识对新输入做出判断,因此推理对速度和资源的要求往往更高。其次是“预处理”,模型通常无法直接读取原始图片文件,需要将其转换为特定的张量格式,包括调整尺寸、归一化像素值等步骤。预处理做得好不好,直接影响最终识别精度——例如输入尺寸与训练时不一致,或像素值未归一化,都会导致结果偏差。最后是“后处理”,即将模型输出的概率分布或坐标数值转化为人可读的标签或边界框,这一步通常还包含阈值过滤、非极大值抑制(NMS)等操作,是保证输出质量的关键环节。

    模型选型是决定项目成败的关键。如果你的任务是通用的图像分类(例如判断图片里是猫还是狗),ResNet50 或 MobileNetV2 是非常稳妥的选择。ResNet50 精度较高,适合对准确率要求严苛的场景;而 MobileNetV2 专为移动端设计,速度极快,适合实时性要求高的应用。如果是目标检测任务(需要框出物体位置),YOLO 系列(如 YOLOv8)是目前工业界的主流,它在速度和精度之间取得了极好的平衡。选型时建议遵循以下思路:先明确任务类型(分类、检测还是分割),再评估部署环境(CPU 还是 GPU、内存大小),最后结合精度与速度的权衡做出选择。对于新手,强烈建议从轻量级模型入手,先跑通流程,再逐步尝试更复杂的架构。

    为了更直观地对比这三类主流模型的差异,下表从参数量、推理速度、适用场景和硬件要求四个维度进行了梳理:

    模型
    参数量
    推理速度
    适用场景
    硬件要求
    ResNet50 约 25.6M 中等 通用图像分类,对精度要求较高的场景 建议 GPU,CPU 可运行但较慢
    MobileNetV2 约 3.4M 移动端 / 嵌入式实时分类 CPU 即可流畅运行
    YOLOv8 约 3.2M ~ 68M(按版本) 目标检测(需框出物体位置) 小版本可跑 CPU,大版本建议 GPU

    选型时还需考虑硬件资源。如果部署环境只有 CPU,那么必须选择轻量级模型,否则推理延迟可能高达数秒,无法满足交互需求。如果有 GPU 支持,则可以尝试参数量更大的模型以换取更高的精度。切记不要盲目追求“最新”或“最大”,最适合业务场景约束的模型才是最好的模型。另外,预训练模型(Pretrained Model)是新手快速上手的利器——它已经在 ImageNet 等大型数据集上学习过通用特征,我们只需在其基础上微调(Fine-tuning)即可适配自己的任务,无需从零训练,能大幅节省时间和算力。在 PyTorch 中,通过 torchvision.models 即可一键加载这些预训练权重,非常方便。

    ③ 快速上手:第一张图像的识别测试

    环境就绪、模型选定后,我们来完成第一次识别测试。这一步的目标非常简单:加载一张本地图片,通过模型得到预测结果,并打印出来。我们将使用 PyTorch 和预训练的 ResNet18 模型作为示例,因为它体积小、加载快,非常适合演示。在开始之前,请先准备一张测试图片(例如一张猫或狗的照片),命名为 test_image.jpg 并放在与脚本相同的目录下。如果你手头没有合适的图片,也可以从网上下载一张公开的示例图片,或者用手机随手拍一张日常物品的照片,效果同样直观。

    首先,我们需要定义图像预处理流程。预训练模型通常是在 ImageNet 数据集上训练的,因此我们的输入图片必须经过相同的变换(Resize 到 224×224,转换为 Tensor,并进行标准化)。这里的标准化参数(mean 和 std)是 ImageNet 数据集的统计值,必须原样使用,否则模型的识别效果会大打折扣。下面我们逐步拆解每个变换的作用:Resize(256) 先将图片等比缩放到短边为 256 像素,CenterCrop(224) 再从中心裁剪出 224×224 的区域,这样既能保留主体内容,又符合模型的输入要求;ToTensor() 将 PIL 图像转换为张量,并把像素值从 0-255 归一化到 0-1;最后的 Normalize 则按通道进行标准化,让数据分布与训练时保持一致。

    import torch
    from torchvision import models, transforms
    from PIL import Image

    # 加载预训练模型
    model = models.resnet18(weights=models.ResNet18_Weights.IMAGENET1K_V1)
    model.eval() # 切换到评估模式

    # 定义预处理步骤
    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]),
    ])

    # 读取并处理图像
    img_path = \’test_image.jpg\’ # 替换为你的图片路径
    input_image = Image.open(img_path).convert(\’RGB\’)
    input_tensor = preprocess(input_image)
    input_batch = input_tensor.unsqueeze(0) # 增加 batch 维度

    # 执行推理
    with torch.no_grad():
    output = model(input_batch)

    # 获取概率最高的类别索引
    probabilities = torch.nn.functional.softmax(output[0], dim=0)
    top_prob, top_catid = torch.max(probabilities, 0)

    print(f\”预测类别索引:{

    top_catid.item()}\”)
    print(f\”置信度:{

    top_prob.item():.4f}\”)

    这段代码展示了从加载模型到输出结果的完整闭环。注意 model.eval() 的调用,这在推理阶段是必须的,它会关闭 Dropout 等训练特有的层,确保结果稳定。运行成功后,你将看到一个类别索引和对应的置信度分数,标志着你的第一个识别程序已经跑通。不过,这里输出的只是一个数字索引(比如 281),并不直观。要把它变成可读的类别名称,我们需要借助 ImageNet 的类别映射表。PyTorch 官方提供了 torchvision.datasets.ImageNet 的类别列表,你也可以从网上下载一份 imagenet_classes.txt 文件,然后通过索引查表得到对应的英文标签,例如 281 对应的是 “tabby cat”。如果你希望输出中文标签,可以再准备一份中英文对照表,在查表后做一次翻译映射即可。这一步虽然简单,却是让识别结果真正“看得懂”的关键,建议你动手实现一下。

    ④ 批量处理流程与代码实现详解

    实际应用中,我们很少只处理一张图片。批量处理不仅能提高效率,还能充分利用 GPU 的并行计算能力。实现批量处理的核心思路是将多张图片打包成一个 Batch 输入模型,而不是循环逐张处理。这样做的好处非常明显:一方面,GPU 擅长并行计算,一次处理多张图片能大幅提升吞吐量;另一方面,批量推理只需一次模型前向传播,避免了反复加载模型的额外开销。在开始之前,请先准备一个存放图片的文件夹(例如 ./images),把需要识别的图片(支持 .jpg 格式)放进去。如果你手头图片不多,也可以把上一节用到的 test_image.jpg 复制几份,或者从网上下载几张公开的示例图片,效果同样直观。

    我们需要编写一个数据加载器,遍历指定文件夹下的所有图片,统一进行预处理并堆叠成张量。PyTorch 提供了 torch.utils.data.Dataset 和 DataLoader 两个核心类来帮助我们完成这件事:Dataset 负责定义如何读取单张图片并返回样本,DataLoader 则负责把多个样本自动打包成 Batch,并支持多进程并行加载。下面我们基于这两个类实现一个简化版的数据加载器,代码中每一步都加了注释,方便你对照理解:

    import os
    from torch.utils.data import Dataset, DataLoader
    from PIL import Image

    class ImageFolderDataset(Dataset):
    \”\”\”自定义数据集:遍历文件夹下的所有图片,返回预处理后的张量和文件路径\”\”\”
    def __init__(self, folder_path, transform):
    # 只收集 .jpg 结尾的图片,你也可以按需扩展为 .png、.jpeg 等
    self.img_paths = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith(\’.jpg\’)]
    self.transform = transform

    def __len__(self):
    # 返回数据集中的图片总数,DataLoader 会据此计算迭代次数
    return len(self.img_paths)

    def __getitem__(self, idx):
    # 读取第 idx 张图片,转换为 RGB 模式,并应用预处理变换
    img = Image.open(self.img_paths[idx]).convert(\’RGB\’)
    return self.transform(img), self.img_paths[idx]

    # 实例化数据集和数据加载器
    # 注意:这里复用了上一节定义的 preprocess 预处理流程
    dataset = ImageFolderDataset(\’./images\’, preprocess)
    dataloader = DataLoader(dataset, batch_size=16, shuffle=False, num_workers=2)

    # 批量推理
    results = []
    for images, paths in dataloader:
    with torch.no_grad():
    outputs = model(images) # 一次前向传播,同时处理 batch_size 张图片
    probs = torch.nn.functional.softmax(outputs, dim=1)
    top_probs, top_classes = torch.max(probs, dim=1)

    # 逐条记录每张图片的识别结果
    for path, cls, prob in zip(paths, top_classes, top_probs):
    results.append({

    \’file\’: os.path.basename(path), \’class_id\’: cls.item(), \’confidence\’: prob.item()})

    print(f\”已完成 {

    len(results)} 张图片的批量识别\”)

    在这个流程中,batch_size 的设置非常关键。如果显存充足,增大 Batch Size 可以显著提升吞吐量;如果显存有限导致报错(OOM),则需要减小该值。num_workers 参数用于开启多进程加载数据,能避免 CPU 成为瓶颈,特别是在处理高分辨率图片时效果明显。这里有几个新手容易踩的坑,提前帮你排掉:第一,Dataset 的 __getitem__ 里不要做耗时操作(比如网络请求),否则会拖慢整个数据加载流程;第二,如果图片格式不止 .jpg,记得在 __init__ 里扩展后缀判断,否则部分图片会被静默跳过;第三,shuffle=False 在推理阶段是必须的,它保证结果顺序与文件夹中的文件顺序一致,方便后续与文件名一一对应。运行成功后,results 列表里就保存了所有图片的识别结果,下一节我们会教大家如何把这些结果可视化并导出。

    ⑤ 识别结果可视化与数据导出方法

    上一节我们得到了 results 列表,里面保存了每张图片的文件名、类别索引和置信度。但这样一串 raw 数据并不直观,我们需要将识别结果可视化并导出,以便进一步分析。可视化主要包括两个方面:一是在原图上绘制预测标签和置信度,让结果一目了然;二是统计各类别的分布情况,用柱状图或饼图直观展示数据构成。前者适合逐张查看识别效果,后者适合整体把握数据分布,两者结合能让你对识别结果有更全面的认识。在开始之前,请先创建一个 output 目录用于存放标注后的图片,同时准备好上一节生成的 results 列表。

    利用 OpenCV 或 Matplotlib,我们可以轻松地在图像上添加文字信息。OpenCV 的 cv2.putText 适合在图片上直接绘制标签,而 Matplotlib 则更适合生成统计图表。对于导出的需求,CSV 格式是最通用的选择,方便用 Excel 打开或用 Pandas 进行二次处理。下面我们分三步来完成:第一步,把类别索引映射为可读的类别名称;第二步,在原图上绘制预测标签并保存;第三步,把结果导出为 CSV 文件,并生成类别分布统计图。代码中每一步都加了注释,方便你对照理解。

    import os
    import cv2
    import pandas as pd
    import matplotlib.pyplot as plt

    # 第一步:准备类别名称映射字典
    # 这里仅列出几个示例,实际使用时请加载完整的 ImageNet 类别表
    class_names = {

    0: \’tench\’, 1: \’goldfish\’, 281: \’tabby cat\’, 282: \’tiger cat\’}

    # 第二步:在原图上绘制预测标签并保存
    def draw_result(img_path, class_id, confidence, output_dir=\’./output\’):
    # 确保输出目录存在
    os.makedirs(output_dir, exist_ok=True)

    img = cv2.imread(img_path)
    if img is None:
    print(f\”警告:无法读取图片 {

    img_path},已跳过\”)
    return

    # 拼接标签文本,例如 \”tabby cat: 0.92\”
    label_text = f\”{

    class_names.get(class_id, \’Unknown\’)}: {

    confidence:.2f}\”

    # 在左上角绘制文字,绿色、粗体、字号 0.8
    cv2.putText(img, label_text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2)

    save_path = os.path.join(output_dir, os.path.basename(img_path))
    cv2.imwrite(save_path, img)
    print(f\”已保存标注图片:{

    save_path}\”)

    # 遍历上一节生成的 results,逐张绘制并保存
    for res in results:
    draw_result(os.path.join(\’./images\’, res[\’file\’]), res[\’class_id\’], res[\’confidence\’])

    # 第三步:导出为 CSV 文件
    df = pd.DataFrame(results)
    df[\’label\’] = df[\’class_id\’].map(class_names) # 把类别索引映射为名称
    df.to_csv(\’recognition_results.csv\’, index=False, encoding=\’utf-8-sig\’)
    print(\”CSV 文件已导出:recognition_results.csv\”)

    # 第四步:统计各类别分布并绘制柱状图
    label_counts = df[\’label\’].value_counts()
    plt.figure(figsize=(10, 6))
    label_counts.plot(kind=\’bar\’, color=\’skyblue\’)
    plt.title(\’识别结果类别分布\’)
    plt.xlabel(\’类别\’)
    plt.ylabel(\’数量\’)
    plt.xticks(rotation=45)
    plt.tight_layout()
    plt.savefig(\’class_distribution.png\’, dpi=150)
    plt.show()
    print(\”类别分布图已保存:class_distribution.png\”)

    通过上述代码,处理后的图片会被保存到 output 目录,你可以直接查看带有标注的结果图。同时,生成的 CSV 文件记录了所有文件的识别详情,包含文件名、类别索引、置信度和类别名称,便于后续进行数据统计或人工复核。类别分布图则能让你一眼看出数据集中哪些类别占多数、哪些类别较少,这对后续的精度优化很有参考价值。这种“可视化 + 结构化数据”的双重输出方式,是工程交付的标准动作。这里有几个新手容易踩的坑,提前帮你排掉:第一,cv2.imread 读取中文路径或特殊字符路径时可能返回 None,建议统一使用英文文件名;第二,encoding=\’utf-8-sig\’ 是必须的,否则用 Excel 打开 CSV 时中文会乱码;第三,如果图片数量很多,建议在 draw_result 里加一个进度打印,方便观察处理进度。运行成功后,你就拥有了一个完整的「批量识别 → 可视化 → 导出」闭环流程。

    ⑥ 自定义阈值调整与精度优化技巧

    上一节我们导出了识别结果,但默认的模型输出往往会给出一个概率最高的类别,即使这个概率很低(比如只有 10%)。在某些严谨的场景下,如果置信度低于某个阈值,我们应该认为“无法识别”而不是强行给出一个错误标签。这就引入了阈值过滤机制。阈值(Threshold)本质上是一个置信度门槛:只有当模型对某个类别的置信度达到或超过这个门槛时,我们才采信它的判断;否则就标记为“低置信度”或“未知”,交由人工复核或后续处理。这样做能显著降低错误标签对下游流程的干扰,是工程落地中非常实用的一环。在开始之前,请先准备好上一节生成的 results 列表,它包含了每张图片的 class_id 和 confidence 字段。

    你可以在后处理阶段加入判断逻辑。下面我们分两步来完成:第一步,设定一个合理的阈值,遍历 results 列表,把置信度低于阈值的样本标记为“未知”;第二步,统计过滤前后的数据变化,直观感受阈值对结果的影响。代码中每一步都加了注释,方便你对照理解:

    THRESHOLD = 0.75 # 设定阈值为 0.75,你可以根据实际场景调整

    filtered_results = []
    low_confidence_count = 0 # 统计被过滤掉的低置信度样本数

    for res in results:
    if res[\’confidence\’] >= THRESHOLD:
    # 置信度达标,保留原始结果
    filtered_results.append(res)
    else:
    # 置信度不足,标记为未知或低置信度
    res[\’class_id\’] = 1
    res[\’label\’] = \’Unknown\’
    filtered_results.append(res)
    low_confidence_count += 1

    print(f\”总样本数:{

    len(results)}\”)
    print(f\”低置信度样本数:{

    low_confidence_count}\”)
    print(f\”过滤后有效样本数:{

    len(filtered_results) low_confidence_count}\”)

    # 可选:把过滤后的结果导出,方便后续分析
    import pandas as pd
    df_filtered = pd.DataFrame(filtered_results)
    df_filtered

    赞(0)
    未经允许不得转载:171主机测评 » Python 项目应用:Python AI 图像识别工具从入门到实战应用指南
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址