跳到主要内容

基于 seekdb 构建图搜图应用

背景信息

在当今信息爆炸的时代,用户常需要从海量数据中迅速搜索所需信息。例如在线文献数据库、电商平台产品目录、以及不断增长的多媒体内容库,都需要高效的搜索系统来快速定位到用户感兴趣的内容。随着数据量不断激增,传统的基于关键字的搜索方法已经无法满足用户对于搜索精度和速度的需求,向量搜索技术应运而生。它通过将文本、图片、音频等不同类型的数据编码为数学上的向量,并在向量空间中进行搜索。这种方法允许系统捕捉数据的深层次语义信息,从而提供更为准确和高效的搜索结果。

本文通过 seekdb 的向量搜索技术构建您的图搜图应用。

图搜图架构

图搜图应用是把图片库以向量形式,存储在数据库内,用户在对应的 UI 界面,上传需要查询的图片,图片会被应用转换为向量,在数据库内查询相似向量,并返回结果,最终以图片形式,在 UI 页面上展示相似图片。

3

前提条件

  • 您已部署 seekdb。

  • 您已创建数据库。更多有关创建数据库的信息,请参见 创建数据库

  • 数据库已开启向量搜索功能。更多关于向量搜索功能的信息,请参见 使用 SQL 快速进行向量搜索

    obclient> ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
  • 准备自己所需的图片,如果没有足够的图片用于测试效果,可参考各大开源网站的图片数据集。

  • 安装 Python 3.9 及以上版本。

  • 安装 Poetry:

    python3 -m ensurepip
    python3 -m pip install poetry

操作步骤

  1. 克隆代码仓库。

    git clone https://gitee.com/oceanbase-devhub/image-search.git
    cd image-search
  2. 安装依赖。

    poetry install
  3. 设置环境变量。

    cp .env.example .env
    # 更新 .env 文件中的数据库信息
    vi .env

    更新 .env 中内容。

    HF_ENDPOINT=https://hf-mirror.com

    DB_HOST="127.0.0.1" ## 设置对应的服务器 IP
    DB_PORT="2881" ## 设置对应的端口
    DB_USER="root" ## 设置对应的租户及用户名
    DB_NAME="test" ## 设置对应的数据库名
    DB_PASSWORD="" ## 设置对应的租户用户的密码
  4. 上传准备的图片至服务器上。

  5. 启动图搜图程序。

    poetry run streamlit run --server.runOnSave false image_search_ui.py

    返回结果如下:

    Collecting usage statistics. To deactivate, set browser.gatherUsageStats to false.

    You can now view your Streamlit app in your browser.

    Local URL: http://localhost:8501
    Network URL: http://xxx.xxx.xxx.xxx:8501
    External URL: http://xxx.xxx.xxx.xxx:8501
  6. 打开图搜图对应的 UI 界面。可根据实际情况,打开上述第 5 步中对应的 URL。

  7. 图片加载设置下,图片加载目录内填写服务器上图片所存放目录的绝对路径。

  8. 点击 加载图片

  9. 等图片加载完成后即可进行图搜图操作。

应用展示

1