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.

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 API anweist, die Inferenz bei Bildgr├Â├če 640 mit Konfidenz- und IoU-Schwellenwerten von 0,25 und 0,45 durchzuf├╝hren.

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 2024-01-23, Aktualisiert 2024-02-13
Autoren: glenn-jocher (3), priytosh-tripathi (1)

Kommentare