跳转至内容

REST API 参考

Ultralytics Platform 提供全面的 REST API,用于以编程方式访问数据集、模型、训练和部署。

快速入门

# List your datasets
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://platform.ultralytics.com/api/datasets

# Run inference on a model
curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@image.jpg" \
  https://platform.ultralytics.com/api/models/MODEL_ID/predict

身份验证

所有 API 请求都需要通过 API 密钥进行身份验证。

获取 API 密钥

  1. 前往 设置 > API 密钥
  2. 点击 创建密钥
  3. 复制生成的密钥

有关详细说明,请参阅API 密钥

授权头

在所有请求中包含您的 API 密钥:

Authorization: Bearer ul_your_api_key_here

示例

curl -H "Authorization: Bearer ul_abc123..." \
  https://platform.ultralytics.com/api/datasets

基础 URL

所有 API 端点均使用:

https://platform.ultralytics.com/api

速率限制

计划请求数/分钟请求数/天
免费版601,000
Pro30050,000
企业版自定义自定义

响应中包含速率限制头:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 55
X-RateLimit-Reset: 1640000000

响应格式

所有响应均为 JSON 格式:

{
  "success": true,
  "data": { ... },
  "meta": {
    "page": 1,
    "limit": 20,
    "total": 100
  }
}

错误响应

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid dataset ID",
    "details": { ... }
  }
}

数据集 AP

列出数据集

GET /api/datasets

查询参数:

参数类型描述
page整型页码(默认值:1)
limit整型每页项目数(默认值:20)
task字符串按任务类型筛选

响应:

{
    "success": true,
    "data": [
        {
            "id": "dataset_abc123",
            "name": "my-dataset",
            "slug": "my-dataset",
            "task": "detect",
            "imageCount": 1000,
            "classCount": 10,
            "visibility": "private",
            "createdAt": "2024-01-15T10:00:00Z"
        }
    ]
}

获取数据集

GET /api/datasets/{datasetId}

创建数据集

POST /api/datasets

正文:

{
    "name": "my-dataset",
    "task": "detect",
    "description": "A custom detection dataset"
}

删除数据集

DELETE /api/datasets/{datasetId}

导出数据集

POST /api/datasets/{datasetId}/export

返回 NDJSON 格式的下载 URL。

在数据集上训练模型

GET /api/datasets/{datasetId}/models

返回使用此数据集训练的模型列表,展示数据集与其生成的模型之间的关联关系。

响应:

{
    "success": true,
    "data": [
        {
            "id": "model_abc123",
            "name": "experiment-1",
            "projectId": "project_xyz",
            "trainedAt": "2024-01-15T10:00:00Z",
            "metrics": {
                "mAP50": 0.85,
                "mAP50-95": 0.72
            }
        }
    ]
}

项目 AP

列出项目

GET /api/projects

获取项目

GET /api/projects/{projectId}

创建项目

POST /api/projects

正文:

{
    "name": "my-project",
    "description": "Detection experiments"
}

删除项目

DELETE /api/projects/{projectId}

模型 AP

列出模型

GET /api/models

查询参数:

参数类型描述
projectId字符串按项目筛选
task字符串按任务类型筛选

获取模型

GET /api/models/{modelId}

上传模型

POST /api/models

多部分表单:

字段类型描述
file文件模型 .pt 文件
projectId字符串目标项目
name字符串模型名称

删除模型

DELETE /api/models/{modelId}

下载模型

GET /api/models/{modelId}/files

返回模型文件的签名下载 URL。

运行推理

POST /api/models/{modelId}/predict

多部分表单:

字段类型描述
file文件图像文件
conf浮点数置信度阈值
iou浮点数IoU 阈值

响应:

{
    "success": true,
    "predictions": [
        {
            "class": "person",
            "confidence": 0.92,
            "box": { "x1": 100, "y1": 50, "x2": 300, "y2": 400 }
        }
    ]
}

训练 AP

开始训练

POST /api/training/start

正文:

{
    "modelId": "model_abc123",
    "datasetId": "dataset_xyz789",
    "epochs": 100,
    "imageSize": 640,
    "gpuType": "rtx-4090"
}

获取训练状态

GET /api/models/{modelId}/training

取消训练

DELETE /api/models/{modelId}/training

部署 AP

列出部署

GET /api/deployments

查询参数:

参数类型描述
modelId字符串按模型筛选

创建部署

POST /api/deployments

正文:

{
    "modelId": "model_abc123",
    "region": "us-central1",
    "minInstances": 0,
    "maxInstances": 10
}

获取部署

GET /api/deployments/{deploymentId}

启动部署

POST /api/deployments/{deploymentId}/start

停止部署

POST /api/deployments/{deploymentId}/stop

删除部署

DELETE /api/deployments/{deploymentId}

获取指标

GET /api/deployments/{deploymentId}/metrics

获取日志

GET /api/deployments/{deploymentId}/logs

查询参数:

参数类型描述
severity字符串信息, 警告, 错误
limit整型条目数量

导出 AP

列出导出

GET /api/exports

创建导出

POST /api/exports

正文:

{
    "modelId": "model_abc123",
    "format": "onnx"
}

支持的格式:

onnx, torchscript, openvino, tensorrt, coreml, tflite, saved_model, graphdef, paddle, ncnn, edgetpu, tfjs, mnn, rknn, imx, axelera, executorch

获取导出状态

GET /api/exports/{exportId}

活动 AP

track 并管理您账户的活动事件。

列出活动

GET /api/activity

查询参数:

参数类型描述
startDate字符串按起始日期筛选 (ISO)
endDate字符串按结束日期筛选 (ISO)
search字符串在事件消息中搜索

标记事件已读

POST /api/activity/mark-seen

归档事件

POST /api/activity/archive

回收站 AP

