Перейти к содержимому

YOLO API для работы с выводами

YOLO Inference API позволяет тебе получить доступ к возможностям обнаружения объектов YOLOv8 через RESTful API. Это позволяет запускать обнаружение объектов на изображениях без необходимости устанавливать и настраивать YOLOv8 окружение локально.

Скриншот Inference API Скриншот раздела Inference API во вкладке Preview обученной модели.

URL-АДРЕС API

URL-адрес API - это адрес, используемый для доступа к YOLO Inference API. В данном случае базовым URL является:

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

Пример использования в Python

Чтобы получить доступ к YOLO Inference API с указанной моделью и ключом API с помощью 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())

В этом примере замените API_KEY с твоим настоящим ключом API, MODEL_ID с нужным идентификатором модели, и path/to/image.jpg укажи путь к изображению, которое ты хочешь проанализировать.

Пример использования с cURL

Ты можешь использовать YOLO Inference API с клиентским URL (cURL), используя curl Команда. Замените API_KEY с твоим настоящим ключом API, MODEL_ID с нужным идентификатором модели, и image.jpg укажи путь к изображению, которое ты хочешь проанализировать:

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"

Передача аргументов

Эта команда отправляет POST-запрос на YOLO Inference API с указанным MODEL_ID в URL и API_KEY в запросе headers, вместе с файлом изображения, указанным @path/to/image.jpg.

Вот пример передачи size, confidence, и iou аргументы через URL API, используя requests библиотека в 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())

В этом примере data Словарь содержит аргументы запроса size, confidence, и iouЭто говорит API о том, что нужно выполнить вывод при размере изображения 640 с порогами уверенности и IoU, равными 0,25 и 0,45.

Это позволит отправить параметры запроса вместе с файлом в POST-запросе. Полный список доступных аргументов для вывода смотри в таблице ниже.

Аргумент для умозаключений По умолчанию Тип Примечания
size 640 int допустимый диапазон 32 - 1280 пиксели
confidence 0.25 float допустимый диапазон 0.01 - 1.0
iou 0.45 float допустимый диапазон 0.0 - 0.95
url '' str Необязательный URL-адрес изображения, если передан не файл изображения
normalize False bool

Верни формат JSON

YOLO Inference API возвращает JSON-список с результатами обнаружения. Формат JSON-списка будет таким же, как и у локального списка, созданного с помощью программы results[0].tojson() Командуй.

JSON-список содержит информацию об обнаруженных объектах, их координатах, классах и баллах доверия.

Определите формат модели

YOLO модели обнаружения, такие как yolov8n.ptТы можешь возвращать JSON-ответы от локальных выводов, выводов cURL и выводов Python . Все эти методы выдают один и тот же формат ответа JSON.

Обнаружить модель JSON-ответа

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

Формат модели сегмента

YOLO Модели сегментации, такие как yolov8n-seg.ptТы можешь возвращать JSON-ответы от локальных выводов, выводов cURL и выводов Python . Все эти методы выдают один и тот же формат ответа JSON.

Сегментная модель JSON-ответа

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

Примечание segments x и y Длина сегментов может варьироваться от предмета к предмету. Большие или более сложные предметы могут иметь больше точек сегмента.

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

Формат модели позы

YOLO Модели поз, такие как yolov8n-pose.ptТы можешь возвращать JSON-ответы от локальных выводов, выводов cURL и выводов Python . Все эти методы выдают один и тот же формат ответа JSON.

JSON-ответ модели позы

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

Обратите внимание, что предварительно обученные модели COCO-keypoints будут иметь 17 человеческих ключевых точек. Сайт visible часть ключевых точек указывает, видна ли ключевая точка или заслонена. Затененные ключевые точки могут находиться за пределами изображения или быть не видны, например, глаза человека, обращенные в сторону от камеры.

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



Создано 2024-01-23, Обновлено 2024-02-13
Авторы: glenn-jocher (3), priytosh-tripathi (1)

Комментарии