
以图搜图实战硬盘图片多到崩溃时ImageSearch 如何用指纹帮你秒级找回那一张【免费下载链接】ImageSearch基于.NET10的本地硬盘千万级图库以图搜图案例Demo和图片exif信息移除小工具分享项目地址: https://gitcode.com/gh_mirrors/im/ImageSearch想象一下这个深夜场景你在硬盘里翻一张三年前的旧照片只记得背景是海边、构图里有灯塔而它的文件名长这样——IMG_20210809_204817.jpg。Windows 自带搜索只能按文件名匹配你唯一的选择是点开一层层文件夹用肉眼扫过上千张缩略图。半小时后你放弃了。这就是今天要介绍的开源项目ImageSearch要解决的问题。它基于 .NET 10 开发用一张示例图就能在千万级本地图库中秒级检索相似图片还打包了一个ExifStraper 图片 EXIF 隐私清理小工具能把照片里隐藏的 GPS 定位、拍摄设备、作者信息一键抹掉。一套代码两个工具从找到图到保护隐私全搞定完全开源免费。它的原理只有一句话给每张图做指纹不用被以图搜图四个字吓到它的核心思路朴素得像指纹比对每张图片被算法压缩转换成一串数字指纹专业叫法图像哈希首次检索时程序把整个图库的指纹批量算好并缓存成索引你丢进来一张示例图它算出示例图的指纹和索引库逐一比对按相似度从高到低返回结果。关键优势在于图片被压缩、调色、加过小水印甚至只是裁剪了边缘它的指纹核心特征依然保留照样能被认出来。这也是为什么它能对抗IMG_20210809_204817.jpg这种毫无信息量的文件名。小贴士首次建索引会慢一些但索引会自动缓存之后每次搜索都是秒级响应。如果电脑装了 Everything程序还会自动调用它加速目录扫描——想关掉这个联动把程序目录下的Everything64.dll删掉即可。第一次动手四行命令把两个工具跑起来环境要求很宽松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-windows7.0/目录下双击以图搜图.exe即可启动。首次体验就三步建索引把图库文件夹拖进目录输入框等待索引构建完成给样本把示例图拖进图片输入框——或者更省事先在任意地方按CtrlC复制一张图回到搜索窗口直接CtrlV粘贴看结果回车出结果双击任意条目直接打开原图。另外那个 EXIF 清理小工具是命令行程序单独编译后一行命令就能批量处理整个目录cd Straper dotnet build Straper.csproj -c Release Straper.exe D:\个人照片默认只清理隐私敏感字段GPS 定位、拍摄设备、作者版权、IPTC / XMP 元数据等加-a参数则开启全部字段清除的暴力模式。它还附带一个贴心功能处理完照片后会自动把文件夹名里的繁体中文转成简体。三档人群的打开方式普通用户把手机照片上传社交平台前跑一遍Straper.exe D:\相册几万张图几分钟清完彻底告别我在哪、用什么设备拍的被动泄露。想更懒先执行一次Straper.exe reg-menu注册右键菜单之后在任何文件夹或图片上右键即可一键调用。摄影师成片按年份-月份归档后一次性拖入索引把手机上随手拍的样图发到电脑丢进搜索框再把相似度阈值拉到 0.9 以上就能从几万张废片中精准捞出同一场景的近似片。建议给不同项目建独立图库别把客片和私拍混进同一个索引。设计师说不清想要某个绿色调的扁平化插画脑子里只有一个画面把相似度阈值设在 0.70.8 之间能捞回更多神似的灵感素材发现高度相似的素材时顺手用 ExifStraper 清一遍元数据再交付保护双方隐私。搜不准怎么办三把尺子和一套阈值主程序内置三种图像哈希算法像三把精度不同的尺子算法速度精度适合场景DifferenceHash最快一般海量图片快速初筛预览级匹配DctHash32快较好速度与准确度的平衡日常通用DctHash64较慢最高高精度比对设计稿查重、近似重复照片怎么选只是找长得差不多的图DifferenceHash 足够专业查重请直接切 DctHash64。默认相似度阈值是 70%——这是作者反复测试得出的经验值低于 70% 的图肉眼看上去已经是完全不同的两张了。高频翻车现场避坑清单现象原因解法首次搜索很慢正在构建索引耐心等一次之后秒级响应相似图没搜出来阈值设太高降到 0.60.7 再试混进来一堆无关图阈值太低升回 0.750.85GIF 检索结果异常动图匹配逻辑特殊程序已支持逐帧提取比对确认开启对应算法旋转过的图找不到未开启旋转检查搜索时勾选检查旋转程序启动报权限错误未以管理员身份运行默认配置会自动请求提权或手动右键以管理员身份运行你知道吗如果启用了以管理员身份运行网页拖拽上传搜索可能失效——浏览器的拖拽权限受 UAC 限制。平时保持默认就好遇到文件写入权限问题再开启。进阶玩法把 GUI 工具变成一台本地检索服务主程序目录下的config.ini握着三个开关[Global] ; 自动更新索引启用后将每小时自动更新一次 IndexAutoUpdatetrue ; 启动http服务启动后可以调用HTTP API RunServerfalse ; Http服务端口号 HttpPort5000 ; 是否允许强制以管理员身份运行启用后网页拖拽搜索可能会失效 RunAsAdmintrue把RunServer改成true后重启程序它会自动在 5000 端口挂起 HTTP 服务。访问http://localhost:5000/api还能看到 Scalar 交互式接口文档。主要接口只有两个方法路径说明PATCH/index?dir目录removeInvalidtrue创建或更新指定目录的索引POST/search上传图片并搜索返回相似结果/search支持多个参数file图片文件、similar相似度默认 75、algorithm1DifferenceHash2DctHash324DctHash647全部、checkRotated检查旋转、checkFlip检查翻转。配上 Python就能把以图搜图接进你自己的自动化工作流import 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[路径]})该动手了这项目解决的三个问题很朴素图多到找不到、隐私藏在照片里、本地工具缺一个能编程调用的接口。它不炫技把千万级图片秒级检索做成了拖一下、按两下就能用的日常工具。新手按上面的命令把两个工具跑起来先体验一次拖图即搜中级打开config.ini三个开关试试 HTTP API 的接口调用高级克隆代码读一读以图搜图/Services/ImageSearchService.cs里的并行检索实现动手提交你的第一个 PR。别让你的图库继续沉睡在硬盘里了。去把 ImageSearch 克隆下来亲手搜出第一张记忆中的照片吧。【免费下载链接】ImageSearch基于.NET10的本地硬盘千万级图库以图搜图案例Demo和图片exif信息移除小工具分享项目地址: https://gitcode.com/gh_mirrors/im/ImageSearch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考