
Echo:面向Windows的离线语义图片搜索工具,基于CLIP与FAISS
来源标题:Show HN: Echo – Offline semantic image search for Windows (CLIP and FAISS)
Echo是一款完全本地运行的Windows离线语义图片搜索工具,用户用自然语言描述即可查找照片。它使用CLIP模型将图片和文本转为向量,再通过FAISS检索,模型、索引和照片均不离开本机,设置完成后无需联网。工具支持Win+Shift+F全局热键、输入即搜、自动索引图片文件夹及实时监控新增照片。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
一款完全本地、离线的 Windows 语义图片搜索工具。用大白话描述你想找的内容——“水面上的日落”“沙发上的狗”“上周的收据”——Echo 就能立刻找到匹配的照片,全程不向云端发送任何数据。
无需账号。初始设置完成后无需联网。你的照片及其嵌入向量不会存储在任何云端。一切都在你自己的机器上运行。
Echo 使用 CLIP(openai/clip-vit-base-patch32)在本地为你的照片建立索引,该模型会将图片和文字描述转换成同一嵌入空间中的向量。搜索就是把你的查询转换成向量,然后用 FAISS 找出最接近的图片向量。所有这一切都在设备本地完成——模型、索引和你的照片始终不会离开你的电脑。
全局热键(Win+Shift+F)可从 Windows 任意位置唤出浮动搜索面板 即时搜索,输入即得结果,覆盖所有已索引文件夹 首次运行自动设置——首次启动时自动索引你的“图片”文件夹 实时文件夹管理——添加/移除索引文件夹,并显示实时进度 文件系统监听——放入已索引文件夹的新照片会被自动收录 索引开始/完成时显示托盘通知 界面体验如同 Windows 原生功能,而非第三方应用 完全离线——初始设置完成后无需网络连接 技术栈 后端——Python 3.11、FastAPI、经由 HuggingFace Transformers 使用的 CLIP、FAISS、SQLite 前端——C# / .NET 8、WinForms、WebView2(HTML/CSS/JS 界面)、用于亚克力模糊效果的 DWM API echo/ ├── backend/ │ ├── main.py — FastAPI 应用及所有端点 │ ├── model.py — CLIP 模型加载 │ ├── indexer.py — 图片嵌入 + FAISS 索引 │ ├── searcher.py — 文本查询嵌入 + 搜索 │ ├── database.py — SQLite 操作 │ ├── watcher.py — 用于自动索引的文件系统监听器 │ ├── paths.py — 解析用户数据与打包资源的存放位置 │ └── echo-backend.spec — PyInstaller 构建配置 ├── frontend/EchoApp/ │ ├── Program.cs — 入口点 │ ├── BootstrapAppContext.cs — 首次运行时后端设置,位于消息循环内 │ ├── AppContext.cs — 托盘图标、热键、首次运行自动索引 │ ├── BackendManager.cs — 启动/管理 Python 后端进程 │ ├── BackendDownloader.cs — 首次运行时下载后端包 │ ├── IndexingWatcher.cs — 轮询索引进度、托盘通知 │ ├── SearchWindow.cs — 浮动搜索界面 │ ├── FolderManagerWindow.cs — 文件夹管理界面 │ ├── EchoBridge.cs — WebView2 界面的 JS ↔ C# 桥接 │ └── ui/ — HTML/CSS/JS 前端 └── echo-setup.iss — Inno Setup 安装脚本 安装器为何设计成这样 后端打包了 CLIP、PyTorch、Transformers 和 FAISS——打包后体积达 600MB 以上,对轻量安装器来说太大了。因此安装器只附带(体积较小的)前端;首次启动时,应用会从本仓库的 Releases 页面下载后端包,用 SHA-256 校验和验证后解压——这是一次性设置步骤,有独立的进度窗口。
用户数据(SQLite 数据库、FAISS 索引和缩略图缓存)存放在 %LOCALAPPDATA%\Echo 中,与应用本身的安装位置无关。
从 Releases 页面下载最新安装器并运行。首次启动时,Echo 会下载并设置其搜索引擎(几百 MB,一次性),完成后即可使用。
cd backend python -m venv .venv .venv\Scripts\Activate.ps1 pip install -r requirements.txt uvicorn main:app --reload 前端: cd frontend/EchoApp dotnet run 自行构建安装器
1. 构建后端
cd backend pyinstaller echo-backend.spec
2. 打包并托管它(例如作为 GitHub Release 资源),然后更新
BackendDownloader.cs 中的 BackendDownloadUrl 和 ExpectedSha256 常量
3. 发布前端
cd frontend/EchoApp dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true
4. 用 Inno Setup 编译 echo-setup.iss
已知限制 CLIP 在真实照片上的表现略优于风格化/动画内容(壁纸、海报、卡通截图) 仅支持 Windows(WinForms + WebView2) 路线图 ONNX 量化模型,以加快 CPU 索引速度 OCR 层,用于按图片中包含的文字查找照片(截图、收据、标牌、文档) 视频支持——提取并索引帧,使视频文件也能像照片一样被搜索 许可证 MIT——详见 LICENSE。
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。