Skip to the content.

NekoImageGallery

GitHub Workflow Status (with event) codecov Maintainability Man hours Docker Pulls

基于Clip模型与Qdrant向量数据库的在线AI图片搜索引擎。支持关键字搜索以及相似图片搜索。

English Document

✨特性

📷截图

Screenshot1 Screenshot2 Screenshot3 Screenshot4 Screenshot5 Screenshot6

以上截图可能包含来自不同画师的版权图片,请不要将其用作其它用途。

✈️部署

🖥️ 本地部署

选择元数据存储方式

NekoImageGallery支持两种元数据存储方式:Qdrant数据库存储与本地文件存储。您可以根据自己的需求选择其中一种方式。

Qdrant数据库 (推荐)

在大多数情况下,我们推荐使用Qdrant数据库存储元数据。Qdrant数据库提供了高效的检索性能,灵活的扩展性以及更好的数据安全性。

请根据Qdrant文档部署Qdrant数据库,推荐使用docker部署。

如果你不想自己部署Qdrant,可以使用Qdrant官方提供的在线服务

本地文件存储

本地文件存储直接将图片元数据(包括特征向量等)存在本地的Sqlite数据库中。仅建议在小规模部署或开发部署中使用。

本地文件存储不需要额外的数据库部署流程,但是存在以下缺点:

部署NekoImageGallery

  1. 将项目目录clone到你自己的PC或服务器中,然后按需checkout到特定版本tag(如v1.0.0)。
  2. 强烈建议在python venv虚拟环境中安装本项目所需依赖, 运行下面命令:
     python -m venv .venv
     . .venv/bin/activate
    
  3. 安装PyTorch. 按照PyTorch文档使用pip安装适合你的系统的torch版本

    如果您希望使用CUDA加速推理,务必在本步中安装支持Cuda的pytorch版本,安装完成后可以使用torch.cuda.is_available() 确认CUDA是否可用。

  4. 安装其它本项目所需依赖:
     pip install -r requirements.txt
    
  5. 按需修改位于config目录下的配置文件,您可以直接修改default.env,但是建议创建一个名为local.env 的文件,覆盖default.env中的配置。
  6. 运行本应用:
     python main.py
    

    你可以通过--host指定希望绑定到的ip地址(默认为0.0.0.0),通过--port指定希望绑定到的端口(默认为8000)。
    通过python main.py --help可以查看所有可用命令和选项。

  7. (可选)部署前端应用:NekoImageGallery.App 是本项目的一个简易web前端应用,如需部署请参照它的部署文档

🐋 Docker 部署

关于Docker镜像

NekoImageGallery镜像发布在DockerHub上,并包含多个变种,设计于在不同的环境使用。

Tags 介绍 Latest 镜像尺寸
edgeneko/neko-image-gallery:<version>
edgeneko/neko-image-gallery:<version>-cuda
edgeneko/neko-image-gallery:<version>-cuda12.1
基于CUDA12.1, 支持GPU推理的镜像 Docker Image Size (tag)
edgeneko/neko-image-gallery:<version>-cuda11.8 基于CUDA11.8, 支持GPU推理的镜像 Docker Image Size (tag)
edgeneko/neko-image-gallery:<version>-cpu 仅支持CPU推理的镜像 Docker Image Size (tag)

其中,<version>为NekoImageGallery的版本号或版本代称,具体如下:

Version 介绍
latest 最新的稳定版本
v*.*.* / v*.* 特定版本号(与GitHub Tag对应)
edge 最新的开发版本,与master分支同步更新,可能包含未经完善测试的功能和breaking changes

在每个镜像中,我们捆绑了必要的依赖项,包括 openai/clip-vit-large-patch14 模型权重、bert-base-chinese 模型权重和 easy-paddle-ocr 模型,以提供一个完整且可直接使用的镜像。

镜像使用 /opt/NekoImageGallery/static 作为存储图像文件的卷,如果需要本地存储,可以将其挂载到您自己的卷或目录。

对于配置,我们建议使用环境变量来覆盖默认配置。机密信息(如 API 令牌)可以通过 docker secrets 提供。

准备nvidia-container-runtime

如果你希望在推理时支持CUDA加速,请参考Docker GPU相关文档 准备支持GPU的容器运行时。

相关文档:

  1. https://docs.docker.com/config/containers/resource_constraints/#gpu
  2. https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
  3. https://nvidia.github.io/nvidia-container-runtime/

运行

  1. 下载docker-compose.yml文件。
    # For cuda deployment (default)
    wget https://raw.githubusercontent.com/hv0905/NekoImageGallery/master/docker-compose.yml
    # For CPU-only deployment
    wget https://raw.githubusercontent.com/hv0905/NekoImageGallery/master/docker-compose-cpu.yml && mv docker-compose-cpu.yml docker-compose.yml
    
  2. 按需修改docker-compose.yml文件
  3. 运行下面命令启动docker-compose
    # start in foreground
    docker compose up
    # start in background(detached mode)
    docker compose up -d
    

将图片上传至NekoImageGallery

有几种方法可以将图片上传至NekoImageGallery:

📚 API文档

API文档由FastAPI内置的Swagger UI提供。您可以通过访问服务器的/docs/redoc路径来查看API文档。

⚡ 相关项目

以下项目基于NekoImageGallery工作!

NekoImageGallery.App LiteLoaderQQNT-NekoImageGallerySearch nonebot-plugin-nekoimage

📊仓库信息

Alt

❤️贡献指南

有很多种可以为本项目提供贡献的方式:记录 Bug,提交 Pull Request,报告问题,提出建议等等。

即使您拥有对本仓库的写入权限,您也应该在有需要时创建自己的功能分支并通过 Pull Request 的方式提交您的变更。 这有助于让我们的主仓库保持整洁并使您的个人工作流程不可见。

我们也很感兴趣听到您关于这个项目未来的反馈。您可以通过 Issues 追踪器提交建议或功能请求。为了使这个过程更加有效,我们希望这些内容包含更多信息,以更清晰地定义它们。

Copyright 2023 EdgeNeko

Licensed under GPLv3 license.