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

一、简介

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

二、安装

  • 准备一台不低于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、图片向量模型也可以调整到更大更好的模型

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

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容