[AIGC] AI图像识别初体验,原来图像识别这么“简单”!

前言

在之前,我们已经学过利用AI进行跨境电商分析,虚拟客服和情感分析!

今天,我们就来学习如何利用AI进行图像识别!

正文

必备工具

  1. Google账户

  2. Colab网站:colab.research.google.com/

  3. 能正常访问以上网站的途径:魔法

  4. AI应用

    • transformers模型

      transformers 是一个由Hugging Face公司开发的开源库,用于在自然语言处理(NLP)任务中使用预训练的语言模型。该库提供了一系列预训练的模型,包括了许多流行的模型,如BERT、GPT、RoBERTa等。

    • pipelines派发任务

      在Hugging Face的transformers库中,Pipeline是一个方便的工具,用于简化自然语言处理任务的执行。Pipeline提供了一个高级接口,允许你使用一行代码执行各种NLP任务,而无需深入了解底层的模型和处理步骤。

      使用Pipeline时,你只需要指定所需任务的名称,然后传递输入文本。Pipeline会自动加载适当的预训练模型、分词器和后处理步骤,使整个过程变得非常简单。

    • "google/owlvit-base-patch32" 图像识别模型

    • PIL图像识别库

安装transformers模型

python 复制代码
!pip install transformers

这样就安装成功啦!

用pipelin下发任务,导入NLP字典

python 复制代码
# transformers pipeline 哪些任务?
from transformers.pipelines import SUPPORTED_TASKS
SUPPORTED_TASKS

transformers 库中,SUPPORTED_TASKS 是一个包含各种NLP任务及其相关信息的字典。这个字典列出了当前版本的 transformers 支持的不同任务,以及用于执行这些任务的 pipeline 类。

如果我们得到!

就成功啦!

SUPPORTED_TASKS.items() 返回一个包含字典中所有键值对的视图对象,它是一个可迭代对象。在这个特定的情境下,打印 SUPPORTED_TASKS.items() 会输出字典中所有任务及其相关信息的键值对。

接下来我们打印一下:

python 复制代码
print(SUPPORTED_TASKS.items()) # dict 字典 O(1)

我们再来解构 SUPPORTED_TASKS 字典的键值对,将键(任务名称)打印出来。

输入下述代码

python 复制代码
# es6 解构
for k, v in   SUPPORTED_TASKS.items():
  print(k)

输出:

我们再导入一下pipline下发任务

python 复制代码
from transformers import pipeline

我们再安装一下图片识别模型

我们输入这段代码:

python 复制代码
checkpoint = "google/owlvit-base-patch32"# 图片识别模型
detector = pipeline('zero-shot-object-detection', model=checkpoint)

当我们看到这样的界面就说明安装成功咯!

导入我们要识别的图片

python 复制代码
import requests #python的http 请求库
from PIL import Image # PIL python 图片的专业库

url = "https://unsplash.com/photos/oj0zeY2Ltk4/download?ixid=MnwxMjA3fDB8MXxzZWFyY2h8MTR8fHBpY25pY3xlbnwwfHx8fDE2Nzc0OTE1NDk&force=true&w=640"
# 人生苦短, 我用python
# requests.get
img = Image.open(requests.get(url, stream=True).raw)
img

我们在运行这段代码之后能看到这样一个图,说明运行成功啦!

接下来,我们给AI下发识别目标

输入下面这段代码:

python 复制代码
predictions = detector(
    img,
    #候选的对象
    candidate_labels= ["hat", "sunglasses", "book"]
)
predictions

我们得到的是一个这样的结果:

这段输出有何含义呢?

这个输出是零样本目标检测的结果,其中包含了检测到的对象及其相关信息。每个元素都是一个字典,代表一个检测到的对象。

  1. 'score'
    • 表示检测到的对象的得分,范围通常在 0 到 1 之间。得分越高表示算法认为该对象存在的可能性越大。
  2. 'label'
    • 表示检测到的对象的标签或类别,例如 "sunglasses" 表示太阳镜,"book" 表示书,"hat" 表示帽子。
  3. 'box'
    • 是一个包含对象边界框(bounding box)信息的字典,包括了边界框的四个坐标值。
      • 'xmin':边界框左上角的 x 坐标。
      • 'ymin':边界框左上角的 y 坐标。
      • 'xmax':边界框右下角的 x 坐标。
      • 'ymax':边界框右下角的 y 坐标。

这样,针对输出中的每个元素,我们可以获取对象的得分、标签以及边界框的坐标信息。

例如:

  • 对于第一个对象(太阳镜):
    • 得分 ('score') 为 0.22562021017074585。
    • 标签 ('label') 为 'sunglasses'。
    • 边界框 ('box') 的坐标信息为 {'xmin': 349, 'ymin': 228, 'xmax': 429, 'ymax': 265}

类似地,你可以通过遍历输出的每个元素来获取所有检测到的对象的信息。

最后:识别图像

好啦,到了这一步我们就可以根据我们上面得到的字典进行图像识别了!我们输入这样一段代码:

python 复制代码
from PIL import ImageDraw # PIL是python图片库 写模块
draw = ImageDraw.Draw(img)

