基于 Flask 与 Milvus 构建高效图片搜索引擎,可通过API接入,支持Docker一键部署
一、简介
- 这是一个利用flask、ant design pro v5、milvus、towhee、resnet50等技术实现的一个具有以图搜图功能的应用系统
- 提供可视化管理后台,支持在线管理图片库、在线识别体验
- 可通过API调用的方式接入以图搜图服务
- 支持Docker一键快速部署
- 项目代码地址可参考:github.com/luler/reverse_image_sea...
- 该项目的整体架构图可参考:
二、安装
准备一台不低于2C4G的主机(配置越高越好),并提前安装好Docker、docker-compose软件环境
拉取代码
git clone https://github.com/luler/reverse_image_search.git
进入项目根目录,查看编辑目录下的docker-compose.yml配置文件,检查相关端口、环境变量是否需要调整,参考内容如下
version: "3" services: paddle: image: ghcr.io/luler/reverse_image_search:latest restart: always environment: - JWT_SECRET=s@Q$eubj #安全起见,更换为复杂秘钥 ports: - 4456:5000 volumes: - .:/root/work nginx: image: nginx:1.21.6 restart: always ports: - 8899:80 volumes: - ./log/nginx_logs:/var/log/nginx - ./web/dist:/home/wwwroot/web/dist - ./static:/home/wwwroot/resource/static - ./config/nginx/conf.d:/etc/nginx/conf.d etcd: image: quay.io/coreos/etcd:v3.5.0 restart: always environment: - ETCD_AUTO_COMPACTION_MODE=revision - ETCD_AUTO_COMPACTION_RETENTION=1000 - ETCD_QUOTA_BACKEND_BYTES=4294967296 - ETCD_SNAPSHOT_COUNT=50000 volumes: - ./log/volumes/etcd:/etcd command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd minio: image: minio/minio:RELEASE.2022-03-17T06-34-49Z restart: always environment: MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin volumes: - ./log/volumes/minio:/minio_data command: minio server /minio_data healthcheck: test: [ "CMD", "curl", "-f", "http://localhost:9000/minio/health/live" ] interval: 30s timeout: 20s retries: 3 standalone: image: milvusdb/milvus:v2.1.4 restart: always command: [ "milvus", "run", "standalone" ] environment: ETCD_ENDPOINTS: etcd:2379 MINIO_ADDRESS: minio:9000 volumes: - ./log/volumes/milvus:/var/lib/milvus ports: - "19530:19530" - "9091:9091" depends_on: - "etcd" - "minio" attu: image: zilliz/attu restart: always ports: - 30000:3000 environment: MILVUS_URL: standalone:19530
目录下执行如下命令实现一键启动
docker-compose up -d
镜像拉取可能拉取比较慢,可自行配置加速,成功运行参考如下
三、使用
1. 登录使用在线管理后台
- 安装完成后,可访问地址:http://127.0.0.1:8899/,默认登录账号:admin,密码:admin
上传图片,建立图片库
在线识别体验,可以上传图片,搜索现有库中关联性最近的图片
2. 通过API调用实现以图搜图
获取访问授权接口
接口(POST):/api/login 请求参数(json): { "name": "admin", //账号 "password": "admin" //密码 } 返回(json): { "code": 200, "info": { "live_time": 7200, //有效期(秒) "token": "eyJ0eXAiOiJKV1QiLCJ...." //授权凭证 }, "message": "访问成功" }
以图搜图接口
接口(POST):/api/image/search 请求参数(form-data): { "limit": 20, //限制返回数量 "file": (binary) } 返回(json): { "code": 200, "info": [ { "distance": 14.32137393951416, //差异系数,越小越相似 "image_path": "/static/images/2025-08-20/416291da-7db7-11f0-bfdf-e6eba293e60d.jpg", //图片 "md5": "996270ff7860e65110f6652f1ceabe18", "milvus_id": 460242204212098050 } ], "message": "上传成功" }
其他接口,可自行探索,与页面接口一致
四、总结
- 这是一个简易的以图搜图工具,核心是基于milvus的向量搜索能力,默认的图片向量化模型是resnet50
- 可以在商品推荐、图片搜索等场景应用起来,如:用户手机拍照上传后找出自己商品库里的相似商品等等
- 支持Docker快速部署,所有组件一键启动,实现快速应用
- 如果在生产环境应用,建议把默认的sqlite数据库改为mysql、图片向量模型也可以调整到更大更好的模型
本作品采用《CC 协议》,转载必须注明作者和本文链接