前语
上篇文章咱们简略体会了一下OpenAI的使用和调试,今天咱们持续带咱们来进行练习和愈加深化的了解。话不多说,让咱们开端吧!
正文
机器学习使命
这次文章让咱们来调试一台能够完结咱们需求的“机器”,经过不断地调试让它进行学习,终究能够完结咱们交给它的使命——辨认图片上咱们想要它辨认出来的东西
。
首要让咱们进入Colab,新建一台笔记本供咱们这次学习使用。(怎样开端咱们的学习能够参阅博主上一篇文章(【AIGC】全新范畴!小白Openai初体会 带你轻松了解和运用! – (juejin.cn))
随后,让咱们安装一个transformers
——也便是huggingface的核心库并点击运转:
!pip install transformers
安装完之后先别急着弄完咱们的“机器”,先让咱们看看支撑派发那些使命。
# pipeline --- 分发使命 --- pipeline(task, model)
# transformers pipeline 哪些使命?
from transformers.pipelines import SUPPORTED_TASKS
SUPPORTED_TASKS
运转完之后咱们能够经过下拉下划线看见十分十分多能够支撑的使命。持续执行下列代码并运转:
print(SUPPORTED_TASKS.items()) # dick 字典 0(1)
接下来再让咱们看看transformers默许支撑的nlp使命:
# es6 解构
for k, v in SUPPORTED_TASKS.items(): # 相当于块级效果域
print(k) # 检查默许支撑的nlp使命
咱们能够看到许多常见需要用到的功用,像是question-answering
问答功用,AI便是靠这个来进行练习的;还有咱们接下来计划用到的image-classification
图像分类功用啦;zero-shot-object-detection
定位和辨认方针功用啦等等。然后再执行下面的代码让咱们能快速完结上面的使命:
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'
# requests.get---发送长途恳求,这个进程会花费时间
# python是一门同步语言,会同步恳求
# 等候图片下载完结;然后再Image.open;最终打印img
img = Image.open(requests.get(url, stream=True).raw)
# requsets --- 用于网络恳求,http恳求的方法,get表明明文恳求
img
这样咱们就拿到了一张“沙滩”的图片。接下来让咱们向咱们的“机器”传达咱们想要让它完结的使命,也便是辨认哪些东西:
predictions = detector(
img,
# 候选的对象
candidate_labels=["hat","sunglasses","book"]
# 查找想要辨认的对象
)
predictions
根据运转成果咱们能够看到返回了JSON数组,这里代表的意思分别是:'score'
:类似度;'label'
:标签和'box'
:开始坐标。
检查成果
但这样好像仅仅“机器”能够理解,在咱们看来是不行直观的,那让咱们再来一点点“小魔法”:
from PIL import ImageDraw # 引进“写模块"
draw = ImageDraw.Draw(img)
for prediction in predictions: # predictions里放着刚刚的JSON数组
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)
# 在辨认出来标签物品的始末坐标标出赤色方框,宽度为1
draw.text((xmin, ymin), f"{label}:{round(score, 2)}", fill="red")
# 在左上角写上标签名和类似值(保留两位小数),字体为赤色
img
怎么样?现在是不是就足够直观了,咱们能够直接经过肉眼看见“机器”展示给咱们符号出来的成果,甚至打上了红框并打上了标签!得到这样的成果就阐明咱们的使命宣告成功啦~
结语
今天带咱们体会的功用相信咱们在生活中也能感遭到各式各样的运用:像是相机的面部捕捉啦;手机的人脸辨认啦;车库门口的车牌辨认啦等等等等。AI已经越来越融入咱们的生活了,如果喜欢的话还希望点点重视,之后持续给咱们带来更多有趣的文章♡!