Vai al contenuto

YOLO API di inferenza

L'API di inferenza di YOLO ti permette di accedere alle funzionalità di rilevamento degli oggetti di YOLOv8 tramite un'API RESTful. Questo ti permette di eseguire il rilevamento degli oggetti sulle immagini senza dover installare e configurare localmente l'ambiente YOLOv8 .

Screenshot dell'API di inferenza Schermata della sezione API di inferenza nella scheda Anteprima del modello addestrato.

URL API

L'URL dell'API è l'indirizzo utilizzato per accedere all'API di YOLO Inference. In questo caso, l'URL di base è:

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

Esempio di utilizzo in Python

Per accedere all'API di YOLO Inference con il modello e la chiave API specificati utilizzando Python, puoi utilizzare il seguente codice:

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())

In questo esempio, sostituisci API_KEY con la tua chiave API attuale, MODEL_ID con l'ID del modello desiderato e path/to/image.jpg con il percorso dell'immagine che vuoi analizzare.

Esempio di utilizzo con cURL

Puoi utilizzare l'API di inferenza di YOLO con un URL client (cURL) utilizzando l'opzione curl comando. Sostituisci API_KEY con la tua chiave API attuale, MODEL_ID con l'ID del modello desiderato e image.jpg con il percorso dell'immagine che vuoi analizzare:

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"

Passaggio di argomenti

Questo comando invia una richiesta POST all'API di inferenza di YOLO con il codice specificato MODEL_ID nell'URL e l'opzione API_KEY nella richiesta headersinsieme al file immagine specificato da @path/to/image.jpg.

Ecco un esempio di passaggio dell'opzione size, confidence, e iou tramite l'URL dell'API utilizzando l'opzione requests in 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())

In questo esempio, il data contiene gli argomenti della query size, confidence, e iouche indica all'API di eseguire l'inferenza alla dimensione dell'immagine 640 con soglie di confidenza e IoU di 0,25 e 0,45.

Questo invia i parametri della query insieme al file nella richiesta POST. Vedi la tabella sottostante per un elenco completo degli argomenti di inferenza disponibili.

Argomento dell'inferenza Predefinito Tipo Note
size 640 int L'intervallo valido è 32 - 1280 pixel
confidence 0.25 float L'intervallo valido è 0.01 - 1.0
iou 0.45 float L'intervallo valido è 0.0 - 0.95
url '' str URL dell'immagine opzionale se non viene passato un file immagine
normalize False bool

Restituisce il formato JSON

L'API YOLO Inference restituisce un elenco JSON con i risultati del rilevamento. Il formato dell'elenco JSON sarà lo stesso di quello prodotto localmente dall'applicazione results[0].tojson() comando.

L'elenco JSON contiene informazioni sugli oggetti rilevati, le loro coordinate, le classi e i punteggi di confidenza.

Rileva il formato del modello

YOLO modelli di rilevamento, come yolov8n.ptpuò restituire risposte JSON dall'inferenza locale, dall'inferenza cURL e dall'inferenza Python . Tutti questi metodi producono lo stesso formato di risposta JSON.

Rileva la risposta JSON del modello

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
      }
    }
  ]
}

Formato del modello di segmento

YOLO modelli di segmentazione, come yolov8n-seg.ptpuò restituire risposte JSON dall'inferenza locale, dall'inferenza cURL e dall'inferenza Python . Tutti questi metodi producono lo stesso formato di risposta JSON.

Risposta JSON del modello di segmento

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())

Nota segments x e y Le lunghezze possono variare da un oggetto all'altro. Gli oggetti più grandi o più complessi possono avere più punti di 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 modello di posa

YOLO modelli di posa, come yolov8n-pose.ptpuò restituire risposte JSON dall'inferenza locale, dall'inferenza cURL e dall'inferenza Python . Tutti questi metodi producono lo stesso formato di risposta JSON.

Risposta JSON del modello di posa

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())

Nota: i modelli preaddestrati COCO-keypoints avranno 17 keypoints umani. Il visible parte dei punti chiave indica se un punto chiave è visibile o oscurato. I punti chiave oscurati possono trovarsi all'esterno dell'immagine o non essere visibili, ad esempio gli occhi di una persona rivolti verso la telecamera.

{
  "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
          ...
        ]
      }
    }
  ]
}



Creato 2024-01-23, Aggiornato 2024-02-13
Autori: glenn-jocher (3), priytosh-tripathi (1)

Commenti