截图搜索:按图里的内容找截图,而不是按文件名翻
截图这件事的成本是不对称的:存的时候一秒,找的时候十分钟。文件名是一串时间戳,缩略图小得看不清字,而你脑子里记着的偏偏是「那张图里写着报销」。快咔的做法是让磁盘也按内容记一遍——截图落盘之后在后台把里面的字认出来、连同二维码内容一起入索引,再算一条语义向量;之后你在图库搜索框里敲的,是图里的内容,不是文件名。
最后更新 2026-09-08
为什么截图总是找不到
人脑存的是内容,磁盘存的是像素,中间缺一层。你记得「上周那张报销单」「那个人发的会议室地址」「报错弹窗里的那串路径」,而文件系统能提供的检索维度只有文件名、修改时间和文件夹——三者跟你记住的东西全都对不上。于是找一张截图的实际流程变成了按时间倒着翻缩略图,翻到眼睛累了就放弃,重新去问一遍别人。
通用的图片管理工具在这件事上帮不上忙,因为它们索引的是拍摄参数、地理位置、人脸——那是照片的元数据,不是截图的内容。截图的信息量几乎百分之百在像素里的那些字上:金额、单号、路径、时间、姓名、网址。不把字读出来,任何检索都是在猜。
所以这一层要补的东西很具体:把每张截图里的文字提取出来存成可检索的文本,再补一条能表达「意思相近」的向量,然后让这两种找法同时生效。快咔就做了这一件事,做在你自己的机器上。
它到底把什么放进了索引
索引不是一个黑盒——下面这四样是全部内容,没有第五样:
- OCR 文本:截图落盘后在后台跑一次本地 PP-OCR 识别,长边超过 1600 像素的先缩到 1600 再认。存进去的不是一堆零散的行,而是过了版式还原的文本:从每一行的框算倾斜、聚成视觉行、按 em 归一的间隙定阈值,段落该断的地方断开。
- 二维码内容:OCR 只认字,图案本身读不出来,所以会另外解一次码。解出来的内容(多半是网址)连同「二维码」这三个字一起入库——这样你搜「二维码」能捞到所有带码的截图,搜码里那个域名也能直接命中。
- 网页正文(默认关闭):截图上出现的网址往往只是入口,你真正要搜的是链接背后的内容。打开设置里的开关之后,系统会去抓那些网址的公开页面正文一起索引。这条路收得很紧:只认 http 和 https,单张截图最多抓 3 个网址,每个 10 秒超时,响应超过 3MB 直接丢弃,只接受 HTML 和纯文本类型,抓回来的正文截取前 4000 字。抓失败一律安静跳过,不影响这张图本身的索引。
- 一条 1024 维的语义向量:由本机的嵌入模型对上面那段文本算出来,以 Float32Array 的 base64 形式存盘,一条大约 5.5KB(直接写 JSON 数组要 20KB)。文本超过 1200 字的会分块算再取平均并归一化,比硬截断稳。
这些都可以自己核对:在图库里点开任意一张截图,预览工具条上有一个「索引内容」按钮,展开就是这张图真正被索引进去的那段文字,包括识别失败时的原因。搜索为什么找得到、为什么找不到,看一眼就明白,不用猜。
没有第五样的意思是:索引里没有你的账号,没有设备标识,也没有一份发到别处的副本。文件写在你自己的用户数据目录下。
关键词和语义两路一起找,命中来源写在卡片上
只做关键词,搜「报销」就找不到写着「差旅费用报账」的那张;只做语义,搜一个订单号或者一段异常路径又会飘。所以两路都做,然后融合。
关键词那一路:查询串直接是子串就满分命中;否则把查询和文本都切成词元——英文数字按连续片段、中文按二元组——算 Dice 系数。这条路不需要任何模型,装完就能用。语义那一路:把查询也编码成一条 1024 维向量,和每张截图的向量算余弦相似度。两路各自排好序之后按 RRF 融合,也就是按各自的名次算 1/(60+名次) 再求和——不需要把两种量纲不同的分数硬拉到一起比,这正是 RRF 的用处。两路都命中的那张自然排在最前面。
结果卡片上会直接标出这一张是被哪一路捞到的,还带一段命中位置前后的上下文片段,你不用点开就知道它为什么在这儿:
- 内容:关键词那一路捞到的。图里确实写着你敲的那几个字,或者字面很接近。
- 语义:只有向量那一路捞到的。图里没有你敲的字,但说的是同一件事——这类结果最容易让人「哦对,就是它」。
- 内容+语义:两路都捞到了。这种通常就是你要找的那张,排序上也会被顶到最前。
模型不随安装包发,装不装由你
两个模型加起来大约 1.1GB:待办提取用的 Qwen3.5 0.8B(Q4_K_M,约 508MB),语义检索用的 Qwen3-Embedding 0.6B(Q8_0,约 610MB)。把它们塞进安装包意味着每个只想截个图的人都要先下 1.1GB,这个取舍不合理,所以改成在设置页的「本地智能」里按需下载。
- 下载源默认 ModelScope(Qwen 官方托管、国内直连),另有 HF 镜像与 HuggingFace 官方两个备选。
- 断点续传:断了从断点接着下,不是从头再来。
- sha256 校验:文件下完按内容哈希核对,对不上一律当作没下过并删掉。半个 GGUF 在加载时报的错完全看不出是下载断了,这个坑不值得再踩一次。
- 离线导入:网络实在不行,可以在别的机器上下好再导进来,按文件大小和 sha256 自动识别是哪一个。
- 一个都不下也能正常用:截图、标注、钉图、长截图、取字全都不依赖这两个模型。
只缺嵌入模型的时候,图库搜索不会变成一个点了没反应的搜索框,而是自动退回纯关键词模式,并且在搜索栏下面明写着「关键词模式」——OCR 文本已经在索引里了,子串和二元组这条路本来就不需要模型。等模型下好,语义那一路自动接上,状态行会改成「语义检索已启用」。
搜不到的情况,我们直说
- 只搜已索引的。图库顶上直接写着「已索引 N/M」,N 小于 M 就说明后台还在识别。刚截的图要等它认完才搜得到,图库卡片上的文字会陆续出现,那就是进度。
- 只有落盘的截图才有索引。按 Enter 只进剪贴板、Ctrl+Shift+T 直接转文字这两条路都不出图,自然也不进索引。
- 图里没有字就搜不到。这是内容索引,不是图像识别——它不认识猫,也不认识某个人的脸,只认得出画面里的文字和二维码。
- 语义那一路的天花板由 0.6B 的嵌入模型决定。它能把「报销」和「报账」连起来,但别指望它做多跳推理。搜不准的时候换一个更接近图里原话的说法,命中率会立刻上去。
- 识别本身也有边界:截图上字太小、艺术字、竖排、严重倾斜,都会让 OCR 少认几行,索引里就少那几行。
- 索引和图库记录不是一回事。图库记录被裁掉、但原图文件还在磁盘上的老截图,照样搜得出来——这正是内容索引存在的价值。反过来,文件真被删掉了,对应的索引条目会在下次启动时清掉。
搜索相关的操作
搜索这条链路上你会用到的入口一共就这几个,都在图库和设置里:
| 按键 / 入口 | 作用 |
|---|---|
| Ctrl+Shift+A | 区域截图。截完保存下来的图会自动进入后台识别与索引 |
| 图库搜索框 | 敲图里的内容就搜,输入停下自动出结果;Esc 清空回到全部截图 |
| 卡片角标 | 内容 / 语义 / 内容+语义,标明这一张是被哪一路检索捞到的 |
| 预览 → 索引内容 | 看这张截图真正被索引进去的那段文字,识别失败会写明原因 |
| 图库 → 重建索引 | 清空重来。换了更好的模型、或者想让旧截图重新过一遍待办提取时用 |
| 设置 → 本地智能 | 下载 / 导入两个模型,开关待办自动提取与「网址内容纳入搜索」 |
旧截图不用你手动操心:启动 20 秒后系统会把图库里还没有索引的条目排进队列,从最早的开始补。20 秒这个延迟是有意的——启动那会儿要让位给你可能马上就按的截图快捷键。
常见问题
- 搜索会把我的截图传到云端吗?
- 不会。识别、向量、检索全部在你本机完成,索引文件写在你自己的用户数据目录下。软件一共只有三处网络请求:启动 5 秒后 GET 一次版本号(不带任何你的信息)、你点「下载模型」的时候、以及你自己打开「网址内容纳入搜索」之后去抓截图里那个网址的公开页面。后两条都可以不开。
- 不下载模型能不能搜?
- 能,退回关键词模式。OCR 文本在没有大模型的情况下也照常入索引,子串命中和中文二元组 Dice 这条路完全不需要模型。缺的只是「意思相近但用词不同」那一类召回,界面上会明写「关键词模式」,不会假装还有语义搜索。
- 以前截的图能搜吗?
- 能。启动 20 秒后会惰性回填图库里所有还没索引的截图,最早的先做,你不用做任何操作。想立刻全部重来,图库里有「重建索引」。
- 后台识别会不会拖慢截图?
- 有三道闸专门防这件事:后台任务出队前先查有没有正在进行的截图会话,有就等;截图会话一启动就中止在飞的那次生成;两个模型各自闲置 10 分钟就整体卸载。原则是 AI 不许让截图变慢。
- 索引会占多大空间?
- 很小。一张截图的向量约 5.5KB,加上那段 OCR 文本,一千张截图的索引通常在几兆到十几兆之间。真正占空间的一直是截图本身。
- 能搜二维码里的内容吗?
- 能。二维码会被单独解一次码,解出来的内容连同「二维码」这个词一起进索引,所以搜「二维码」能列出所有带码的截图,搜码里的域名也能直接命中那一张。