惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
J
Java Code Geeks
A
About on SuperTechFans
F
Fortinet All Blogs
B
Blog
aimingoo的专栏
aimingoo的专栏
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
Y
Y Combinator Blog
有赞技术团队
有赞技术团队
G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
V
V2EX
博客园_首页
博客园 - 叶小钗
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
Docker
云风的 BLOG
云风的 BLOG

See you soon

哟,好久不见,无线打印 | See you soon 试试将文章版本化管理吧 | See you soon 使用 Quadlet 将 Podman 中的 Postgres 当作 systemd 服务运行 | See you soon 大他者,那个无时无刻都在盯着你的东西 | See you soon Laws of Software Engineering,软件工程定律 | See you soon 浅记多因素身份认证 | See you soon Linux 内核中的度量单位 | See you soon 重置 GPG 智能密钥 | See you soon 向 NAS 引入 samba | See you soon 无法重复键入的 Fcitx5 | See you soon ZFS 降级事故 | See you soon 记被 XanMod Kernel 和 AppArmor 联合坑的一次踩坑 | See you soon agent 的 skill 与 toolcall | See you soon 记一次服务器被挂恶意挖矿二进制 | See you soon 活着的 Arc | See you soon 令 acme.sh 使用 Cloudflare 的 DNS API 签发与续签证书 | See you soon 于 Tokio 中卸载 CPU Bound 任务 | See you soon 如我所见,梦破碎的时候 | See you soon 74LS 家族手册 | See you soon JDK Projects 备忘录 | See you soon 关于历史 | See you soon 用 curl 下载 OnePlus 的 ROM | See you soon 实用命令切片 | See you soon 再见,Oh My Zsh。 | See you soon 你不应该复用 strings.Builder | See you soon 博客的明日 | See you soon 被 AppArmor 击杀的 Dockge | See you soon AI 时代的自我 | See you soon 支持删除的布隆过滤器 | See you soon 基于栈的虚拟机与基于寄存器的虚拟机 | See you soon
图片搜索笔笺 | See you soon
Krysztal Huang · 2024-12-27 · via See you soon

图片搜索笔笺

这篇文章只是简单笔记,具体实现方式不作细致讨论

相似图合并实现

相似图合并组合了如下几种方案

  • 通过向量数据库搜索相似图
  • 通过文件哈希搜索相似图片
  • 通过灰度哈希搜索相似图片

通过向量数据库搜索相似图

该方案已应用于相似图搜索,因此该方案为主要搜索手段

在使用向量数据库搜索相似图片时涉及到向量距离的问题,我们可以认为两张图的特征向量距离越近则越相似。

该方案可以提取一张图的所有内容相似的图片。对于连续相似的 100 张图片序列而言,假设其每张图片向量特征距离为 0.01,那么在向量距离为 0.1 之下则均会被搜索出来

原理解释

在下文我们使用该方式来表达一组序列:{A..n}(x) 其中{A..n}代表图片的下标,(x) 代表该图片距离当前序列的参考向量的距离。

假设我们这组序列总共有两百张图片(换句话来讲,数据库中总共 200 张),并且每张图片之间的向量距离以 0.01 递增

A000(0.00) A001(0.01) A002(0.02) A003(0.03) A004(0.04) ... A100(0.10) ... A200(0.20)

考虑到我们的距离参数为 0.1,则以数据库中第一张图片 A000 开始搜索,那么我们会得到如下结果:

[0]:{A001, A002, ..., A100},

[1]:{A101, A102, ..., A200},

若我们将距离参数设置为 0.5,则以数据库中第一张图片 A000 开始搜索,那么我们会得到如下结果:

[0]:{A001, A002, ..., A050},

[1]:{A051, A052, ..., A100},

[3]:{A101, A102, ..., A150},

[4]:{A151, A152, ..., A200},

参与过的图片不会再参与搜索,他们会被排除掉。

问题

该方案依赖于数据库所有的图片均被训练,对于大批量数据极其有效并且快速。

但该方案需要图片已经被训练提取过特征,假如图片数量过大则需要等待图片训练完成才可能获得其向量,对用户的体验影响较为明显

因此需要引入一种效果略差但能提升用户体验的方案,以哈希为标准的查重方法。

通过文件哈希合并图片

该方案依赖于入库时计算对应的哈希,该方案能在用户关闭 AI 训练的前提下提供一定的去重查重能力。

但该方法受到图片的编码、色彩、大小等影响,因此提供的查询有限。但依然可以作为一种查询方式。

通过图片灰度特征查找相似图片

通过图片灰度特征查找相似图片是一种较为传统的方式——该方式对性能要求较低但依然需要入库时计算该图片的灰度特征哈希。

在对图片处理得出一定大小的灰度图后处理得到灰度特征,然后存入数据库内保留以备以后使用。

缺陷

由于搜索图片的灰度特征需要使用汉明距离(Hamming Distance),如果要对所有入库的图片进行高效搜索那么需要数据库提供对应的支持。使用 SQLite 则完全不支持汉明距离。