for prediction in predictions:
  box = prediction["box"]
  label = prediction["label"]
  score = prediction["score"]
  xmin, ymin, xmax, ymax = box.values() # 解构
  draw.rectangle((xmin, ymin, xmax, ymax),outline="red",width=1)
  draw.text((xmin,ymin), f"{label}: {round(score, 2)}", fill="red")

img

那么这段代码有何含义呢?

这段使用 Python Imaging Library(PIL)中的 ImageDraw 模块,为图像上的每个目标检测结果绘制边界框和标签。

ini 复制代码
pythonCopy codefrom PIL import ImageDraw

draw = ImageDraw.Draw(img)
  • 首先,导入了 ImageDraw 类从PIL库中,并使用 ImageDraw.Draw 函数创建了一个用于在图像上绘图的对象 draw
ini 复制代码
pythonCopy codefor prediction in predictions:
    box = prediction["box"]
    label = prediction["label"]
    score = prediction["score"]
    xmin, ymin, xmax, ymax = box.values()  # 解构
  • 然后,通过遍历 predictions,其中每个元素代表一个目标检测结果,获取了每个检测结果的边界框坐标 (box)、标签 (label) 和得分 (score)。
  • 使用 box.values() 进行解构赋值,将边界框的坐标值分配给 xminyminxmaxymax
ini 复制代码
pythonCopy codedraw.rectangle((xmin, ymin, xmax, ymax), outline="red", width=1)
draw.text((xmin, ymin), f"{label}: {round(score, 2)}", fill="red")
  • 对于每个检测结果,使用 draw.rectangle() 在图像上绘制一个红色的矩形,表示目标的边界框。
  • 使用 draw.text() 在图像上添加标签和得分信息,显示在边界框的左上角。

最后给我们呈现的结果就是

总结

人工智能图像识别在多个领域中都带来了许多好处,利用好这项技术能给我们带来很多好处:

  1. 自动化处理:
    • AI图像识别可以自动处理大量图像数据,无需人工干预。这使得在短时间内处理大规模图像集合成为可能,提高了效率。
  2. 快速准确的分类:
    • AI模型能够在瞬间对大量图像进行分类,远远快于人类。并且,当经过足够的训练时,它们通常能够提供高度准确的分类结果。
  3. 大规模数据处理:
    • 大规模图像数据的处理和分析对于许多应用至关重要,例如医学影像分析、卫星图像处理等。AI图像识别能够处理这些数据,从中提取有用的信息。
  4. 实时识别:
    • 对于需要实时决策的应用,如自动驾驶、视频监控等,AI图像识别能够在几乎实时的情况下进行物体识别、行为分析等任务。
  5. 无人化监控和检测:
    • 在安防、生产线等领域,AI图像识别可以用于无人化的监控和检测,提高了安全性和生产效率。
  6. 个性化服务和推荐:
    • 在商业领域,AI图像识别可以用于分析用户的图像,提供个性化的服务和产品推荐,增加用户体验和满意度。
  7. 医学影像分析:
    • 在医学领域,AI图像识别可以用于分析医学影像,辅助医生进行疾病诊断和治疗计划制定。
  8. 环境监测和保护:
    • 在环境科学中,AI图像识别可以用于监测和保护自然环境,例如识别野生动植物、监测气候变化等。

好了,到这里我们今天的尝试就结束啦!大家也可以动手取实践一下哦!

如果你对AIGC感兴趣,也可以关注我哦~我后续还会更新有关AIGC的文章以供大家学习!

如果有任何想法何指正欢迎大家在评论区留言!

点个小小的赞鼓励支持一下吧!🌹🌹🌹

相关推荐
计算机源码社4 分钟前
分享一个餐饮连锁店点餐系统 餐馆食材采购系统Java、python、php三个版本(源码、调试、LW、开题、PPT)
java·python·php·毕业设计项目·计算机课程设计·计算机毕业设计源码·计算机毕业设计选题
汤兰月9 分钟前
Python中的观察者模式:从基础到实战
开发语言·python·观察者模式
chnyi6_ya20 分钟前
论文笔记:Online Class-Incremental Continual Learning with Adversarial Shapley Value
论文阅读·人工智能
中杯可乐多加冰21 分钟前
【AI驱动TDSQL-C Serverless数据库技术实战】 AI电商数据分析系统——探索Text2SQL下AI驱动代码进行实际业务
c语言·人工智能·serverless·tdsql·腾讯云数据库
西柚与蓝莓2 小时前
【开源开放体系总结】
python
萱仔学习自我记录2 小时前
PEFT库和transformers库在NLP大模型中的使用和常用方法详解
人工智能·机器学习
hsling松子5 小时前
使用PaddleHub智能生成,献上浓情国庆福
人工智能·算法·机器学习·语言模型·paddlepaddle
belldeep5 小时前
python:reportlab 将多个图片合并成一个PDF文件
python·pdf·reportlab
正在走向自律5 小时前
机器学习框架
人工智能·机器学习
好吃番茄6 小时前
U mamba配置问题;‘KeyError: ‘file_ending‘
人工智能·机器学习