YOLO11m を使用した物体検出APIです。
画像を送信すると、検出結果(JSON)とバウンディングボックス付き画像を返します。
認証は APIキー(Bearerトークン) 方式を採用。
ローカル環境で、conda を使わず venv + uv + pip で動作します。
| 機能 | 説明 |
|---|---|
| 画像アップロード | multipart/form-data で画像をPOST |
| YOLOモデル | Ultralytics YOLO11m (COCO 80クラス) |
| 出力 | JSON(ラベル・座標・信頼度・個数)+バウンディングボックス付き画像(Base64) |
| 認証 | APIキー (Authorization: Bearer <API_KEY>) |
| 環境 | Python 3.8以上, pip + venv, GPU不要(CPU動作) |
| モデル | 事前ダウンロード済み yolo11m.pt を使用 |
Client
↓ POST /detect (multipart/form-data + Bearer token)
FastAPI (main.py)
├─ Load YOLO11m model (models/yolo11m.pt)
├─ Run detection on uploaded image
├─ Draw bounding boxes
└─ Return JSON + Base64 image
project/
├── models/
│ └── yolo11m.pt # 事前にダウンロードしたモデルファイル
├── main.py # FastAPIアプリ本体
├── requirements.txt # 依存パッケージ一覧
└── README.md # このファイル
git clone https://github.com/aToy0m0/fast-api-YOLOv11-BearerAPI
cd fast-api-YOLOv11-BearerAPIuv venv# WSL / macOS / Linux
source .venv/bin/activatePyTorch を GPU 環境用に入れる場合
uv pip install -r requirements.txtUltralytics公式から yolo11m.pt を取得して、models/ に保存:
- 🔗 https://github.com/ultralytics/assets/releases
- 保存例:
project/models/yolo11m.pt
CLIの場合
mkdir -p models
cd models/
TAG=v8.3.0 # 最新タグに置き換えてください
curl -L -o yolo11m.pt "https://github.com/ultralytics/assets/releases/download/${TAG}/yolo11m.pt"
curl -L -o yolo11n.pt "https://github.com/ultralytics/assets/releases/download/${TAG}/yolo11n.pt"
openssl rand -hex 32
cp .env.example .env
nano .env$ cat .env
# use command below to generate a secret key
## openssl rand -hex 32
DETECTION_API_KEY="your-secret-key"
uvicorn main:app --reloadサーバー外部からのアクセスを受け付ける場合
uvicorn main:app --reload --host 0.0.0.0 --port 8000起動後に以下へアクセス:
- Swagger UI: http://127.0.0.1:8000/docs
- サーバー外部からのアクセスを受け付ける場合: http://<サーバーIP>:8000/docs
curl -s http://<server-ip>:8000/healthzcurl.exe -s http://<server-ip>:8000/healthz以下をダウンロードし、sample.jpgにリネーム
https://ultralytics.com/images/zidane.jpg
project/
├── test/
│ └── sample.jpg # リネームしたzidane.jpg
CLIの場合
mkdir -p test
curl -L https://ultralytics.com/images/zidane.jpg -o test/sample.jpg
cd test/
python test.py外部サーバー向けにテストする場合は、test.py以下のアドレスを変更する
API = "http://127.0.0.1:8000/detect"
逆にorijinを絞り込む場合は以下を書き換える
allow_origins=["*"], # 必要に応じて特定オリジンへ絞り込む
allow_origins=["http://localhost:5500", "http://your-webapp"], # 開発用なら ["*"] でも可
{
"detections": [
{
"label": "person",
"confidence": 0.91,
"box": [36.4, 52.8, 221.3, 309.9]
},
{
"label": "dog",
"confidence": 0.88,
"box": [150.2, 200.5, 300.1, 400.7]
}
],
"counts": {
"person": 1,
"dog": 1
},
"image_with_boxes": "data:image/jpeg;base64,/9j/4AAQSk..."
}ImportError: libGL.so.1: cannot open shared object file: No such file or directory
sudo yum install -y mesa-libGL
FastAPI公式: https://fastapi.tiangolo.com/ Ultralytics YOLO公式: https://docs.ultralytics.com/ COCOクラス一覧: https://docs.ultralytics.com/datasets/detect/coco/
Author: aToy0m0 Project Start: 2025-11
License: GNU AGPL v3(Ultralytics YOLO と同一、詳細は LICENSE を参照)