YOLO API d'inférence
L'API d'inférence YOLO te permet d'accéder aux capacités de détection d'objets de YOLOv8 via une API RESTful. Cela te permet d'exécuter la détection d'objets sur des images sans avoir besoin d'installer et de configurer l'environnement YOLOv8 localement.
Capture d'écran de la section API d'inférence dans l'onglet Aperçu du modèle formé.
Regarde : Ultralytics Présentation de l'API d'inférence HUB
URL DE L'API
L'URL de l'API est l'adresse utilisée pour accéder à l'API d'inférence YOLO . Dans ce cas, l'URL de base est :
Exemple d'utilisation en Python
Pour accéder à l'API d'inférence YOLO avec le modèle et la clé API spécifiés en utilisant Python, tu peux utiliser le code suivant :
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())
Dans cet exemple, remplace API_KEY
avec ta véritable clé API, MODEL_ID
avec l'ID du modèle désiré, et path/to/image.jpg
avec le chemin d'accès à l'image que tu veux analyser.
Exemple d'utilisation avec cURL
Tu peux utiliser l'API d'inférence YOLO avec l'URL du client (cURL) en utilisant l'option curl
commande. Remplacer API_KEY
avec ta véritable clé API, MODEL_ID
avec l'ID du modèle désiré, et image.jpg
avec le chemin d'accès à l'image que tu veux analyser :
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"
Passer des arguments
Cette commande envoie une requête POST à l'API d'inférence YOLO avec les données spécifiées. MODEL_ID
dans l'URL et le API_KEY
dans la demande headers
ainsi que le fichier image spécifié par @path/to/image.jpg
.
Voici un exemple de passage de l'élément size
, confidence
et iou
via l'URL de l'API Ă l'aide de l'option requests
bibliothèque à 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())
Dans cet exemple, le data
Le dictionnaire contient les arguments de la requĂŞte size
, confidence
et iou
qui indique à l'API d'exécuter l'inférence à la taille d'image 640 avec des seuils de confiance et d'IoU de 0,25 et 0,45.
Cela enverra les paramètres de la requête avec le fichier dans la demande POST. Tu trouveras dans le tableau ci-dessous la liste complète des arguments d'inférence disponibles.
Argument de déduction | Défaut | Type | Notes |
---|---|---|---|
size |
640 |
int |
La plage valide est 32 - 1280 pixels |
confidence |
0.25 |
float |
La plage valide est 0.01 - 1.0 |
iou |
0.45 |
float |
La plage valide est 0.0 - 0.95 |
url |
'' |
str |
URL optionnelle de l'image si aucun fichier image n'est transmis |
normalize |
False |
bool |
Retourne le format JSON
L'API YOLO Inference renvoie une liste JSON contenant les résultats de la détection. Le format de la liste JSON sera le même que celui produit localement par l'API Inference. results[0].tojson()
commande.
La liste JSON contient des informations sur les objets détectés, leurs coordonnées, leurs classes et leurs scores de confiance.
Détecter le format du modèle
YOLO modèles de détection, tels que yolov8n.pt
peut renvoyer des réponses JSON à partir de l'inférence locale, de l'inférence cURL et de l'inférence Python . Toutes ces méthodes produisent le même format de réponse JSON.
Réponse JSON du modèle de détection
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
}
}
]
}
Format du modèle de segment
YOLO les modèles de segmentation, tels que yolov8n-seg.pt
peut renvoyer des réponses JSON à partir de l'inférence locale, de l'inférence cURL et de l'inférence Python . Toutes ces méthodes produisent le même format de réponse JSON.
Modèle de segment Réponse 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())
Note segments
x
et y
Les longueurs peuvent varier d'un objet Ă l'autre. Les objets plus grands ou plus complexes peuvent avoir plus de points de segmentation.
{
"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
...
]
}
}
]
}
Pose Modèle Format
YOLO modèles de pose, tels que yolov8n-pose.pt
peut renvoyer des réponses JSON à partir de l'inférence locale, de l'inférence cURL et de l'inférence Python . Toutes ces méthodes produisent le même format de réponse JSON.
Modèle de pose Réponse 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())
Remarque Les modèles pré-entraînés COCO-keypoints auront 17 points clés humains. Les visible
La partie des points clés indique si un point clé est visible ou obscurci. Les points clés masqués peuvent se trouver à l'extérieur de l'image ou ne pas être visibles, par exemple les yeux d'une personne tournés vers l'extérieur de la caméra.
{
"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
...
]
}
}
]
}
Créé le 2024-01-23, Mis à jour le 2024-03-06
Auteurs : RizwanMunawar (1), glenn-jocher (3), priytosh-tripathi (1)