banner
NEWS LETTER

本地二次元图像搜索

Scroll down

PxIMSE

基于DeepDanbooru, CLIPPaddleOCR的本地图像搜索

1

GitHub: PxIMSE

MongoDB 存储图片信息、DeepDanbooru 和 OCR 结果,CLIP 结果存储在向量数据库 Milvus

前端使用 Nuxt.js Vuetify
后端 FastAPI

支持的文件名格式

图片来自 Pixiv, PixivBatchDownloader, PixEZ … , Twitter Media Downloader, yande.re 或者其他来源,但是DB中不会记录id信息:

  • pixiv: {user_id}_{id}_p{index} (建议)
  • pixiv: {id}_p{index}
  • twitter: twitter_{user_name}(@{user_id})_{date}_{id}_photo
  • yande.re: yande.re {id} {tags}

Pre-requisites

DB配置参考docker-compose.yml

安装依赖

1
pip3 install -r requirements.txt

torch、tensorflow、paddlepaddle所需CUDA环境可能冲突,需要手动配置

1
pnpm install

配置

python/config.yml配置图片文件夹和DB设置

需要其他CLIP模型请更改clip1.pymilvus.py,默认使用最便宜的OpenAI ViT-B/32(输出512维向量,其他模型可能是768维)

更多模型: OpenCLIP Jina CLIP

config.mjs配置Nginx和API地址

使用方法

导入图片

  1. 导入MongoDB
1
python import_images.py mongo
  1. 导入CLIP结果到Milvus
1
python import_images.py milvus
  1. 从Pixiv获取图片信息 (可选)
1
python import_images.py pixiv
  1. 尝试将数据库中文档的username分配给相同userid但没有username的文档 (必须给useridusername建立索引,否则非常耗时) (可选)
1
python import_images.py update

2. 启动服务

1
2
cd python
uvicorn api:app --host 0.0.0.0 --port 8000
1
pnpm dev

说明

MongoDB文档结构:
d

tags为DeepDanbooru识别结果
tags1是从Pixiv获取到的结果,对于yandere图片为文件名内包含的标签

前端 Query 部分格式:

存在:

tags.xxx
tags1:xxx

不存在:

!tags.xxx
!tags1:xxx

大于、小于、等于、不等于

filesize;>1000000
tags.xxx;<=0.9
likeCount;=100
viewCount;!=200
多个条件:
date;>2000-01-01&<2010-01-01
字符串:
userid;=”12345”

OCR文本长度:

textlen;>xx
textlen;<=xx

Milvus

Milvus 部分默认使用基于图的 HNSW 索引,M值取32,efConstruction为64(未经充分测试)
该索引比 FLAT(对于每个查询都计算数据库中所有向量)快至少3倍(未经充分测试)
取值过高建立索引的速度可能十分缓慢
向量归一化后再存入 Milvus ,以内积衡量向量距离

Milvus 的GPU版本还支持GPU索引,但是目前只支持 FP32

Milvus 向量查询结果最多只能返回 16,384 条记录

消失的Pixiv图片

2019-2024保存的44万图片在第3步导入完成后大约有 1/13 记录到 errors(p站上找不到该图片)
对于作者图片没有删除完全的情况,第4步可以尝试将数据库中文档的username分配给相同userid但没有username的文档(只对记录了userid的第一种文件名有效)

目前还没有搜索图片文本的需求,只实现了搜索文本长度

Inspired by: clip-image-search

其他文章
目录导航 置顶
  1. 1. PxIMSE
    1. 1.0.1. 支持的文件名格式
  2. 1.1. Pre-requisites
    1. 1.1.1. 安装依赖
    2. 1.1.2. 配置
  3. 1.2. 使用方法
    1. 1.2.1. 导入图片
    2. 1.2.2. 2. 启动服务
  4. 1.3. 说明
    1. 1.3.1. 前端 Query 部分格式:
    2. 1.3.2. 存在:
    3. 1.3.3. 不存在:
    4. 1.3.4. 大于、小于、等于、不等于
    5. 1.3.5. OCR文本长度:
    6. 1.3.6. Milvus
    7. 1.3.7. 消失的Pixiv图片
请输入关键词进行搜索