本地图片以图搜图实战ImageSearch 让百万张旧照片 1 秒现形顺带一键清空照片隐私【免费下载链接】ImageSearch基于.NET10的本地硬盘千万级图库以图搜图案例Demo和图片exif信息移除小工具分享项目地址: https://gitcode.com/gh_mirrors/im/ImageSearch“我记得这张照片天特别蓝有个红色的房子左下角还有一只猫”——但你不知道它叫什么文件名不知道放在哪个盘更不可能一张张去翻。这是每个硬盘里积攒过十年照片的人都会撞上的窘境。以图搜图也就是按“长得像不像”去找图正是解开这个死结的钥匙。今天要介绍的 ImageSearch就是一套开箱即用的本地以图搜图开源方案基于 .NET 10 编写号称在千万级图库里也能秒出结果同时还附赠一个能批量抹掉照片 EXIF 隐私数据的命令行小工具。下面我们就从它的原理讲起一步步把它跑起来。一、先搞清楚以图搜图到底靠什么“认”出相似图Windows 自带的搜索只认文件名而真正的以图搜图靠的是图像哈希Image Hash。你可以把一张图想象成一串遗传密码算法会忽略图片的分辨率、压缩率只提取“画面大致长什么样”这个核心特征压缩成一段几十位长的数字签名。两张图只要核心结构相近它们的签名就会高度重合。这套方案里没有用笨办法而是把对比工作拆成两步建档扫描整个图库给每张图算出签名连同路径一起缓存成索引文件也就是程序目录下的index.json和frame_index.json检索拿示例图的签名去索引里批量比对按匹配度倒序输出结果。第一次建档会花些时间之后索引会自动落盘再搜索就是查字典级别的速度了。这也是它能做到“秒级”的真正原因。小知识动图GIF是特殊待遇——程序会把它逐帧提取每一帧都生成签名相关代码在以图搜图/Services/ImageSearchService.cs里所以拿动图去搜同样能命中对应帧的静态图。二、ImageSearch 到底打包了什么一主一辅两个家伙各管一摊克隆下来的项目里其实躺着两个独立程序各自编译、各自运行谁也不干扰谁。主程序“以图搜图”拖进来就搜这是那个带界面的 WPF 程序干的就是上面说的检索活儿。它支持三种图像哈希算法各有各的脾气算法建档速度匹配精度建议用途Difference Hash最快一般图库特别大时用来初筛图个“大概像”DCT Hash 32较快较好日常找图的主力速度精度都够用DCT Hash 64较慢最高找近似重复图、给素材库查重界面操作非常直觉化把图库文件夹拖进“目录”输入框建立索引再把示例图拖进“图片”输入框回车即搜。你甚至不用落盘文件——CtrlC 复制一张图回程序里按 CtrlV 直接搜剪贴板里的位图、文件路径、甚至网页里的图片都能接住。结果列表里双击任意一条还能直接打开原图所在位置。命令行小工具 Straper给照片“卸妆”手机、相机拍出来的照片默认都带着一串EXIF 元数据GPS 经纬度、海拔、时间戳、相机型号、镜头参数、作者、版权、IPTC/XMP……这些信息平时看不见但一旦把原图发到网上等于把“我在哪、用什么设备拍的”主动报给了全世界。Straper 就是用来“卸妆”的整批拖进一个目录它自动清掉上述隐私字段连文件夹名里的繁体字都会顺手转成简体全程无需打开任何界面。三、从零跑起来四个命令十分钟出第一份检索结果环境要求不高Windows 7 及以上、装好.NET 10 Desktop 运行时机器有 4 核 CPU 和 8GB 内存就够用内存自然是越多越舒服。打开终端按顺序执行git clone https://gitcode.com/gh_mirrors/im/ImageSearch cd ImageSearch # 恢复依赖 dotnet restore 以图搜图/以图搜图.csproj # 编译主程序 dotnet build 以图搜图.sln -c Release编译产物在以图搜图/bin/Release/net10.0-windows/下双击以图搜图.exe就能启动。首次使用只需三步把要检索的图库文件夹拖入“目录”输入框点“更新索引”等进度条走完索引会自动缓存之后秒开把示例图拖进“图片”输入框回车看结果。小知识如果你机器上装了 Everything 软件程序会自动调用它来加速目录扫描不想要这个联动把程序目录下的Everything64.dll删掉即可。四、三种典型用法照片整理、团队素材库、发图前的“消毒”同样是这套工具不同人能用出不同花样。老照片归档按“画面记忆”找回 10 年前的自己给父母整理老照片时最痛苦的就是“我记得有张照片里外婆穿着红毛衣”但文件名全是IMG_2021_0817_0034.jpg。把整批扫描件拖进索引再用手机里翻拍的那张旧照当示例图去搜相似的那几张立马浮出水面。把相似度阈值拉到 90% 以上还能顺手挑出重复扫描、多张连拍里几乎一模一样的废片一次清掉硬盘里的垃圾。团队素材库给设计资产配一台“风格雷达”设计师的素材盘少说几千张想要“某个绿色调的扁平插画”却描述不出来。把素材库建成索引后随手截图或网上下载一张参考图拖进去就能把风格相近的一串素材全捞回来比在收藏夹里翻半天高效得多。团队交付给客户的素材建议顺手用 Straper 清一遍 EXIF避免把内部路径、拍摄信息一并交出去。自媒体发图三秒给照片“消毒”再上传拍完美食照、风景照随手发社交平台很多人没意识到 GPS 坐标就藏在文件里。用 Straper 一次性清干净cd Straper dotnet build Straper.csproj -c Release # 清理某个目录下的所有照片 Straper.exe D:\个人照片更省事的做法是注册右键菜单Straper.exe reg-menu之后在任意文件夹或图片上右键就能一键调用连命令行都不用敲。默认只清隐私字段想连图注、描述等冷门信息也一并抹掉加个-a参数开“全字段清除”即可。五、搜不准三个旋钮帮你调出最佳手感检索结果不理想时问题多半出在下面三个地方相似度阈值默认 70% 是作者反复试验出来的经验值——低于这个值肉眼看上去已经是完全不同的两张图了。想多捞些“神似”的灵感调到 65%~70%想只留“同场景近似片”升到 85% 以上。旋转与翻转检查手机照片转了个 90° 就搜不到那是没开旋转检查。搜索时勾选“检查旋转”“检查翻转”程序会把示例图旋转 90°/180°/270°、水平/垂直翻转后各比对一轮代价是多花几倍算力。算法选型拿不准时选“全部”让三种算法一起上嫌慢就先只用 Difference Hash 初筛一轮。六、进阶玩法三行配置把它变成“本地图片搜索服务”程序目录下的config.ini只有三个开关却藏着把工具升级成服务的钥匙[Global] ; 自动更新索引启用后将每小时自动更新一次 IndexAutoUpdatetrue ; 启动http服务启动后可以调用HTTP API RunServerfalse ; Http服务端口号 HttpPort5000 ; 是否允许强制以管理员身份运行启用后网页拖拽搜索可能会失效 RunAsAdmintrue把RunServer改成true再启动程序就会在 5000 端口挂起一个 HTTP 服务浏览器打开http://localhost:5000/api还能看到交互式接口文档Scalar UI。主要就两个接口方法路径说明PATCH/index?dir目录removeInvalidtrue创建或更新指定目录的索引POST/search上传图片并搜索相似结果/search的可选参数有file图片文件、similar相似度默认 75、algorithm1DifferenceHash2DctHash324DctHash647全部、checkRotated查旋转、checkFlip查翻转。有了它就能把以图搜图塞进自己的自动化流程比如用 Pythonimport requests resp requests.post( http://localhost:5000/search, files{file: open(query.jpg, rb)}, data{similar: 75, algorithm: 7, checkRotated: True} ) for item in resp.json(): print(f相似度: {item[匹配度]:.2%} 路径: {item[路径]})小知识如果开着“以管理员身份运行”浏览器拖图到窗口里的操作可能会失效因为 UAC 会限制网页的拖拽权限。平时保持默认即可遇到文件写入权限问题再开启。七、常见问题速查现象原因处理办法第一次搜索很慢正在建索引耐心等这一次之后秒级响应相似图漏搜阈值太高降到 0.60.7 再试混进大量无关图阈值太低升回 0.750.85旋转过的图找不到没开旋转检查搜索时勾选“检查旋转”GIF 搜不到对应图需逐帧比对程序已内置逐帧提取确认算法里勾选了对应项启动报权限错误非管理员运行右键“以管理员身份运行”八、接下来你可以做什么如果你正被“图多得找不到、照片隐私随手泄露”这两件事困扰ImageSearch 值得马上上手先按上面的四个命令把它跑起来拖一张旧照片感受一下秒出结果的爽快再用 Straper 给准备上传的照片做一次“体检”看看 EXIF 里到底藏了多少信息。想深入了解的可以直接读源码以图搜图/Services/ImageSearchService.cs是并行检索的核心以图搜图/ViewModels/MainViewModel.cs里写着界面与服务的全部联动Straper/Program.cs则是 EXIF 清理和右键菜单注册的逻辑。这项目完全开源免费如果顺手动手改了点什么欢迎把改进提交回上游——无论是优化特征提取让检索更快还是针对超大图库压一压内存占用都是实打实能帮到所有人的方向。别让硬盘里的照片继续沉睡下去了去把 ImageSearch 克隆下来搜出你记忆中的那一张吧。【免费下载链接】ImageSearch基于.NET10的本地硬盘千万级图库以图搜图案例Demo和图片exif信息移除小工具分享项目地址: https://gitcode.com/gh_mirrors/im/ImageSearch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考