在之前,我们已经学过利用AI进行跨境电商分析,虚拟客服和情感分析!
今天,我们就来学习如何利用AI进行图像识别!
transformers 是一个由Hugging Face公司开发的开源库,用于在自然语言处理(NLP)任务中使用预训练的语言模型。该库提供了一系列预训练的模型,包括了许多流行的模型,如BERT、GPT、RoBERTa等。
在Hugging Face的transformers库中,Pipeline是一个方便的工具,用于简化自然语言处理任务的执行。Pipeline提供了一个高级接口,允许你使用一行代码执行各种NLP任务,而无需深入了解底层的模型和处理步骤。 使用Pipeline时,你只需要指定所需任务的名称,然后传递输入文本。Pipeline会自动加载适当的预训练模型、分词器和后处理步骤,使整个过程变得非常简单。
!pip install transformers
这样就安装成功啦!
# transformers pipeline 哪些任务?
from transformers.pipelines import SUPPORTED_TASKS
SUPPORTED_TASKS
在 transformers
库中,SUPPORTED_TASKS
是一个包含各种NLP任务及其相关信息的字典。这个字典列出了当前版本的 transformers
支持的不同任务,以及用于执行这些任务的 pipeline
类。
如果我们得到!
就成功啦!
SUPPORTED_TASKS.items()
返回一个包含字典中所有键值对的视图对象,它是一个可迭代对象。在这个特定的情境下,打印 SUPPORTED_TASKS.items()
会输出字典中所有任务及其相关信息的键值对。
接下来我们打印一下:
print(SUPPORTED_TASKS.items()) # dict 字典 O(1)
我们再来解构 SUPPORTED_TASKS
字典的键值对,将键(任务名称)打印出来。
输入下述代码
# es6 解构
for k, v in SUPPORTED_TASKS.items():
print(k)
输出:
我们再导入一下pipline
下发任务
from transformers import pipeline
我们输入这段代码:
checkpoint = "google/owlvit-base-patch32"# 图片识别模型
detector = pipeline('zero-shot-object-detection', model=checkpoint)
当我们看到这样的界面就说明安装成功咯!
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
我们在运行这段代码之后能看到这样一个图,说明运行成功啦!
输入下面这段代码:
predictions = detector(
img,
#候选的对象
candidate_labels= ["hat", "sunglasses", "book"]
)
predictions
我们得到的是一个这样的结果:
这段输出有何含义呢?
这个输出是零样本目标检测的结果,其中包含了检测到的对象及其相关信息。每个元素都是一个字典,代表一个检测到的对象。
'score':
'label':
'box':
'xmin'
:边界框左上角的 x 坐标。'ymin'
:边界框左上角的 y 坐标。'xmax'
:边界框右下角的 x 坐标。'ymax'
:边界框右下角的 y 坐标。这样,针对输出中的每个元素,我们可以获取对象的得分、标签以及边界框的坐标信息。
例如:
'score'
) 为 0.22562021017074585。'label'
) 为 'sunglasses'。'box'
) 的坐标信息为 {'xmin': 349, 'ymin': 228, 'xmax': 429, 'ymax': 265}
。类似地,你可以通过遍历输出的每个元素来获取所有检测到的对象的信息。
好啦,到了这一步我们就可以根据我们上面得到的字典进行图像识别了!我们输入这样一段代码:
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
模块,为图像上的每个目标检测结果绘制边界框和标签。
pythonCopy codefrom PIL import ImageDraw
draw = ImageDraw.Draw(img)
ImageDraw
类从PIL库中,并使用 ImageDraw.Draw
函数创建了一个用于在图像上绘图的对象 draw
。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
。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()
在图像上添加标签和得分信息,显示在边界框的左上角。最后给我们呈现的结果就是
人工智能图像识别在多个领域中都带来了许多好处,利用好这项技术能给我们带来很多好处:
2. 快速准确的分类:
3. 大规模数据处理:
4. 实时识别:
5. 无人化监控和检测:
6. 个性化服务和推荐:
7. 医学影像分析:
8. 环境监测和保护:
阅读量:2017
点赞量:0
收藏量:0