Overslaan naar inhoud

YOLO Inferentie API

Met de YOLO Inference API heb je toegang tot de YOLOv8 objectdetectiemogelijkheden via een RESTful API. Hierdoor kun je objectdetectie uitvoeren op afbeeldingen zonder dat je de YOLOv8 omgeving lokaal hoeft te installeren en in te stellen.

Inferentie API Schermafbeelding Schermafbeelding van het gedeelte Inference API op het tabblad Voorbeeld van het getrainde model.



Kijken: Ultralytics HUB Inferentie API Doorloop

API URL

De API URL is het adres dat wordt gebruikt om toegang te krijgen tot de YOLO Inference API. In dit geval is de basis URL:

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

Voorbeeldgebruik in Python

Om toegang te krijgen tot de YOLO Inference API met het opgegeven model en de API-sleutel via Python kun je de volgende code gebruiken:

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

Vervang in dit voorbeeld API_KEY met je werkelijke API-sleutel, MODEL_ID met de gewenste model-ID, en path/to/image.jpg met het pad naar de afbeelding die je wilt analyseren.

Voorbeeldgebruik met cURL

Je kunt de YOLO Inference API met client URL (cURL) gebruiken door gebruik te maken van de curl commando. vervangen API_KEY met je werkelijke API-sleutel, MODEL_ID met de gewenste model-ID, en image.jpg met het pad naar de afbeelding die je wilt analyseren:

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"

Argumenten doorgeven

Dit commando stuurt een POST verzoek naar de YOLO Inference API met de gespecificeerde MODEL_ID in de URL en de API_KEY in het verzoek headerssamen met het afbeeldingsbestand gespecificeerd door @path/to/image.jpg.

Hier is een voorbeeld van het doorgeven van de size, confidenceen iou argumenten via de API URL met behulp van de requests bibliotheek 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 dit voorbeeld is de data woordenboek bevat de query argumenten size, confidenceen iou, waarmee de API wordt verteld om inferentie uit te voeren op afbeeldingsgrootte 640 met betrouwbaarheids- en IoU-drempelwaarden van 0,25 en 0,45.

Dit zal de query parameters meesturen met het bestand in het POST verzoek. Zie de tabel hieronder voor een volledige lijst van beschikbare inferentieargumenten.

Inferentie Argument Standaard Type Opmerkingen
size 640 int geldig bereik is 32 - 1280 pixels
confidence 0.25 float geldig bereik is 0.01 - 1.0
iou 0.45 float geldig bereik is 0.0 - 0.95
url '' str optionele afbeeldings URL als geen afbeeldingsbestand is doorgegeven
normalize False bool

JSON-indeling retourneren

De YOLO Inference API retourneert een JSON lijst met de detectieresultaten. Het formaat van de JSON lijst zal hetzelfde zijn als de lijst die lokaal wordt geproduceerd door de results[0].tojson() commando.

De JSON lijst bevat informatie over de gedetecteerde objecten, hun coördinaten, klassen en betrouwbaarheidsscores.

Modelformaat detecteren

YOLO detectiemodellen, zoals yolov8n.pt, kan JSON antwoorden teruggeven van lokale inferentie, cURL-inferentie en Python inferentie. Al deze methoden produceren hetzelfde JSON antwoordformaat.

Model JSON antwoord detecteren

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

Formaat segmentmodel

YOLO segmentatiemodellen, zoals yolov8n-seg.pt, kan JSON antwoorden teruggeven van lokale inferentie, cURL-inferentie en Python inferentie. Al deze methoden produceren hetzelfde JSON antwoordformaat.

Segmentmodel JSON antwoord

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

Opmerking segments x en y Lengtes kunnen variëren van object tot object. Grotere of complexere objecten kunnen meer segmentpunten hebben.

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

Formaat poseermodel

YOLO poseermodellen, zoals yolov8n-pose.pt, kan JSON antwoorden teruggeven van lokale inferentie, cURL-inferentie en Python inferentie. Al deze methoden produceren hetzelfde JSON antwoordformaat.

Stellingmodel JSON Antwoord

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

Opmerking COCO-keypoints voorgetrainde modellen hebben 17 menselijke keypoints. De visible deel van de toetspunten geeft aan of een toetspunt zichtbaar of verborgen is. Verdoezelde sleutelpunten kunnen zich buiten het beeld bevinden of niet zichtbaar zijn, bijvoorbeeld iemands ogen die van de camera wegkijken.

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



Gemaakt op 2024-01-23, Bijgewerkt op 2024-03-06
Auteurs: RizwanMunawar (1), glenn-jocher (3), priytosh-tripathi (1)

Reacties