开始使用10 分钟更新于 2026-09-04

跑通第一个图片识别 Job

从注册模拟目标检测算法、上传图片和创建任务,到启动 Python Runner 并在页面查看识别结果。

本页目录 ⌄
01

先了解这条最小链路

本教程使用 Django 自带的本地文件存储,不需要 OSS、COS、OBS 或 Celery。控制台保存上传图片,示例 Runner 通过受保护接口下载图片,再把模拟目标框作为 JSON 结果回传。

示例 Runner 不加载真实模型;它会读取图片尺寸和文件哈希,生成稳定的 person、vehicle 模拟检测结果,只用于验证平台协议。

  • 管理员:注册算法版本并创建 Inference Job。
  • 平台:保存输入、排队、签出租约并记录事件。
  • Runner:领取任务、下载图片、上报心跳并返回结果。
  • 用户:在任务详情页查看成功状态、识别 JSON 和完整事件时间线。
END-TO-END FLOW
控制台上传图片 → Django 本地文件 → Queued
    → Runner 领取并下载 → Running / Heartbeat
    → Runner 回传 detections → Succeeded / 页面展示结果
02

启动本地平台

在项目根目录准备开发账号、数据库并启动服务。已有可用环境和账号时,可以只执行最后一行。

TERMINAL 1 / PLATFORM
export ADMIN_USER=admin
export ADMIN_PASSWORD='请替换成本地测试密码'
conda run -n SovereignInference python manage.py migrate
conda run -n SovereignInference python manage.py seed_dev_users
conda run -n SovereignInference python manage.py runserver 127.0.0.1:8000
03

注册模拟目标检测算法

打开平台控制台(本地开发环境的地址是 http://127.0.0.1:8000/console/;生产部署时替换为实际访问地址),使用超级管理员登录。进入“算法目录”,点击“注册算法”,按下面填写后保存。

  • 算法名称:模拟图片目标检测。
  • 算法标识:mock-image-detector;必须与示例 Runner 中声明的能力一致。
  • 版本:1.0.0;说明可填写“仅用于本地端到端演示”。
  • Worker 账号:本地最短演示选择 admin;正式环境应创建独立低权限账号。
  • 保持“已启用”。输入与输出 Schema 可先使用下面的最小定义。
ALGORITHM FORM
输入 Schema
{"type":"object","properties":{"image":{"type":"string"}}}

输出 Schema
{"type":"object","properties":{"detections":{"type":"array"}}}
04

上传图片并创建 Job

进入“Inference Jobs”,点击“创建任务”。选择刚注册的算法,输入方式保持“上传本地文件”。可以直接选择仓库内置的 examples/assets/sample-street-scene.svg,也可以换成自己的 PNG、JPEG、GIF 或 SVG 图片。

  • 任务名称:第一次模拟图片识别。
  • 算法与版本:模拟图片目标检测 · 1.0.0。
  • 输入文件:examples/assets/sample-street-scene.svg。
  • 算法参数:使用 threshold 控制模拟检测结果的置信度阈值。
  • 其他运行参数保持默认,然后点击“创建并排队”。
JOB PARAMETERS / JSON
{
  "threshold": 0.5
}
05

运行示例 Python Runner

另开一个终端,在项目根目录设置本地演示凭据并运行一次。凭据只通过环境变量读取,不会被脚本打印。

TERMINAL 2 / RUNNER
export SI_RUNNER_USERNAME=admin
export SI_RUNNER_PASSWORD='与 ADMIN_PASSWORD 相同的本地测试密码'
conda run -n SovereignInference python examples/runners/mock_image_detection_runner.py --once
06

在页面核对结果

回到任务详情页并刷新。状态应变成“已成功”,进度为 100%,结果区域会显示下面这些关键字段。右侧事件时间线应依次出现创建、领取、下载心跳、识别心跳和完成事件。

  • mock: true,明确声明这不是实际模型结果。
  • image:原文件名、MIME、字节数、SHA-256 与可读取到的图片尺寸。
  • summary.object_count:超过 threshold 的模拟目标数量。
  • detections:label、confidence,以及像素坐标 bbox。
  • Worker 节点页会出现 Mock Image Detection Runner 及最后心跳时间。
EXPECTED RESULT / EXAMPLE
{
  "mock": true,
  "model": "mock-detector/1.0",
  "summary": {"object_count": 2},
  "detections": [
    {"label": "person", "confidence": 0.9, "bbox": {"x": 115, "y": 76, "width": 230, "height": 389}},
    {"label": "vehicle", "confidence": 0.82, "bbox": {"x": 461, "y": 248, "width": 365, "height": 162}}
  ]
}
07

正式接入时更换 Worker 身份

超级管理员账号密码只适用于本机演示。正式 Runner 应在 Django Admin 创建独立非管理员账号,为该账号生成 Token,并在算法版本的“Worker 账号”中绑定它。脚本会优先使用 SI_RUNNER_TOKEN。

  • 不要把 Token、密码或短时下载 URL 写入代码、镜像、日志和 Git。
  • 每个部署环境使用独立 Worker 账号;泄露时只轮换对应 Token。
  • 若 Runner 报告没有下载 URL,请确认任务使用“上传本地文件”,而不是外部 URI 引用。
  • 若队列为空,请核对算法标识必须是 mock-image-detector,且 Worker 账号绑定正确。
PRODUCTION-LIKE AUTH
conda run -n SovereignInference python manage.py drf_create_token runner
export SI_RUNNER_TOKEN='上一步生成的 Token'
conda run -n SovereignInference python examples/runners/mock_image_detection_runner.py