画像検索を簡単に実装できる Vector Database Milvus を試してみる。

こんにちは k-jun です。今回は 画像を取り込み Vector として Database に保管し、ANN による画像検索を可能にする Milvus を試してみます。

https://github.com/milvus-io/milvus

実は学生のときにも遊びでラーメンの画像検索をやってみていたんですよね。 その際には 出来た Vector をファイルに保存していましたが、今回は保存先が データベースということでワクワクしています。

https://github.com/milvus-io/bootcamp/tree/master/solutions/reverse_image_search

ここを参照するとGUI 経由で画像の検索までできそうです。ということで ラーメン画像検索システムのサービス化をやってみようと思います。

https://github.com/milvus-io/bootcamp/tree/master/solutions/reverse_image_search/quick_deploy

まずは MySQL と Milvus の起動から。img-search-server も一緒に起動するようです。

https://milvus.io/docs/v2.0.0/install_standalone-docker.md

# milvus
$ wget https://github.com/milvus-io/milvus/releases/download/v2.0.0-rc5/milvus-standalone-docker-compose.yml -O /tmp/docker-compose.yml
$ docker-compose -f /tmp/docker-compose.yml up -d

# mysql
$ docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
# img-search-server
$ export Milvus_HOST='host.docker.internal'
$ export Milvus_PORT='19530'
$ export Mysql_HOST='host.docker.internal'
$ docker run -d -v ~/Desktop/ramen_images:/tmp/ramen_images -p 5000:5000 -e "MILVUS_HOST=${Milvus_HOST}" -e "MILVUS_PORT=${Milvus_PORT}" -e "MYSQL_HOST=${Mysql_HOST}" milvusbootcamp/img-search-server:2.0

http://127.0.0.1:5000/docs を見てみると、何やら Document が生成されています。

f:id:K-jun1221:20210901033148p:plain

あとはフロントを起動するだけなのでやっていきます。

$ export API_URL='http://127.0.0.1:5000'
$ docker run -d -p 8001:80 -e API_URL=${API_URL} milvusbootcamp/img-search-client:1.0

localhost:8001 から見てみると以下のようなフロントが出るので、プラスボタンの左のフォームにマウントした画像のディレクトリを入力します。 入力が完了すると、"XXX images in this set" の XXX の数字が増加するのであとは検索するだけです!!

f:id:K-jun1221:20210901040239p:plain

適当なラーメンの画像で検索してみます。

f:id:K-jun1221:20210901040557p:plain

おおお!!結構近い!!!のり!!

ということで、画像さえあれば Docker でポチポチするだけで画像検索が行えるサービスが完成しました。最近試したものの中ではかなり面白かったです。 それではこのへんで。