为了实现以图搜图,本次实现的是Reverse Image Search(反向图像搜索)。学习使用开源的milvus向量数据库项目进行本地部署。项目代码地址:
GitHub - milvus-io/milvus at 2.0.0-rc6An open-source vector database for embedding similarity search and AI applications. - GitHub - milvus-io/milvus at 2.0.0-rc6https://github.com/milvus-io/milvus/tree/2.0.0-rc6GitHub - milvus-io/bootcamp: Dealing with all unstructured data, such as reverse image search, audio search, molecular search, video analysis, question and answer systems, NLP, etc.Dealing with all unstructured data, such as reverse image search, audio search, molecular search, video analysis, question and answer systems, NLP, etc. - GitHub - milvus-io/bootcamp: Dealing with all unstructured data, such as reverse image search, audio search, molecular search, video analysis, question and answer systems, NLP, etc.
https://github.com/milvus-io/bootcamp
准备工作
ubuntu安装docker和docker-compose
1.docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2.docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
一、下载&启动milvus引擎
在milvus的git官网readme中有install milvus的地址:
1.下载docker-compose.yml文件
wget https://github.com/milvus-io/milvus/releases/download/v2.0.0-rc6/milvus-standalone-docker-compose.yml -O docker-compose.yml
2.启动docker-compose(即启动milvus容器)
# 启动
docker-compose up -d
# 查看容器
sudo docker-compose ps
# 关闭
docker-compose down
正常会运行三个milvus容器
二、部署bootcamp项目
1.启动mysql数据库
sudo docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
sudo docker ps
sudo docker kill container_name
可以看到此时共四个容器
2.启动后端服务
下载bootcamp项目,使用源码运行后端server,不使用docker启动。
git clone https://github.com/milvus-io/bootcamp
1.安装需求库
cd ../milvus_deploy/bootcamp/solutions/reverse_image_search/quick_deploy/server/
pip install -r requirements.txt
2. 在config.py中配置自己的host和port。
vim server/src/config.py
3.运行main.py
cd src
python main.py
后端运行成功后的状态
3.启动前端页面
下面代码修改为自己的ip
# Modify API_URL to the IP address and port of the server.
$ export API_URL='http://172.16.20.10:5000'
$ docker run -d -p 8001:80 \
-e API_URL=${API_URL} \
milvusbootcamp/img-search-client:1.0
可以将其写入shell脚本中start_client.sh 执行。
sh start_clint.sh
前端启动后的状态:
打开浏览器输入127.0.0.1:8001查看前端页面:
官方的部署流程在git上也有介绍,可以参考:
三、使用milvus以图搜图
1.向milvus数据库添加自己的图像数据集
点击加号后,在后端main.py代码中app的post请求获取到image_path,然后依次执行do_load函数将图片提取特征向量,存入milvus数据库和mysql数据库。
最后显示共有多少张图像在数据库中。
2.添加查询图像
点击上传一张图像,会按照相似度从高到低返回相似图像。
四、问题记录
1、特征向量的维度VECTOR_DIMENSION,必须在新建数据库的时候才会生效。
如果想改变存储的特征向量维度VECTOR_DIMENSION,①必须先停止milvus容器,②删除milvus的数据库volunes文件夹,③重新运行milvus容器,④重新运行后端main.py。
VECTOR_DIMENSION定义在config.py
它会在创建milvus的数据表collection时候起作用。
在milvus_helper.py的40行
volumes文件夹位置。
cd ../milvus_deploy/volumes
sudo rm -R volumes