前言
在之前,我们已经学过利用AI进行跨境电商分析,虚拟客服和情感分析!
今天,我们就来学习如何利用AI进行图像识别!
正文
必备工具
-
Google账户
-
Colab网站:colab.research.google.com/
-
能正常访问以上网站的途径:魔法
-
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
我们得到的是一个这样的结果:
这段输出有何含义呢?
这个输出是零样本目标检测的结果,其中包含了检测到的对象及其相关信息。每个元素都是一个字典,代表一个检测到的对象。
'score'
:- 表示检测到的对象的得分,范围通常在 0 到 1 之间。得分越高表示算法认为该对象存在的可能性越大。
'label'
:- 表示检测到的对象的标签或类别,例如 "sunglasses" 表示太阳镜,"book" 表示书,"hat" 表示帽子。
'box'
:- 是一个包含对象边界框(bounding box)信息的字典,包括了边界框的四个坐标值。
'xmin'
:边界框左上角的 x 坐标。'ymin'
:边界框左上角的 y 坐标。'xmax'
:边界框右下角的 x 坐标。'ymax'
:边界框右下角的 y 坐标。
- 是一个包含对象边界框(bounding box)信息的字典,包括了边界框的四个坐标值。
这样,针对输出中的每个元素,我们可以获取对象的得分、标签以及边界框的坐标信息。
例如:
- 对于第一个对象(太阳镜):
- 得分 (
'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()
进行解构赋值,将边界框的坐标值分配给xmin
、ymin
、xmax
和ymax
。
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()
在图像上添加标签和得分信息,显示在边界框的左上角。
最后给我们呈现的结果就是
总结
人工智能图像识别在多个领域中都带来了许多好处,利用好这项技术能给我们带来很多好处:
- 自动化处理:
- AI图像识别可以自动处理大量图像数据,无需人工干预。这使得在短时间内处理大规模图像集合成为可能,提高了效率。
- 快速准确的分类:
- AI模型能够在瞬间对大量图像进行分类,远远快于人类。并且,当经过足够的训练时,它们通常能够提供高度准确的分类结果。
- 大规模数据处理:
- 大规模图像数据的处理和分析对于许多应用至关重要,例如医学影像分析、卫星图像处理等。AI图像识别能够处理这些数据,从中提取有用的信息。
- 实时识别:
- 对于需要实时决策的应用,如自动驾驶、视频监控等,AI图像识别能够在几乎实时的情况下进行物体识别、行为分析等任务。
- 无人化监控和检测:
- 在安防、生产线等领域,AI图像识别可以用于无人化的监控和检测,提高了安全性和生产效率。
- 个性化服务和推荐:
- 在商业领域,AI图像识别可以用于分析用户的图像,提供个性化的服务和产品推荐,增加用户体验和满意度。
- 医学影像分析:
- 在医学领域,AI图像识别可以用于分析医学影像,辅助医生进行疾病诊断和治疗计划制定。
- 环境监测和保护:
- 在环境科学中,AI图像识别可以用于监测和保护自然环境,例如识别野生动植物、监测气候变化等。
好了,到这里我们今天的尝试就结束啦!大家也可以动手取实践一下哦!
如果你对AIGC感兴趣,也可以关注我哦~我后续还会更新有关AIGC的文章以供大家学习!
如果有任何想法何指正欢迎大家在评论区留言!
点个小小的赞鼓励支持一下吧!🌹🌹🌹