Moonset 图片标签式管理工具

这个工具起源于我 Naive 的本科毕设,当然现在已经完全是新东西了。当时只是作为自己视觉识别模型的效果展示 demo。现在引入多模态和各种新技术后,我觉得这个工具有了一些实用价值,所以放了出来。

这个工具的目标是互联网时代下的离线图片收藏,让用户能拥有愈发海量的图像数据,同时保持数据井然有序。

下图展示了自动修正查询语义并跨模态至图像特征搜索的简单过程。

在工具中查询错误名称,依语义自动修正并寻找对应特征图像(因著作问题,图片模糊处理)

背景

很长时间的实践中,我对图片(插图)的收藏方式总是有些这样那样的不满,功能和我的想法有各种出入。

一般来讲,收藏图片也就是下载之后简单归入到不同的相册或者文件夹里。这种办法过于粗暴且用处不大。给一张图片,我到底该按照画师、系列、人物还是图中的元素归档?无论怎样,最终的结局大概率是收藏的图片像四年前买的书一样,在看完第一眼后便消失在了相册的角落。等到想找某张图时曾经的收藏完全派不上用场,不得不顺着线索在网上搜索。也会有人完全忘记,把旧图错当新图存到相册,甚至分辨率还变低了……

总之,用相册收藏图片只是一种权宜之计,过于僵化。一种更实用的方案是用标签来管理图片。可惜现有的管理工具都过于简单且繁琐:

  1. 标签组织简单。工具只是给图片加标签,在此之上再没有任何其他功能支持。如果我费工夫加了标签,你却连依照标签筛选都做不到,那我标注图片是为了什么?
  2. 标记步骤繁琐。这些软件基本没有考虑过如何节省标注人力,也不把标签当作分类图像的重点依据。一千张图片一上午都整理不完,也有些太闲了。

过于繁琐的步骤和过于鸡肋的标签系统让整个标签管理方式变得得不偿失,难以实行。终于一段时间之后我想开了,既然有各种不满,那不如自己整个工具。

这就是现在的 Moonset。在年假期间做了大量重构,我自己用着感觉很爽了,所以拿出来看是否有人也需要。至于为什么叫这个名字,我也不知道,属于随机名称生成了。

部分技术细节

你可能对此并不感兴趣。

  • Rust 作为主要语言。Tauri 作为框架。
  • Pytorch 实现的跨模态模型(CLIP 与 ResNet),并使用 ONNX 导出供语义分析使用。
  • 内嵌 Sqlite 作为关系数据库。
  • 使用 qdrant 向量数据库维护特征。
  • 界面由 HTML、CSS、TypeScript 编写,使用 SolidJS 作为框架。

特点

Moonset 的初衷是二次元插画收藏,所以针对性强化了标签功能,可能不完全符合其他情景使用。

后续可能会提供适合真实摄像的模型,从而支持更多的使用场景。

一站式管理。从任何地方(本地、网络)导入你的图片并自由关联不定数标签,标签作为图片搜索的第一索引。例如你可以标记图片上出现的人物,也可以标注语义动作等。

低负担标记。就算图片很好看,也没人愿意一天全浪费在分类图上,所以 Moonset 用上了大量正常和抽象的算法帮你节省力气。从我自己的使用经验来看,10000 张图从零开始人工筛选和标记一个新人物只用不到 20 分钟[1]

语义级分析。Moonset 用上了船新的人工智能技术,能够更「深刻地」理解图片和标签含义。除了在标注上有增强,还能提供其他各种实验性功能……

人性化功能。提供管理大量图片所需的细节功能。例如依标签导出图组、按回顾时间排序、相似图片聚合、重复图片筛选、依喜好推荐(WIP)等。

目前功能

  • 图库图片导入。
  • 自动语义标注:从约 8000 个预设标签中自动选取适合新图片的标签。
  • 用户定义标注:为任何图片自由标注新标签。
  • 标注启发理解:自动理解和传播用户定义标签至新图片。
  • 标签搜索推荐:从现有标签自动推荐符合用户想法的标签,避免重复。
  • 快速图片标注:利用各种技术,帮助用户快速为整个图库标注标签。
  • 图片语义搜索:使用自然语言搜索图片。
  • 重复图片筛选:从图库中筛选重复图片并删除。

Roadmap

比较随缘,有空就弄。

  • 更好的搜索。使用 NOT AND OR 关键字和自然语言组合,同时使用模糊和精确语义筛选图片。
  • 图片评分。允许用户极为便捷地评价图片;能依照喜好排序筛选。
  • 「反悔」。允许回退上一步标记的标签。
  • 图片系列。自由聚合相似图片为一组。
  • 标签类型。细化标签属性(特征、人物、作者……),提供不同类型预设。
  • 图片导入。从 Pixiv 等网站获取图片、标签。
  • 个性化模型。利用 AI 技术学习用户定义标签、喜好。

测试版本注意

使用前务必仔细阅读本节内容

1️⃣测试版将所有数据(图片、标注)全部保存在个人目录下的 moonset_data 文件夹。虽然数据目录现在还不能修改,但是 moonset_data/config.yaml 提供了一些可调整的配置项。

2️⃣对于图库图片导入,测试版会复制图片副本至数据库,且不会删除原文件。这主要是为了防止 bug 导致原本的图片丢失,如果你希望删除原文件,可以修改配置文件。导入分为两个阶段,第一阶段速度较快,完成后软件恢复响应,并启动第二阶段在后台运行。第二阶段速度慢,关闭软件后后台任务随之停止,在下次软件启动后不会自行恢复,目前需要手动在 Debug 页点击「处理特征」。第二阶段没有完全完成前,不保证所有图片、标签都能被搜索。在第二阶段如发现图片编码错误(严格检查),图片副本会被移动到 trash 目录下。导入图片不会记录原位置,如果你的图片文件夹结构有意义,请仔细考虑。

3️⃣对于图片重复检测,未保留图片会被直接删除。

4️⃣一些约定:双击图片的标签会删除该标签;如果显示有图片但列表却空白,请点一下「刷新」;右侧的浮动提示可以左键关闭;排序默认升序;加入日期实际为图片的创建日期。

5️⃣测试版有着大量潜在 bug,及时备份个人目录下的 moonset_data 文件夹。

下载

还没上传。

现在软件仍在测试阶段,bug 一堆,不能保证数据完全安全。

使用软件需要自行承担所有风险,如果不同意的话请不要使用。测试版默认开启 Telemetry,只用于收集导致程序崩溃的致命性 bug,可以通过修改 moonset_data/config.yaml 关闭,具体请参照软件内说明。


  1. 当然,如果图库里的图片非常集中,例如 10000 张图里 5000 张 A、5000 张 B,那就别指望这么快了。

Moonset 图片标签式管理工具
https://blog.chenc.me/2024/02/13/project-moonset/
作者
CC
发布于
2024年2月13日
许可协议