YOLO API de inferencia
La API de inferencia YOLO te permite acceder a las capacidades de detección de objetos de YOLOv8 mediante una API RESTful. Esto te permite ejecutar la detección de objetos en imágenes sin necesidad de instalar y configurar localmente el entorno YOLOv8 .
Captura de pantalla de la sección API de inferencia en la pestaña Vista previa del modelo entrenado.
Observa: Ultralytics Paseo por la API de Inferencia HUB
URL API
La URL de la API es la dirección utilizada para acceder a la API de inferencia YOLO . En este caso, la URL base es
Ejemplo de uso en Python
Para acceder a la API de inferencia YOLO con el modelo y la clave de API especificados mediante Python, puedes utilizar el código siguiente:
import requests
# API URL, use actual MODEL_ID
url = f"https://api.ultralytics.com/v1/predict/MODEL_ID"
# Headers, use actual API_KEY
headers = {"x-api-key": "API_KEY"}
# Inference arguments (optional)
data = {"size": 640, "confidence": 0.25, "iou": 0.45}
# Load image and send request
with open("path/to/image.jpg", "rb") as image_file:
files = {"image": image_file}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())
En este ejemplo, sustituye API_KEY
con tu clave API real, MODEL_ID
con el ID del modelo deseado, y path/to/image.jpg
con la ruta a la imagen que quieres analizar.
Ejemplo de uso con cURL
Puedes utilizar la API de inferencia YOLO con URL de cliente (cURL) utilizando la función curl
mando. Sustituye API_KEY
con tu clave API real, MODEL_ID
con el ID del modelo deseado, y image.jpg
con la ruta a la imagen que quieres analizar:
curl -X POST "https://api.ultralytics.com/v1/predict/MODEL_ID" \
-H "x-api-key: API_KEY" \
-F "image=@/path/to/image.jpg" \
-F "size=640" \
-F "confidence=0.25" \
-F "iou=0.45"
Pasar argumentos
Este comando envía una solicitud POST a la API de inferencia YOLO con la información especificada MODEL_ID
en la URL y el API_KEY
en la solicitud headers
junto con el archivo de imagen especificado por @path/to/image.jpg
.
Aquí tienes un ejemplo de cómo pasar el size
, confidence
y iou
a través de la URL de la API utilizando requests
biblioteca en Python:
import requests
# API URL, use actual MODEL_ID
url = f"https://api.ultralytics.com/v1/predict/MODEL_ID"
# Headers, use actual API_KEY
headers = {"x-api-key": "API_KEY"}
# Inference arguments (optional)
data = {"size": 640, "confidence": 0.25, "iou": 0.45}
# Load image and send request
with open("path/to/image.jpg", "rb") as image_file:
files = {"image": image_file}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())
En este ejemplo, la data
contiene los argumentos de la consulta size
, confidence
y iou
que indica a la API que ejecute la inferencia en el tamaño de imagen 640 con umbrales de confianza e IoU de 0,25 y 0,45.
Esto enviará los parámetros de consulta junto con el archivo en la petición POST. Consulta la tabla siguiente para obtener una lista completa de los argumentos de inferencia disponibles.
Argumento de inferencia | Por defecto | Tipo | Notas |
---|---|---|---|
size |
640 |
int |
El intervalo válido es 32 - 1280 píxeles |
confidence |
0.25 |
float |
El intervalo válido es 0.01 - 1.0 |
iou |
0.45 |
float |
El intervalo válido es 0.0 - 0.95 |
url |
'' |
str |
URL opcional de la imagen si no se pasa un archivo de imagen |
normalize |
False |
bool |
Devuelve el formato JSON
La API de inferencia YOLO devuelve una lista JSON con los resultados de la detección. El formato de la lista JSON será el mismo que el producido localmente por la función results[0].tojson()
mando.
La lista JSON contiene información sobre los objetos detectados, sus coordenadas, clases y puntuaciones de confianza.
Detectar formato de modelo
YOLO modelos de detección, como yolov8n.pt
, puede devolver respuestas JSON de la inferencia local, la inferencia cURL y la inferencia Python . Todos estos métodos producen el mismo formato de respuesta JSON.
Detectar modelo de respuesta JSON
import requests
# API URL, use actual MODEL_ID
url = f"https://api.ultralytics.com/v1/predict/MODEL_ID"
# Headers, use actual API_KEY
headers = {"x-api-key": "API_KEY"}
# Inference arguments (optional)
data = {"size": 640, "confidence": 0.25, "iou": 0.45}
# Load image and send request
with open("path/to/image.jpg", "rb") as image_file:
files = {"image": image_file}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())
{
"success": True,
"message": "Inference complete.",
"data": [
{
"name": "person",
"class": 0,
"confidence": 0.8359682559967041,
"box": {
"x1": 0.08974208831787109,
"y1": 0.27418340047200523,
"x2": 0.8706787109375,
"y2": 0.9887352837456598
}
},
{
"name": "person",
"class": 0,
"confidence": 0.8189555406570435,
"box": {
"x1": 0.5847355842590332,
"y1": 0.05813225640190972,
"x2": 0.8930277824401855,
"y2": 0.9903111775716146
}
},
{
"name": "tie",
"class": 27,
"confidence": 0.2909725308418274,
"box": {
"x1": 0.3433395862579346,
"y1": 0.6070465511745877,
"x2": 0.40964522361755373,
"y2": 0.9849439832899306
}
}
]
}
Formato del modelo de segmento
YOLO modelos de segmentación, como yolov8n-seg.pt
, puede devolver respuestas JSON de la inferencia local, la inferencia cURL y la inferencia Python . Todos estos métodos producen el mismo formato de respuesta JSON.
Modelo de segmento Respuesta JSON
import requests
# API URL, use actual MODEL_ID
url = f"https://api.ultralytics.com/v1/predict/MODEL_ID"
# Headers, use actual API_KEY
headers = {"x-api-key": "API_KEY"}
# Inference arguments (optional)
data = {"size": 640, "confidence": 0.25, "iou": 0.45}
# Load image and send request
with open("path/to/image.jpg", "rb") as image_file:
files = {"image": image_file}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())
Nota segments
x
y y
Las longitudes pueden variar de un objeto a otro. Los objetos más grandes o complejos pueden tener más puntos de segmento.
{
"success": True,
"message": "Inference complete.",
"data": [
{
"name": "person",
"class": 0,
"confidence": 0.856913149356842,
"box": {
"x1": 0.1064866065979004,
"y1": 0.2798851860894097,
"x2": 0.8738358497619629,
"y2": 0.9894873725043403
},
"segments": {
"x": [
0.421875,
0.4203124940395355,
0.41718751192092896
...
],
"y": [
0.2888889014720917,
0.2916666567325592,
0.2916666567325592
...
]
}
},
{
"name": "person",
"class": 0,
"confidence": 0.8512625694274902,
"box": {
"x1": 0.5757311820983887,
"y1": 0.053943040635850696,
"x2": 0.8960096359252929,
"y2": 0.985154045952691
},
"segments": {
"x": [
0.7515624761581421,
0.75,
0.7437499761581421
...
],
"y": [
0.0555555559694767,
0.05833333358168602,
0.05833333358168602
...
]
}
},
{
"name": "tie",
"class": 27,
"confidence": 0.6485961675643921,
"box": {
"x1": 0.33911995887756347,
"y1": 0.6057066175672743,
"x2": 0.4081430912017822,
"y2": 0.9916408962673611
},
"segments": {
"x": [
0.37187498807907104,
0.37031251192092896,
0.3687500059604645
...
],
"y": [
0.6111111044883728,
0.6138888597488403,
0.6138888597488403
...
]
}
}
]
}
Formato del modelo de pose
YOLO modelos de pose, como yolov8n-pose.pt
, puede devolver respuestas JSON de la inferencia local, la inferencia cURL y la inferencia Python . Todos estos métodos producen el mismo formato de respuesta JSON.
Modelo Pose Respuesta JSON
import requests
# API URL, use actual MODEL_ID
url = f"https://api.ultralytics.com/v1/predict/MODEL_ID"
# Headers, use actual API_KEY
headers = {"x-api-key": "API_KEY"}
# Inference arguments (optional)
data = {"size": 640, "confidence": 0.25, "iou": 0.45}
# Load image and send request
with open("path/to/image.jpg", "rb") as image_file:
files = {"image": image_file}
response = requests.post(url, headers=headers, files=files, data=data)
print(response.json())
Nota Los modelos preentrenados con puntos clave COCO tendrán 17 puntos clave humanos. La dirección visible
parte de los puntos clave indica si un punto clave está visible u oscurecido. Los puntos clave oscurecidos pueden estar fuera de la imagen o no ser visibles, por ejemplo, los ojos de una persona que miran en dirección contraria a la cámara.
{
"success": True,
"message": "Inference complete.",
"data": [
{
"name": "person",
"class": 0,
"confidence": 0.8439509868621826,
"box": {
"x1": 0.1125,
"y1": 0.28194444444444444,
"x2": 0.7953125,
"y2": 0.9902777777777778
},
"keypoints": {
"x": [
0.5058594942092896,
0.5103894472122192,
0.4920862317085266
...
],
"y": [
0.48964157700538635,
0.4643048942089081,
0.4465252459049225
...
],
"visible": [
0.8726999163627625,
0.653947651386261,
0.9130823612213135
...
]
}
},
{
"name": "person",
"class": 0,
"confidence": 0.7474289536476135,
"box": {
"x1": 0.58125,
"y1": 0.0625,
"x2": 0.8859375,
"y2": 0.9888888888888889
},
"keypoints": {
"x": [
0.778544008731842,
0.7976160049438477,
0.7530890107154846
...
],
"y": [
0.27595141530036926,
0.2378823608160019,
0.23644638061523438
...
],
"visible": [
0.8900790810585022,
0.789978563785553,
0.8974530100822449
...
]
}
}
]
}
Creado 2024-01-23, Actualizado 2024-03-06
Autores: RizwanMunawar (1), glenn-jocher (3), priytosh-tripathi (1)