Skip to content

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 l'API d'inférence 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 :

https://api.ultralytics.com/v1/predict

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 headersainsi que le fichier image spécifié par @path/to/image.jpg.

Voici un exemple de passage de l'élément size, confidenceet 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, confidenceet iouqui 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.ptpeut 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

from ultralytics import YOLO

# Load model
model = YOLO('yolov8n.pt')

# Run inference
results = model('image.jpg')

# Print image.jpg results in JSON format
print(results[0].tojson())
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"
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.ptpeut 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

from ultralytics import YOLO

# Load model
model = YOLO('yolov8n-seg.pt')

# Run inference
results = model('image.jpg')

# Print image.jpg results in JSON format
print(results[0].tojson())
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"
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.ptpeut 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

from ultralytics import YOLO

# Load model
model = YOLO('yolov8n-seg.pt')

# Run inference
results = model('image.jpg')

# Print image.jpg results in JSON format
print(results[0].tojson())
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"
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)

Commentaires