所有文章

公众号已发布稿

我开源了个 Mac 发票 OCR 工具,不接 API 也能转 Excel

用 macOS 自带 Apple Vision 做本地文字识别,把一批发票先整理成 Excel,再交给人复核关键字段。

公众号封面:Mac 发票 OCR 小工具

最近做了一个很小的开源工具。

它解决的问题也很小:把一批发票整理成 Excel。

项目地址在这里:

https://github.com/mrliang-github/cn-vat-invoice-ocr

这个工具目前主要适合 Mac 用户。它没有接第三方 OCR API,核心用的是 macOS 自带的 Apple Vision OCR,在本地把发票图片里的文字识别出来,再整理成 Excel。

我一开始没想到这个方案能跑通。

因为我以前默认觉得,OCR 这件事要么接云服务,要么用大模型。

后来真的试了一下才发现,如果只是先把票面文字识别出来,Mac 自带的能力已经比我预想的好很多。

起因就是一批发票

这件事的起因很普通。

手里有一批发票,要整理成 Excel。

如果只有一两张,人工录一下也就算了。但发票一多,就很烦。

一张张打开。
看开票日期。
看开票单位。
看发票号码。
看金额、税额、价税合计。
再把开票内容录进表格。

这个过程没什么技术含量,但很耗人。

而且越是这种机械录入,越容易录错。尤其是金额、税额、价税合计这些字段,看起来都像数字,人工盯久了也容易串。

所以我当时的想法很简单:

能不能先让工具把票面内容识别出来,整理成一张财务能看的表,人最后只复核关键字段?

我原来以为 OCR 得接 API

我一开始的直觉是:这事可能要接 OCR API。

现在很多开箱即用的 OCR 服务,基本都是云端接口。

它们当然有自己的价值。你要做一个长期跑的产品,要处理大量票据,要稳定性和多端接入,用云 API 很正常。

但我这次不是在做一个大型票据系统。

我只是想处理手头这一批发票。

而发票又有点敏感。里面有公司名、金额、交易信息。不是说云服务一定不安全,而是如果本地能解决,我其实没必要第一步就把文件传出去。

我当时就问 AI:如果想做一个本地 OCR 小工具,Mac 上有什么方案?

它提醒我,macOS 里本来就有 Apple Vision,可以做文字识别。

我试了一下,发现识别发票文字的效果比我想象中好。不是完美,但足够把票面文字先读出来。

image.png

真正麻烦的不是识别文字

但 OCR 只能给你一堆文字。

真正要做成工具,还得继续跟 AI 说清楚:我最后要导出的 Excel 里,到底需要哪些字段。

比如开票日期、开票单位、发票号码、金额、税额、税率、价税合计、开票内容。

这里才开始有实际的坑。

金额字段容易混,开票内容也容易被截错。有些项目名称下面跟着规格型号、单位、数量、单价,如果规则没写好,最后导出来的表就会很乱。

所以这件事后面其实不是“识别文字”,而是把识别出来的文字,整理成一张人能复核的表。

我最后做的是一个很小的本地工作流

所以这个工具不是单纯调用 OCR。

它更像一个很小的本地工作流:

上传发票图片或 PDF
↓
用 Apple Vision OCR 识别文字
↓
按常见发票版式抽字段
↓
导出 Excel 主表
↓
保留识别日志,方便排查
↓
人工复核关键字段

导出的 Excel 里有两张表。

其中一张是主表,放开票日期、单位名称、发票号码、金额、税额、税率、价税合计、开票内容这些字段。

另一张是识别日志。

这个日志表挺重要。

因为当某个字段不对的时候,不能只看最终 Excel。你得回头看 OCR 原文到底识别成了什么,再判断是 OCR 识别错了,还是字段规则截错了。

发票整理结果导出 Excel 后人工复核

最后还是要一格一格对

这类小工具很容易给人一种错觉:

页面能跑,Excel 能导出,好像就差不多了。

但发票这种东西不能这么看。

我后来拿了一版人工改过的 Excel,跟工具导出的表一格一格对。错的地方不算多,但很集中:金额和开票内容。

金额容易混,因为票面上本来就有金额、税额、价税合计。开票内容也容易被版式带偏,有时候截少了,有时候又把规格型号也带进来。

我就按这些真实错误去补规则。最后那批 28 张发票,主表跟人工修正版对到了 0 差异。

这句话也别理解成“所有发票都能自动识别准”。

我只是想说,至少对我手头这批发票,它已经能把很烦的录入先做掉。真正要用的时候,发票号码、金额、税额、价税合计,还是应该人看一遍。

所以它适合的场景其实很窄:

你用 Mac,偶尔要整理一批发票,不想一上来接付费 OCR API,也能接受最后自己复核一下。

如果你要的是企业系统、Windows 工具,或者直接自动做账,那就不是它要解决的问题。

这件事给我的一个小提醒

我以前遇到 OCR,脑子里先冒出来的就是:

要不要接 API?
要不要买额度?
要不要上模型?

但这次反过来发现,很多小工具可以先从系统已有能力开始。

Mac 负责识别文字,我补一点字段规则,Excel 负责交付,人最后兜底。就这么简单。

这也让我想到之前在 X 上看到的那个触控板称重例子。有人把 Mac 触控板当成秤,称食物重量。

那个东西跟发票没关系,但背后的感觉很像:Mac 里有些底层能力,平时你不会专门想到它,一旦接上一个具体场景,就突然变成了一个小工具。

所以我把这个项目开源了。不是说它多完整,而是给有类似小需求的人一个可以直接试的起点:

如果你也是 Mac 用户,刚好有类似的发票整理需求,可以拿去试试:

https://github.com/mrliang-github/cn-vat-invoice-ocr

如果你不处理发票,也可以把它当成一个思路:

有些能力可能已经在系统里了。

不一定每个小工具都要从付费 API 开始。


我是良逍,产品经理,最近主要在折腾 AI 产品、独立开发和出海工具。

这个号会记录我自己实测过的工具、踩过的坑,以及从想法到产品上线的过程。

如果你也在折腾 AI 工具、独立开发或出海产品,可以来找我交流:liangxiao-20