Zum Inhalt springen

YOLO Inferenz-API

Mit der YOLO Inference API kannst du über eine RESTful API auf die YOLOv8 Objekterkennungsfunktionen zugreifen. Damit kannst du die Objekterkennung auf Bildern ausführen, ohne die YOLOv8 Umgebung lokal installieren und einrichten zu müssen.

Inferenz API Screenshot Screenshot des Abschnitts Inferenz-API auf der Registerkarte Vorschau des trainierten Modells.



Pass auf: Ultralytics HUB Inference API Komplettlösung

API URL

Die API-URL ist die Adresse, die für den Zugriff auf die YOLO Inference API verwendet wird. In diesem Fall lautet die Basis-URL:

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

Beispiel für die Verwendung in Python

Um mit dem angegebenen Modell und API-Schlüssel über Python auf die YOLO Inference API zuzugreifen, kannst du den folgenden Code verwenden:

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 diesem Beispiel ersetzen Sie API_KEY mit deinem aktuellen API-Schlüssel, MODEL_ID mit der gewünschten Modell-ID, und path/to/image.jpg mit dem Pfad zu dem Bild, das du analysieren willst.

Beispiel für die Verwendung mit cURL

Du kannst die YOLO Inference API mit Client-URL (cURL) verwenden, indem du die curl Befehl. Ersetze API_KEY mit deinem aktuellen API-Schlüssel, MODEL_ID mit der gewünschten Modell-ID, und image.jpg mit dem Pfad zu dem Bild, das du analysieren willst:

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"

Übergabe von Argumenten

Dieser Befehl sendet eine POST-Anfrage an die YOLO Inference API mit den angegebenen MODEL_ID in der URL und die API_KEY in der Anfrage headerszusammen mit der Bilddatei, die durch @path/to/image.jpg.

Hier ist ein Beispiel für die Übergabe der size, confidence, und iou Argumente über die API-URL mit der Option requests Bibliothek 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 diesem Beispiel wird die data Wörterbuch enthält die Abfrageargumente size, confidence, und ioudie der API sagt, dass die Inferenz bei Bildgröße 640 mit Konfidenz- und IoU-Schwellenwerten von 0,25 und 0,45 durchgeführt werden soll.

Dadurch werden die Abfrageparameter zusammen mit der Datei in der POST-Anfrage gesendet. In der folgenden Tabelle findest du eine vollständige Liste der verfügbaren Inferenzargumente.

Inferenz Argument Standard Typ Anmerkungen
size 640 int Gültiger Bereich ist 32 - 1280 Pixel
confidence 0.25 float Gültiger Bereich ist 0.01 - 1.0
iou 0.45 float Gültiger Bereich ist 0.0 - 0.95
url '' str optionale Bild-URL, wenn keine Bilddatei übergeben wird
normalize False bool

Rückgabe JSON-Format

Die YOLO Inference API gibt eine JSON-Liste mit den Erkennungsergebnissen zurück. Das Format der JSON-Liste ist dasselbe wie das, das lokal von der results[0].tojson() Befehl.

Die JSON-Liste enthält Informationen über die gefundenen Objekte, ihre Koordinaten, Klassen und Vertrauenswerte.

Modellformat erkennen

YOLO Erkennungsmodelle, wie zum Beispiel yolov8n.ptkönnen JSON-Antworten von Local Inference, cURL Inference und Python Inference zurückgegeben werden. Alle diese Methoden erzeugen das gleiche JSON-Antwortformat.

Modell erkennen JSON Antwort

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

Segment Modell Format

YOLO Segmentierungsmodelle, wie zum Beispiel yolov8n-seg.ptkönnen JSON-Antworten von Local Inference, cURL Inference und Python Inference zurückgegeben werden. Alle diese Methoden erzeugen das gleiche JSON-Antwortformat.

Segment Modell JSON Antwort

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

Hinweis segments x und y Längen können von einem Objekt zum anderen variieren. Größere oder komplexere Objekte können mehr Segmentpunkte haben.

{
  "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 Model Format

YOLO Posenmodelle, wie zum Beispiel yolov8n-pose.ptkönnen JSON-Antworten von Local Inference, cURL Inference und Python Inference zurückgegeben werden. Alle diese Methoden erzeugen das gleiche JSON-Antwortformat.

Pose Model JSON Antwort

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

Beachte, dass die mit COCO-Keypoints vortrainierten Modelle 17 menschliche Keypoints haben werden. Die visible Teil der Keypoints zeigt an, ob ein Keypoint sichtbar oder verdeckt ist. Verdeckte Keypoints können sich außerhalb des Bildes befinden oder nicht sichtbar sein, z. B. wenn die Augen einer Person von der Kamera abgewandt sind.

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



Erstellt am 2024-01-23, Aktualisiert am 2024-03-06
Autoren: RizwanMunawar (1), glenn-jocher (3), priytosh-tripathi (1)

Kommentare