📸

【YOLO:①モデル偏】Fast API x YOLOで物体検出アプリ作ってみた

に公開

はじめに

機械学習およびFastAPIのお勉強として本記事の内容を構築したので紹介します!
利用した物体検出モデルはAGPL-3.0ライセンスベースで提供されていますので、業務利用はなさらないようご注意ください。[1]
ultralytics YOLOを組み込んだアプリにもAGPL-3.0を適用する必要があります。

https://docs.ultralytics.com/ja/#how-can-i-train-a-custom-yolo-model-on-my-dataset

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]

前提条件・対象

今回のコードはこちらで公開しています。
https://github.com/aToy0m0/fast-api-YOLOv11-BearerAPI

構築手順

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/ に保存:

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点を設定します

物体検出を実行!

Adobe StockのMultiracial business people working in officeをお借りします。
(お好きな画像を使ってください)

  • 「ファイルの選択」で画像をアップロード
  • 「画像を送信」

以下のように各物体を検出できました!

おわりに

ひとまず物体検出の仕組みを作ることができました!
今回は研究用途に制限された学習済みモデルを使った構築でしたが、今後は適切なモデルを使って独自モデルの学習やシステム開発をしたいと考えています。

✍️ この記事が参考になったら「いいね」「ブックマーク」「フォロー」をお願いします。
Xで絡んでいただくのも大歓迎です!
https://x.com/aToy0m0

脚注
  1. https://qiita.com/hrmc/items/52967bd93f88a863862b ↩︎

  2. https://docs.ultralytics.com/ja/yolov5/quickstart_tutorial/#install ↩︎

  3. https://github.com/ultralytics/ ↩︎

  4. https://github.com/aToy0m0/fast-api-YOLOv11-BearerAPI/blob/main/README.md ↩︎

Discussion