前言
在之前的写的文章《初始AIGC》(初始AIGC,实现简单的AI客服回复 - 掘金 (juejin.cn))中,我曾介绍了本人第一次认识和学习如何利用openai实现简单的AI客服回复功能的学习过程,今天我想给大家分享一下我新接触到的东西,利用openai实现简单的图片物体识别功能。也是十分的有意思,希望大家能够喜欢。
效果展示:
补充:
昨天由于openai网站出了点问题,在这里我先给大家补上如何找到openai_key的具体位置。
1.打开openai官网,点击右上角的Log in (右边的Try ChatGPT可以免费无限使用GPT3.5,也很不错)
2.使用Google账号登录(现在好像得绑定国外手机号才能进去,大家可以去网上租一个短时间的国外手机号(不是很贵,大概一块多)进行验证,)
3.登录后点击右上角Log in 会来到下面页面,点击右边的API
- 右上角找到View API keys
- 创建一个新的key
下面回到正题,来到Colaboratory官网,准备开始书写代码(如果不知道如何进行准备工作,可以看看我之前的文章《初始AIGC》)
过程
一.先安装 Transformers 库,代码如下
二.点击左边播放按钮,安装成功如下:
三.将鼠标放下边框边缘,会出现新增代码(左上角也有一个"+代码"),如下:
四.添加如下代码
javascript
from transformers.pipelines import SUPPORTED_TASKS
SUPPORTED_TASKS
如下图:
解释:这段代码是使用 Hugging Face Transformers 库编写的,它从 transformers.pipelines
模块中导入了 SUPPORTED_TASKS
变量。
- Hugging Face Transformers 库: Hugging Face Transformers 是一个流行的用于自然语言处理(NLP)的 Python 库。它提供了预训练模型和各种工具,用于处理自然语言文本。
- Pipelines 模块: 在 Transformers 库中,
pipelines
模块包含一组高级 API(称为 pipelines),用于轻松地使用预训练模型执行各种 NLP 任务。这些 pipelines 包括文本生成、情感分析、翻译等广泛的任务。 SUPPORTED_TASKS
变量:SUPPORTED_TASKS
是在transformers.pipelines
模块中定义的一个变量,它可能包含一个列表或字典,其中列出了库支持的各种 NLP 任务。SUPPORTED_TASKS
的确切内容可能因 Transformers 库的版本而异。
五.使用Transformers 库中的 pipelines 模块,并从中导入 SUPPORTED_TASKS。
代码:
python
from transformers.pipelines import SUPPORTED_TASKS
print(SUPPORTED_TASKS)
运行结果图:
代码解释:
SUPPORTED_TASKS
是一个字典,其中包含了 Transformers 库支持的各种任务(tasks)的信息。
在使用这段代码之后,你可以直接访问 SUPPORTED_TASKS
,以获取库支持的任务列表及其相关信息
六:查看items(可有可无)
我们可以查看一下SUPPORTED_TASKS字典中的信息。
代码如下:
bash
# ES6 解构
for k, v in SUPPORTED_TASKS.items():
print(k)
效果:
代码解释:
SUPPORTED_TASKS.items()
返回一个由字典项组成的视图,每个项是一个键值对的元组。for k, v in SUPPORTED_TASKS.items():
使用循环语句遍历字典的键值对。在每次循环中,k
获取字典中的键,v
获取相应的值。print(k)
打印出当前循环迭代中的键k
七. 导入 transformers 库中的 pipeline 模块
代码:
js
from transformers import pipeline
八.赋模型,选功能
代码:
ini
checkpoint = "google/owlvit-base-patch32" # 将整个图片识别模型赋给checkpoint
detector = pipeline('zero-shot-object-detection',model=checkpoint) # zero-shot-object-detection 选择功能 model = checkpoint 选择模型
代码解释:
checkpoint = "google/owlvit-base-patch32"
: 这一行代码定义了一个变量checkpoint
,其中包含了一个预训练模型的名称或路径。在这个例子中,使用的是 "google/owlvit-base-patch32",这是一个图像识别模型的预训练权重。detector = pipeline('zero-shot-object-detection', model=checkpoint)
: 这一行代码创建了一个零样本目标检测任务的实例,命名为detector
。通过调用pipeline
函数,第一个参数指定了要执行的任务,这里是 'zero-shot-object-detection',表示零样本目标检测。model=checkpoint
参数用于指定要使用的预训练模型,这里是之前定义的checkpoint
。
现在,你可以使用 detector
这个实例来进行零样本目标检测。例如,你可以将一张图片传递给 detector
实例,它将返回检测到的对象以及相关的信息,而不需要在训练过程中使用特定类别的标签。
九.导入图片
代码:
ini
import requests # python的http 请求库
from PIL import Image # PIL python的图片的专业库
url ="https://unsplash.com/photos/oj0zeY2Ltk4/download?ixid=MnwxMjA3fDB8MXxzZWFyY2h8MTR8fHBpY25pY3xlbnwwfHx8fDE2Nzc0OTE1NDk&force=true&w=640"
# requests.get(发送远程请求,把图片下载到本地)
img = Image.open(requests.get(url,stream=True).raw)
img(显示图片)
十.选择候选对象
代码:
ini
predictions = detector(
img,
# 候选的对象
candidate_labels= ["hat","sunglasses","book"]
)
predictions
输出结果解释:
-
'score'
: 表示模型对该对象的置信度得分,值在 0 到 1 之间,越高表示模型越有信心认为检测到了正确的对象。 -
'label'
: 表示检测到的对象的标签,即模型认为该对象属于什么类别。 -
'box'
: 一个包含边界框信息的字典,表示检测到的对象在原始图像中的位置。具体包括:'xmin'
: 边界框左上角的 x 坐标。'ymin'
: 边界框左上角的 y 坐标。'xmax'
: 边界框右下角的 x 坐标。'ymax'
: 边界框右下角的 y 坐标。
十一.圈出找到物体
代码:
ini
from PIL import ImageDraw # 写模块
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
效果图:
留言
后续我将会继续分享我的AI学习过程哦,对我分享的东西感兴趣的可以关注一下博主哦。持续更新中...♥(ˆ◡ˆԅ)