管理软删除资源(30 天保留期)。

列出回收站

GET /api/trash

恢复项目

POST /api/trash

正文:

{
    "itemId": "item_abc123",
    "type": "dataset"
}

清空回收站

POST /api/trash/empty

永久删除回收站中的所有项目。

账单 AP

管理积分和订阅。

获取余额

GET /api/billing/balance

响应:

{
    "success": true,
    "data": {
        "cashBalance": 5000000,
        "creditBalance": 20000000,
        "reservedAmount": 0,
        "totalBalance": 25000000
    }
}

微美元

所有金额均以微美元(1,000,000 微美元 = 1.00 美元)计价,以便进行精确核算。

获取使用情况摘要

GET /api/billing/usage-summary

返回套餐详情、限制和使用指标。

创建结账会话

POST /api/billing/checkout-session

正文:

{
    "amount": 25
}

创建用于购买积分(5-1000 美元)的 Stripe 结账会话。

创建订阅结账

POST /api/billing/subscription-checkout

创建用于专业版订阅的 Stripe 结账会话。

创建门户会话

POST /api/billing/portal-session

返回用于订阅管理的 Stripe 账单门户网址。

获取支付历史

GET /api/billing/payments

返回 Stripe 的支付交易列表。

存储 AP

获取存储信息

GET /api/storage

响应:

{
    "success": true,
    "data": {
        "used": 1073741824,
        "limit": 107374182400,
        "percentage": 1.0
    }
}

GDPR AP

用于数据导出和删除的 GDPR 合规性端点。

导出/删除账户数据

POST /api/gdpr

正文:

{
    "action": "export"
}
操作描述
export下载所有账户数据
delete删除账户及所有数据

不可逆操作

账户删除是永久性的,无法撤销。所有数据、模型和部署都将被删除。

AP 密钥 AP

列出 AP 密钥

GET /api/api-keys

创建 AP 密钥

POST /api/api-keys

正文:

{
    "name": "training-server",
    "scopes": ["training", "models"]
}

删除 AP 密钥

DELETE /api/api-keys/{keyId}

错误代码

代码描述
UNAUTHORIZEDAPI 密钥无效或缺失
FORBIDDEN权限不足
NOT_FOUND资源未找到
VALIDATION_ERROR请求数据无效
RATE_LIMITED请求过多
INTERNAL_ERROR服务器错误

Python

为便于集成,请使用 Ultralytics python 包。

安装与设置

pip install ultralytics

验证安装:

yolo check

软件包版本要求

平台集成需要ultralytics>=8.4.0。较低版本将无法与平台配合使用。

身份验证

方法1:CLI (推荐)

yolo settings api_key=YOUR_API_KEY

方法二:环境变量

export ULTRALYTICS_API_KEY=YOUR_API_KEY

方法三:在代码中

from ultralytics import settings

settings.api_key = "YOUR_API_KEY"

使用平台数据集

包含以下内容的参考数据集: ul:// 统一资源标识符:

from ultralytics import YOLO

model = YOLO("yolo11n.pt")

# Train on your Platform dataset
model.train(
    data="ul://your-username/your-dataset",
    epochs=100,
    imgsz=640,
)

URI格式:

ul://{username}/{resource-type}/{name}

Examples:
ul://john/datasets/coco-custom     # Dataset
ul://john/my-project               # Project
ul://john/my-project/exp-1         # Specific model
ul://ultralytics/yolo26/yolo26n    # Official model

推送至平台

将结果发送至平台项目:

from ultralytics import YOLO

model = YOLO("yolo11n.pt")

# Results automatically sync to Platform
model.train(
    data="coco8.yaml",
    epochs=100,
    project="ul://your-username/my-project",
    name="experiment-1",
)

同步内容:

  • 训练指标(实时)
  • 最终模型权重
  • 验证图
  • 控制台输出
  • 系统指标

API示例

从平台加载模型:

# Your own model
model = YOLO("ul://username/project/model-name")

# Official model
model = YOLO("ul://ultralytics/yolo26/yolo26n")

运行推理:

results = model("image.jpg")

# Access results
for r in results:
    boxes = r.boxes  # Detection boxes
    masks = r.masks  # Segmentation masks
    keypoints = r.keypoints  # Pose keypoints
    probs = r.probs  # Classification probabilities

导出模型:

# Export to ONNX
model.export(format="onnx", imgsz=640, half=True)

# Export to TensorRT
model.export(format="engine", imgsz=640, half=True)

# Export to CoreML
model.export(format="coreml", imgsz=640)

验证:

metrics = model.val(data="ul://username/my-dataset")

print(f"mAP50: {metrics.box.map50}")
print(f"mAP50-95: {metrics.box.map}")

Webhooks

Webhooks 会通知您的服务器平台事件:

事件描述
training.started训练任务已启动
training.epoch周期已完成
training.completed训练完成
training.failed训练失败
export.completed导出就绪

Webhook 设置在企业版套餐中可用。

常见问题

如何对大量结果进行分页?

使用 pagelimit 参数:

GET /api/datasets?page=2 &
limit=50

我可以在没有SDK的情况下使用API吗?

是的,所有功能均可通过 REST 访问。SDK 只是一个便捷的封装。

是否有API客户端库?

目前,请使用 Ultralytics Python 包或直接发送 HTTP 请求。其他语言的官方客户端库正在计划中。

我如何处理速率限制?

实现指数退避:

import time


def api_request_with_retry(url, max_retries=3):
    for attempt in range(max_retries):
        response = requests.get(url)
        if response.status_code != 429:
            return response
        wait = 2**attempt
        time.sleep(wait)
    raise Exception("Rate limit exceeded")


📅 创建于 20 天前 ✏️ 更新于 14 天前
glenn-jocherLaughing-q

评论