初始AIGC(二):进行简单的图片物体识别

前言

在之前的写的文章《初始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

  1. 右上角找到View API keys
  1. 创建一个新的key

下面回到正题,来到Colaboratory官网,准备开始书写代码(如果不知道如何进行准备工作,可以看看我之前的文章《初始AIGC》)

过程

一.先安装 Transformers 库,代码如下

二.点击左边播放按钮,安装成功如下:

三.将鼠标放下边框边缘,会出现新增代码(左上角也有一个"+代码"),如下:

四.添加如下代码

javascript 复制代码
from transformers.pipelines import SUPPORTED_TASKS
SUPPORTED_TASKS

如下图:

解释:这段代码是使用 Hugging Face Transformers 库编写的,它从 transformers.pipelines 模块中导入了 SUPPORTED_TASKS 变量。

  1. Hugging Face Transformers 库: Hugging Face Transformers 是一个流行的用于自然语言处理(NLP)的 Python 库。它提供了预训练模型和各种工具,用于处理自然语言文本。
  2. Pipelines 模块: 在 Transformers 库中,pipelines 模块包含一组高级 API(称为 pipelines),用于轻松地使用预训练模型执行各种 NLP 任务。这些 pipelines 包括文本生成、情感分析、翻译等广泛的任务。
  3. 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)

效果:

代码解释:

  1. SUPPORTED_TASKS.items() 返回一个由字典项组成的视图,每个项是一个键值对的元组。
  2. for k, v in SUPPORTED_TASKS.items(): 使用循环语句遍历字典的键值对。在每次循环中,k 获取字典中的键,v 获取相应的值。
  3. 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 选择模型

代码解释:

  1. checkpoint = "google/owlvit-base-patch32": 这一行代码定义了一个变量 checkpoint,其中包含了一个预训练模型的名称或路径。在这个例子中,使用的是 "google/owlvit-base-patch32",这是一个图像识别模型的预训练权重。
  2. 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

输出结果解释:

  1. 'score': 表示模型对该对象的置信度得分,值在 0 到 1 之间,越高表示模型越有信心认为检测到了正确的对象。

  2. 'label': 表示检测到的对象的标签,即模型认为该对象属于什么类别。

  3. '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学习过程哦,对我分享的东西感兴趣的可以关注一下博主哦。持续更新中...♥(ˆ◡ˆԅ)

相关推荐
随·枫3 分钟前
html渲染优先级
前端·html
码蜂窝编程官方9 分钟前
【含开题报告+文档+PPT+源码】基于SSM的电影数据挖掘与分析可视化系统设计与实现
java·vue.js·人工智能·后端·spring·数据挖掘·maven
遗落凡尘的萤火-生信小白11 分钟前
转录组数据挖掘(生物技能树)(第11节)下游分析
人工智能·数据挖掘
XinZong21 分钟前
【OpenAI】获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!
人工智能
没有余地 EliasJie22 分钟前
深度学习图像视觉 RKNN Toolkit2 部署 RK3588S边缘端 过程全记录
人工智能·嵌入式硬件·深度学习
小扳39 分钟前
Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:电影院后台管理系统(前后端源码 + 数据库 sql 脚本)
java·前端·数据库·spring boot·mysql·spring·课程设计
田本初39 分钟前
从0-1逐步搭建一个前端脚手架工具并发布到npm
前端·npm·node.js
吃一克鹅蛋42 分钟前
Spring 框架环境搭建
java·后端·spring
HelpLook HelpLook1 小时前
高新技术行业中的知识管理:关键性、挑战、策略及工具应用
人工智能·科技·aigc·客服·知识库搭建
Marshall35721 小时前
Canvas 和 SVG 的高级使用与性能优化
前端·svg·canvas