【YOLO:①モデル偏】Fast API x YOLOで物体検出アプリ作ってみた
はじめに
機械学習およびFastAPIのお勉強として本記事の内容を構築したので紹介します!
利用した物体検出モデルはAGPL-3.0ライセンスベースで提供されていますので、業務利用はなさらないようご注意ください。[1]
ultralytics YOLOを組み込んだアプリにもAGPL-3.0を適用する必要があります。
Ultralytics YOLOで利用できるライセンスオプションは何ですか?
Ultralyticsは、YOLOに対して2つのライセンスオプションを提供しています。AGPL-3.0 License: このオープンソースライセンスは、教育および非商用での使用に最適であり、オープンなコラボレーションを促進します。
エンタープライズライセンス: これは商用アプリケーション向けに設計されており、AGPL-3.0ライセンスの制限なしに、Ultralyticsソフトウェアを商用製品にシームレスに統合できます。
詳細については、ライセンスページをご覧ください。
できること
以下のようにシステムに画像を送付すると、画像に映っている物体を機械学習モデルが検出し、バウンティボックスで囲んだ画像を返してくれます。

WSLでFastAPIサーバーを実行

画像を送付すると、検出結果付きの画像を取得
動作環境
- WSL(Windowws11)
- Python 3.8+
- uv
- YOLO11m(Ultralytics COCO 80クラス)[3]
前提条件・対象
今回のコードはこちらで公開しています。
構築手順
WSLを開き、リポジトリをクローン
git clone https://github.com/aToy0m0/fast-api-YOLOv11-BearerAPI
cd fast-api-YOLOv11-BearerAPI
仮想環境
uv venv
source .venv/bin/activate
必要パッケージのインストール
uv pip install -r requirements.txt
YOLOモデルの事前ダウンロード
Ultralytics公式から 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"
APIキーと推論パラメータの設定
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
動作確認
この記事ではGUIツールを使ったテスト方法を記載します。
curlおよびpythonを使ったテスト方法はREADME[4]をご覧ください。
サンプル画像を用意
以下をダウンロード
https://ultralytics.com/images/zidane.jpg
project/
├── test/
│ └── zidane.jpg
CLIの場合
mkdir -p test
curl -L https://ultralytics.com/images/zidane.jpg -o test/zidane.jpg
テストツールをブラウザで開く
project/
├── test/
│ └── tester.html
以下の2点を設定します
- API URL:http://server-ip:8000/detect
- APIキー (Bearer):「.env」の「DETECTION_API_KEY」に設定したキー
物体検出を実行!
Adobe StockのMultiracial business people working in officeをお借りします。
(お好きな画像を使ってください)
- 「ファイルの選択」で画像をアップロード
- 「画像を送信」
以下のように各物体を検出できました!

おわりに
ひとまず物体検出の仕組みを作ることができました!
今回は研究用途に制限された学習済みモデルを使った構築でしたが、今後は適切なモデルを使って独自モデルの学習やシステム開発をしたいと考えています。
✍️ この記事が参考になったら「いいね」「ブックマーク」「フォロー」をお願いします。
Xで絡んでいただくのも大歓迎です!
Discussion