图像物体检测与描述
Florence-2-large是微软出品的开源多功能图像标记模型,可以辅助标记图像内容、生成图像描述、识别目标等。
得益于大模型架构,Florence-2还支持使用提示词定向标记图中特定对象。
Gitee AI的Serverless API服务 优化并提供了该模型开箱即用的API,将繁杂的功能整合为更易使用的接口。
您可以通过界面快速体验接口能力。下面将基于代码调用介绍该接口的能力。
该模型仅支持英文输入输出,因此无论是输入的提示词还是识别的内容和输出的结果都将是英文的,任何其它语言的信息都会导致模型出现无法预计的输出结果。
准备工作
首先获取你的API Key,然后可定义请求函数如下。
接口的使用以Python代码为例,下面将分别演示“图像描述”与“目标识别”两个功能项的使用方法。在开始前先定义请求函数 如下:
import requests
headers = {
"Authorization": "Bearer <your api token>",
}
#用于请求图像描述的url
url_caption = "https://ai.gitee.com/v1/images/caption"
#用于请求目标识别的url
url_object_detection = "https://ai.gitee.com/v1/images/object-detection"
def query(url, payload):
files = {
"image": (payload["image"], open(payload["image"], "rb"))
}
data = {key: payload[key] for key in payload if key not in files}
response = requests.post(url, headers=headers, files=files, data=data)
return response.json()
下文中使用的图片示例为:
1. 图像描述生成
该功能可以获取用户输入的图片的自然语言描述。 使用上文的query函数,发起请求如下:
output = query(url_caption, {
"model": "Florence-2-large",
"image": "path/to/image.jpg",
"caption_level": 0
})
请求参数说明:
image
:需要进行描述的图片,仅支持输入一张图片。caption_level
:需要描述图片的详细程度,支持0、1、2三个等级,等级越高则描述得越详细,输出的字数越多。等级可根据需求进行调整,若不填写则采用默认等级0。
设置 caption_level=0
时输出如下:
A woman and a little girl walking down a dirt road.
设置 caption_level=1
时输出如下:
The image shows a woman and a little girl walking down a dirt road, hand in hand, with a horse in the background. The sky is filled with clouds and the ground is covered with lush green grass. The image is animated, giving it a whimsical feel.
设置 caption_level=2
时输出如下:
The image is an illustration of a mother and daughter walking hand in hand in a field. The mother is wearing a long white dress with pink flowers on it and has long blonde hair. She is holding the hand of the daughter, who is also wearing a purple dress. They are both smiling and appear to be enjoying each other's company. In the background, there is a fence with wooden posts and a horse grazing on the grass. The sky is filled with fluffy white clouds and the sun is shining brightly, creating a warm glow. The field is covered in yellow flowers and there are hills in the distance. The overall mood of the image is peaceful and serene.
从结果中可以直观的感受到caption_level
级别越高,描述结果越详细,您可根据需求选择不同的等级。
2. 目标识别
该功能通过在请求中输入一张图片,获得该图片主体目标的标签和位置信息。
与传统的目标识别不同的是 ,大模型的目标识别不提供标签的置信度,每个结果都是确定的。但是大模型支持输入提示词参数 prompt
进行辅助,并且能有更详细的标签描述,不需要提前预置标签。
以是否输入 prompt
作为区分,该功能可分为"传统目标识别"和“指令目标识别”
2.1 传统目标识别
该识别方法类似传统的目标识别任务,能够响应标签与目标矩形的坐标。基于该方法的请求代码如下:
代码中仅使用 image
和 caption_level
两个参数:
image
:需要进行描述的图片,仅支持输入一张图片。caption_level
:需要描述图片的详细程度,支持0、1两个个等级,等级越高则描述得越详细,输出的字数越多。等级可根据需求进行调整,若不填写则采用默认等级0。
使用如下的请求代码:
output = query({
"model": "Florence-2-large",
"image": "path/to/image.jpg",
"caption_level": 0
})
请求结果格式如下:
{
"num_objects": int,
"objects":[
{
"label": str,
"bbox": [x1, y1, x2, y2]
}, ...
]
}
是一个json格式,详细说明如下:
num_objects
:识别到图中目标的数量。objects
:一个数组对象, 数组中的每个对象包含了每个目标的标签和位置。label
:该目标的标签信息。bbox
:该目标的位置,是一个四元组,可两两分组为(x1,y1), (x2,y2)
,分别表示矩形框左上角和右下角的坐标。 我们使用相同的示例图片。
设置 caption_level=0
时输出如下:
{
"num_objects":5,
"objects":[
{
"label":"animal",
"bbox":[58.880001068115234,598.3999633789062,201.21600341796875,748.1599731445312]
},
{
"label":"girl",
"bbox":[321.0240173339844,914.5599975585938,478.72003173828125,1203.8399658203125]
},
{
"label":"human face",
"bbox":[501.2480163574219,753.2799682617188,545.280029296875,795.5199584960938]
},
{
"label":"human face",
"bbox":[379.39202880859375,929.9199829101562,414.2080078125,977.2799682617188]
},
{
"label":"woman",
"bbox":[427.52001953125,700.7999877929688,804.35205078125,1238.4000244140625]
}
]
}
设置 caption_level=1
时输出如下:
{
"num_objects":4,
"objects":[
{
"label":"girl in white dress with pink flowers in field at sunset",
"bbox":[427.52001953125,700.7999877929688,805.3760375976562,1238.4000244140625]
},
{
"label":"girl with red hair and blue dress in field with wooden fence",
"bbox":[311.8080139160156,914.5599975585938,479.7440185546875,1203.8399658203125]
},
{
"label":"brown horse with blonde mane and tail in field",
"bbox":[58.880001068115234,598.3999633789062,201.21600341796875,748.1599731445312]
},
{
"label":"human face",
"bbox":[501.2480163574219,753.2799682617188,545.280029296875,795.5199584960938]
}
]
}
值得注意的是,设置不同的 caption_level
可能会出现