基于 Flask 与 Milvus 构建高效图片搜索引擎,可通过API接入,支持Docker一键部署

一、简介

  • 这是一个利用flask、ant design pro v5、milvus、towhee、resnet50等技术实现的一个具有以图搜图功能的应用系统
  • 提供可视化管理后台,支持在线管理图片库、在线识别体验
  • 可通过API调用的方式接入以图搜图服务
  • 支持Docker一键快速部署
  • 项目代码地址可参考:github.com/luler/reverse_image_sea...
  • 该项目的整体架构图可参考:
    基于 Flask 与 Milvus 构建高效图片搜索引擎,可通过API接入,支持Docker一键部署

二、安装

  • 准备一台不低于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. 登录使用在线管理后台

  • 上传图片,建立图片库

  • 在线识别体验,可以上传图片,搜索现有库中关联性最近的图片
    基于 Flask 与 Milvus 构建高效图片搜索引擎,可通过API接入,支持Docker一键部署

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、图片向量模型也可以调整到更大更好的模型

在线试用演示地址:cas.luler.top/?search=636d2a970a26...

本作品采用《CC 协议》,转载必须注明作者和本文链接
我只想看看蓝天
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!