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 .
Schermata della sezione API di inferenza nella scheda Anteprima del modello addestrato.
Guarda: Ultralytics Passaggio all'API di inferenza HUB
URL API
L'URL dell'API è l'indirizzo utilizzato per accedere all'API di YOLO Inference. In questo caso, l'URL di base è:
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 headers
insieme 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 iou
che 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.pt
può 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
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.pt
può 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
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.pt
può 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
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-03-06
Autori: RizwanMunawar (1), glenn-jocher (3), priytosh-tripathi (1)