YOLOv5で物体検出するマイクロサービスを作りました

YOLOv5で物体検出するマイクロサービスを作りました

AI分野のサンプルはPythonが圧倒的に多いです。 Rubyから物体検出を利用したかったのですが参考情報があまりありません。 仕方がないのでPython + Flask + YOLOv5 + Dockerで作りました。

作ったもの

README.mdが充実していなくて恐縮ですが、中身は単純です。 docker-compose upすれば使えます。

以下のサイトを参考にしています。

よくあるAIの画像判定のような、検出した領域を矩形で囲むようなことはできません。 別のプログラムから関数的に使うことを想定しています。 また、インターネットに公開することは想定していないので、Flask組み込みのWebサーバ(8010番ポート)で起動させています。

API

healthcheck

エンドポイント /
メソッド GET/POST
パラメータ なし
戻り値 常に”YOLOv5 my micro service is running.”

実行例

$ curl http://localhost:8010/
YOLOv5 my micro service is running.

detection

エンドポイント /detection
メソッド POST
パラメータ file 物体検出したい画像
戻り値 物体名, 左上点xy座標, 右下点xy座標, スコア(<=1.0)のリスト

実行例

$ curl -X POST -F file=@sampleimage.jpg http://localhost:8010/detection
[
  {
    "label": "elephant",
    "p1": { "x": 239.77001953125, "y": 159.95553588867188 },
    "p2": { "x": 382.79400634765625, "y": 378.6675109863281 },
    "score": 0.9328093528747559
  }
  # 後略
]

TODO

  • Flaskでマルチスレッド指定(threaded=True)しているが、本当に並列動作するのか確認できていない
  • GPU利用可否については特に考慮していない
  • YOLOのモデルの大きさについても特に考慮していない

今回のAIサービスは、別のプログラムを作っている最中に、必要に迫られて作成しました。 学習済みのAIモデルは便利な関数的に使えるのですが、圧倒的にPythonの作例が多いです。 言語の壁を飛び越えるために、Dockerでマイクロサービス化することが増えそうな予感がします。

先にも書いた通り、気軽にAIを活用できる環境も日々整ってきているので、誰でもその恩恵に与れる時代でもあります。 学習済みモデルを使うことに数学的な難しさはありません。 仕組みを気にしなければ賢い関数が公開されている、ぐらいの感覚でも活用できます。


謝辞
画像は Unsplash 様より使わせていただきました。