公司动态
硬盘里藏了十万张图却找不到那一张?ImageSearch 让本地图库检索变成拖一下的事
硬盘里藏了十万张图却找不到那一张ImageSearch 让本地图库检索变成拖一下的事【免费下载链接】ImageSearch基于.NET10的本地硬盘千万级图库以图搜图案例Demo和图片exif信息移除小工具分享项目地址: https://gitcode.com/gh_mirrors/im/ImageSearch你是不是也有过这样的崩溃瞬间截图、壁纸、素材、老照片攒了一硬盘文件名清一色是IMG_20210809_204817.jpg这种天书某天急需某次旅行拍的海边灯塔那张图却只能翻文件夹翻到怀疑人生Windows 自带的搜索按文件名匹配而你的图片库早就超出了文件名能描述的范畴。ImageSearch就是来收拾这个烂摊子的开源项目它基于 .NET 10 打造主打本地千万级图库秒级以图搜图还顺手送了你一个EXIF 隐私清理小工具一个仓库、两个独立程序把找图和保护照片隐私这两件麻烦事一次办完。先弄明白它凭啥能秒搜图像哈希的原理一句话讲透市面上所有以图搜图工具底层都干同一件事把每张图压缩成一段数字指纹学名叫图像哈希。做法很朴素——先把图片缩到很小的灰度图这项目缩到 160 像素级别再通过算法算出一串哈希值。哪怕原图被压缩过、调过色、贴过水印这串指纹依然保持稳定就像人脸戴了墨镜你依然认得他。搜索时程序把你丢进来的示例图也算一遍指纹然后和整个图库的指纹逐一比对按相似度排序返回结果。整个过程不需要理解图像内容纯靠数值运算所以快。两个细节值得注意GIF 不是整图算一次而是逐帧提取比对。动图每一帧单独算指纹检索时按帧匹配所以动图素材也能找到神似的静帧支持旋转与翻转检查。勾上检查旋转程序会把示例图旋转 90°、180°、270° 各算一次指纹横着的图、竖着的图都能捞回来。三步跑起来克隆、编译、拖图走完全程不到十分钟先说环境一台Windows 7 及以上的电脑装上.NET 10 Desktop 运行时处理器 4 核以上、内存 8GB 起步图库越大内存越吃香。开发机建议用 Visual Studio 2026。第一步拉代码git clone https://gitcode.com/gh_mirrors/im/ImageSearch cd ImageSearch第二步恢复依赖并编译dotnet restore 以图搜图/以图搜图.csproj dotnet build 以图搜图.sln -c Release第三步启动主程序cd 以图搜图/bin/Release/net10.0-windows/ 以图搜图.exe进去之后的操作简单到不像话把你要检索的图库文件夹拖进目录输入框点索引等待进度条走完首次构建会慢一些之后秒开把示例图拖进图片输入框或者复制图片后直接CtrlV回车结果按相似度从高到低排好双击任意条目直接打开原图。小贴士索引会自动写入程序目录下的index.json和frame_index.json两个文件下次启动直接加载不用重新建。如果电脑里装了 Everything程序会自动调用它加速目录扫描不想要这个联动把程序目录下的Everything64.dll删掉即可。三种哈希算法怎么选速度换精度还是精度换速度主程序内置三种算法相当于三把不同刻度的尺子以图搜图/Models/MatchAlgorithm.cs里定义得很清楚算法枚举值速度精度适合场景DifferenceHash1最快一般超大图库快速初筛看个大概像不像DctHash322较快较好日常通用速度和准确度的平衡点DctHash644中等最高查重、找近似重复照片追求精准全部7慢综合三种算法一起比对结果最全选择逻辑很简单想要广撒网捞相似图用 DifferenceHash 足够给设计稿查重、找重复照片切到 DctHash64拿不准就选全部。相似度阈值默认是 70%这是作者反复测试出来的经验值——低于 70% 的图肉眼看上去已经是两张完全不同的图了再往下搜纯属浪费算力。想搜得更宽松就把阈值往 0.60.7 拉结果里混进太多无关图就升回 0.750.85。你知道吗阈值只是个过滤器真正决定搜索质量的是算法组合。专业查重场景建议 DctHash64 高阈值双管齐下兼顾召回率和准确率。三类人的三种打开方式这工具在不同人手里是不同用法摄影师从几万张废片里捞那一张婚礼跟拍两千张、旅拍又是一千张全堆在按日期命名的文件夹里。别一个个翻把成片按年份-月份分好文件夹一次性拖进索引然后把手机随手拍的样图发到电脑拖进搜索框相似度拉到 0.9 以上同一场景的近似片瞬间浮出水面。专家建议不同项目建独立图库别把客片和私拍混在一个索引里避免交叉干扰。设计师说不清关键词就用图片本身说话某个绿色调的扁平化插画当背景——这种需求你没法打字搜但你能在心里看见它。把脑海里的参考图丢进搜索框阈值设在 0.70.8 之间捞神似灵感CtrlC 复制源图、CtrlV 直接粘贴连拖拽都省了。找到高度相似的素材交付前顺手用配套的 ExifStraper 清一遍元数据保护客户隐私。普通用户上传照片前先给 GPS消毒现在的手机照片几乎默认带 GPS 经纬度。发到社交平台之前不清理懂行的人能顺着 EXIF 里的坐标摸到你楼下。这时就轮到仓库里那个命令行小工具出场了。顺手清掉照片的隐私卧底ExifStraper 命令行实操第二个程序在Straper/目录下是个独立小工具。编译cd Straper dotnet build Straper.csproj -c Release然后直接把整个文件夹拖给它Straper.exe D:\个人照片它会把目录树里所有 jpg/jpeg/bmp 的 EXIF 隐私字段全部抹掉包括但不限于GPS 定位、海拔、时间戳等地理信息相机型号、镜头参数等拍摄设备信息作者、版权、关键词、描述IPTC / XMP 等其他元数据想更省事先注册右键菜单Straper.exe reg-menu之后在任何文件夹或图片上右键选ExifStraper一键清理全程不用打开窗口。加-a参数还能开启全部字段清除的暴力模式。顺手一提它连文件夹名里的繁体字都会转成简体强迫症福音。高频问题避坑清单现象原因解法第一次搜索特别慢正在构建索引耐心等一次之后索引缓存秒级加载相似图没搜出来阈值设太高相似度降到 0.60.7 再试结果里混进无关图阈值太低升回 0.750.85GIF 检索不对动图逻辑特殊程序已支持逐帧匹配确认算法里勾了对应项旋转过的图找不到没开旋转检查搜索时勾选检查旋转启动报权限错误未以管理员运行默认配置会自动请求提权或右键以管理员身份运行进阶玩法把以图搜图变成你的本地搜索服务程序目录下的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检查翻转。返回结果里每条记录带匹配度、路径、匹配算法、大小、所属文件夹大小、所属文件夹文件数等字段。配一段 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[路径]})小贴士开了以管理员身份运行RunAsAdmintrue时网页拖拽上传搜索可能会失效因为浏览器拖拽权限受 UAC 限制。平时保持默认遇到文件写入权限问题再开。想深入的话以图搜图/Services/ImageSearchService.cs里的并行检索实现值得读一读——它按 CPU 核心数 ×4 开并发SSD 和 HDD 走两套完全不同的索引策略HDD 先按内存配额预读再并行哈希这些设计就是千万级秒搜的秘密所在。下一步按你的段位来新手照着上面的步骤克隆、编译、拖图先体验一把拖图即搜的快感再用 ExifStraper 给你的手机照片集体消毒进阶玩家玩转config.ini三个配置项开启 HTTP API试着用 Python 脚本把检索接进自己的整理流程高级用户读ImageSearchService.cs的并行实现研究 HDD/SSD 差异化索引策略动手给项目提第一个 PR——改进特征提取、优化超大图库的内存占用都是现成的贡献方向。别让你的图库继续沉睡在硬盘里了。去把它克隆下来亲手搜出第一张记忆中的照片——说不定当年那个再也找不到的瞬间就藏在你拖进窗口的下一秒里。【免费下载链接】ImageSearch基于.NET10的本地硬盘千万级图库以图搜图案例Demo和图片exif信息移除小工具分享项目地址: https://gitcode.com/gh_mirrors/im/ImageSearch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考