小店的每日流水还写在纸质账本上,想进表格就得有人一个字一个字敲。市面上能自动识别的工具,大多要求把店铺记录上传到它们的服务器,再按页收费。Ledger Lift 走的是另一条路:拍一张账本照片,在本机读出可编辑的行,最后导出 CSV,照片始终留在自己电脑里。
![]()
操作路径很短。选一张账本页照片,点「Read this page」,日期、商品、数量、金额这些行会随着模型读取一行一行冒出来。识别错的地方手动改,有多页就继续加,每行勾选确认后,把所有页合并下载成一个 CSV。
模型用的是 qwen3-vl:2b-instruct,一个开放权重的视觉模型,通过 Ollama 在本机运行。作者没有选普通的 qwen3-vl:2b 标签,原因是那个版本在给出任何答案前要先「想」30 到 100 秒。想换别的模型,界面上有模型选择器。
应用本体是 Electron 加 React 界面(shadcn/ui 与 Tailwind v4)。主进程负责照看 Ollama:启动和停止它、带进度条下载模型(约 2 GB,只需一次)、在翻页之间保持模型加载,并把读出的每一行尽快推给界面。页面本身跑在沙箱里,没有 Node 访问权限。
多数店主电脑上并没有装 Ollama。缺了它,应用会直接提示,并用「Download Ollama」按钮打开下载页;装完不需要管理员密码,应用自己察觉安装结束并接着往下走。
让一个 2B 模型稳定干活,作者用了几个具体手段:
- 照片长边缩到 1600 px。手机原图尺寸会撑爆模型的上下文窗口。
- 提示词要求模型从最后一列金额里读每笔交易的总数,遇到同上符号时沿用上一行的日期。
- 小模型有时会卡住,把同样的行反复写。应用能识别这种循环,停下来并保留循环之前的行。
作者不希望任何人盲信输出。模型读不出某个字段、或对某位数字没把握时,该字段会被高亮;在所有行都标记为已核对之前,CSV 下载按钮保持关闭。
为了量化准确度,作者写了 pnpm score:用真实模型跑真实页面,和手工录入的答案文件比对,报告逐字段准确率、漏掉的行、凭空多出的行,以及出错的字段是否正好是被高亮的那些。
一个 GitHub Actions 工作流负责构建并冒烟测试 Windows 安装包,安装范围仅限当前用户。单元测试跑在模拟的 Ollama 服务器上,Playwright 则端到端驱动真实应用。在 Apple M4 上,一页 15 行的账本大约需要 21 秒,第一行在约 10 秒后出现。
账本是私密的经营数据。开放权重模型在本机跑,页面就不必交给别人控制的服务器;模型下载完之后,断网也能用。没有按页计费的托管推理账单,店主也就不被别人的单页定价或订阅绑住。模型和提示词是开放的,用户可以换用其他兼容模型,也能看清抽取到底怎么做的。
它并不完美。手写识别会出错,每一行都得对着原页核一遍。作者目前只评了两页手写账本(约 9 行和 16 行),金额和数量大多正确,日期和多词商品名则偏弱。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.