# 收据与发票识别 把照片整理成可核对的报告

识别照片，核对字段和裁剪范围，再通过邮件发送压缩图片、每笔金额和总额。

> 在设备上识别收据和发票照片，核对裁剪范围与金额，用手动汇率或在线历史汇率换算为统一的邮件汇总币种。邮件包含压缩图片、每笔金额和总额。

照片在设备上识别。可选的历史汇率请求只把币种和所选日期发送给 Frankfurter。邮件与分享操作由你主动把内容交给所选应用。

## 照片在**这台设备上识别**。在线汇率查询是可选操作。由你选择要发送或分享的内容。

照片在这台设备上解码和识别。页面自带 OCR 引擎和英文识别数据，识别时不会上传照片或提取的字段。手动汇率、复制报告和下载也都在设备上完成。只有点击“查询历史汇率”才会向 [Frankfurter](https://frankfurter.dev/) 发送两个币种代码和所选日期。该服务会看到请求和你的 IP 地址，但不会收到图片、金额、OCR 文字、文件名或邮箱地址。邮件和分享是你选择的下一步。点击这些按钮会把报告或所选文件交给设备上的应用。由你选择收件人、检查内容并发送。

- ✗ 处理时不上传
- ✗ 无需账户
- ✓ 离线 OCR
- ✓ 逐份核对单据
- ✓ 通过自己的应用发送

## 如何从照片提取收据和发票信息

1. **选择清晰照片。** 一次最多添加 20 张 JPEG、PNG、WebP 或 AVIF 图片，每张不超过 20 MB。每张图片只放一份收据或发票。OCR 支持英文印刷文字。拍下完整单据，保持光线均匀、文字正向且清晰。
2. **识别、裁剪并对照检查。** 运行 OCR 后，对照每张照片检查建议字段和原始识别文字。横向照片可先旋转再识别。调整裁剪范围，保留所有单据边缘和文字，再重新识别该范围。修改商家、日期、编号、币种和总额。商家或编号无法可靠识别时可以留空。特别要区分最终总额、小计、折扣、交付现金、找零、税额和未付余额。
3. **逐份确认单据。** 核对字段、裁剪和换算结果。先选择单据上印刷的币种，再选择所有单据共用的邮件汇总币种。每份汇率可手动填写，也可核对收据日期后选择在线查询并点击“查询历史汇率”。页面会显示一单位原币种能换多少汇总币种。相同币种使用汇率 1。只有确认过的换算金额才会计入总额。请删除重复照片，避免同一张收据重复计数。
4. **把报告交给你的应用。** 检查准备好的 JPEG 预览和大小。设备支持时，可点击“通过邮件分享图片”选择邮件应用，也可下载包含报告和 JPEG 附件的邮件文件。由你检查并发送消息。应用无法打开邮件文件时，可下载并解压 ZIP，再把图片和 CSV 添加到新邮件。

## 说得更细的版本

[从照片提取收据与发票信息](https://abox.tools/zh/guides/extract-receipts-and-invoices/): 核对收据 OCR 和裁剪范围，选择统一邮件币种及手动或历史汇率，再发送压缩图片、每笔换算金额、单据数量和总额。

## 工具箱里还有

- [图片转 PDF](https://abox.tools/zh/images-to-pdf/): 把你的图片装进一个文档。
- [文档扫描](https://abox.tools/zh/document-scanner/): 把纸拍下来，回来的是一份看着像扫描的东西。
- [从视频里提取音频](https://abox.tools/zh/extract-audio-from-video/): 把视频拖进来，声音就取出来了。画面从不解码，也不上传任何东西。
- [音频剪辑](https://abox.tools/zh/trim-audio/): 边听边标出值得留的段落。它们会合成一个文件回来，就切在你说的位置。

## 常见问题

### 每张收据或发票都能识别正确吗？

不能。OCR 可能认错数字，也可能漏掉浅色印刷、小字或艺术字商标。解析器会避开折扣和交付金额标签，但无法使用 OCR 没认出的标签。找不到可靠候选值时，商家和编号可能留空。缺少店名，或 $ 或 ¥ 符号无法明确币种时，也可能触发一次更近距离的商家标题识别。这次文字会单独显示，只用于店名和基于地址的币种建议。第一次识别较弱或缺少金额、日期时，可能会进行一次调整本地对比度的第二次识别，帮助区分文字和纸张。两次完整单据的识别结果都可查看。金额、日期、编号或币种仍有分歧时，字段可能留空供你填写。印刷币种优先于基于地址的推测，已识别的收据或发票日期优先于附加银行卡交易记录中的日期。这些处理可以改善建议值，但无法恢复模糊中丢失的细节，也不能保证正确。导出前请对照照片检查每个建议，并自行确认每份单据。本工具不提取逐项商品，也不验证发票算术。

### 一张图片可以放多张收据吗？

请每张图片只放一份收据或发票。工具把每张图片当作一份单据，不会拆分收据合集或模板页。每份单据请单独拍照或裁剪，保留识别信息和最终金额。否则不同收据的文字可能混成一个建议结果。

### 日期和货币符号如何处理？

单据日期保留原文。查询在线汇率前，请核对并在单独的换算日期栏选择日期，24/09/2018 这样的日期不会自动转换填入。英镑符号通常建议 GBP，单独的 $ 可能表示 USD、CAD、AUD 或其他使用 $ 符号的币种。与最终总额相关的印刷币种优先。币种仍不明确时，商家自己的地址中可识别的国家，或有辨识度的邮编与地区组合，可能提供建议。印刷地址行会显示在建议旁供对照。仅凭城市，或客户、送货、银行地址，不足以判断。无法解决的歧义或矛盾会让币种留空。不会查询定位服务。请对照单据核对每个建议代码。

### 支持哪些文件和文字语言？

支持 JPEG、PNG、WebP 和 AVIF 照片，一批最多 20 张，每张不超过 20 MB。自带的 OCR 模型识别英文印刷文字，不支持其他文字体系、手写文字、PDF 或 HEIC 文件。iPhone 的 HEIC 照片请先用设备照片应用或本站的 HEIC 转换工具导出 JPEG。

### 单据数量和总额表示什么？

每张照片算一份单据。每份单据会显示原始金额和同一邮件汇总币种的换算金额。总额会将已核对的换算金额逐笔四舍五入到两位小数后相加，报告也保留原币种分别合计的金额。邮件导出和附件下载要求全部单据已核对。重复照片不删除就会计数两次。

### 邮件按钮会自动发送吗？

不会。支持文件分享时，会把报告和压缩 JPEG 副本交给设备的分享菜单，请在那里选择邮件应用。不支持时，会下载包含报告和附件的邮件文件。建议主题包含单据数量，全部核对后还会包含汇总币种总额。手动修改主题后会保留你的文字。请检查收件人、内容和附件，再自行发送。本页无法判断邮件应用是否接收这些内容，也无法判断你是否最终发送。

### 裁剪后的图片会附在邮件文件里吗？

会。下载的 `.eml` 文件包含报告和所有准备好的 JPEG 附件。兼容的应用会作为草稿打开，其他应用可能显示为需要转发或重新发送的消息。原图不变，也不会附上。需要手动添加附件时，ZIP 包含相同的 JPEG 和 CSV。浏览器无法保证每个邮件应用都支持草稿文件或系统分享菜单。

### 邮件默认币种如何选定？

每份带有效币种代码的单据计一票。出现次数最多的代码成为邮件汇总币种。票数相同时，采用当前单据顺序中最先出现的代码。缺失或不完整的代码不参与。识别、修改或移除单据时，默认值会更新。手动选择汇总币种后会保留你的选择。“使用默认币种”会恢复自动选择。汇总币种改变后会清除原有汇率和核对确认。

### 可以选择列表里没有的币种吗？

可以。选择“其他／自定义代码”，为单据币种或邮件汇总币种填写三个字母的代码。修改汇总币种会更新所有单据，并清除原有汇率和核对确认。在线覆盖范围取决于币种组合和日期。没有历史汇率时，请手动填写，不会用最新汇率替代。

### OCR 会上传我的照片吗？

不会。Tesseract 使用页面自带的英文数据，在浏览器内识别照片。复制和下载都在设备上完成。邮件或设备分享操作会由你主动把所选信息交给其他应用，之后的发送由该应用处理。

### 为什么细节很多的照片也可能识别不好？

反光、模糊、折痕和拍摄距离可能遮住文字，即使图片很大也一样。OCR 会将小裁剪范围最多放大三倍，加上窄白边，工作副本的最长边不超过 2400 像素。这可能帮助引擎读取小字，但不能恢复照片中缺失的细节。尽量让一份单据填满画面，保持文字清晰、光线均匀，横向单据先旋转再识别。原图和邮件附件不会因 OCR 而放大。

### 离线能用吗？

页面和 OCR 资源缓存完成后，识别、编辑、裁剪、手动换算、计数、准备 JPEG 和下载都可离线使用。在线历史汇率查询需要联网，已经获取的汇率会保留在打开的标签页中。打开草稿可能不需要联网，但实际发送邮件通常需要应用联网。

### 历史汇率怎样使用收据日期？

核对收据上印刷的日期，再填写换算日期栏。有歧义的日期不会猜测。选择在线查询并点击“查询历史汇率”。结果会标出实际汇率日期，若请求当天没有公布汇率，日期可能更早。确认前请检查。你也可以逐份手动填写不同汇率。邮件会保留每笔换算金额使用的汇率、来源和日期。

## 这条隐私承诺怎么核实

- **OCR 在你的设备上完成。** 照片由像素组成，读取文字需要 OCR 引擎。页面自带 Tesseract 和英文识别数据，无需把照片交给服务器。浏览器在内存中读取你选择的文件。本站不保存照片或提取的字段。引擎和数据在传输压缩前约为 8 MB，会随工具一起缓存。版本、源文件和[许可证就在资源旁边](https://abox.tools/zh/receipt-invoice-extractor/vendor/README.md)。
- **建议金额仍需要你核对。** 褪色的数字、反光或靠近底部的小计，可能产生看似可信的错误结果。请对照图片核对商家、日期、编号、币种和总额，修改错误，并检查完整单据是否仍在裁剪范围内。只有确认过的单据才会计入汇总。所有剩余单据都确认后，才能导出邮件或下载附件。修改字段、裁剪或旋转后需要再次核对。复制报告和下载 CSV 可包含未完成的行，会标记为待核对。确认只是记录你的检查，不是独立验证单据的算术。
- **邮件内容由你决定如何发送。** 设备支持文件分享时，“通过邮件分享图片”会把压缩 JPEG 副本和报告交给系统分享菜单。请在那里选择邮件应用，检查收件人、正文和附件。不支持时，可下载包含报告和所有 JPEG 附件的邮件文件。兼容的应用会把文件作为草稿打开，其他应用可能需要转发或重新发送。本页不会发送邮件。之后的发送由邮件应用和服务提供方按自己的设置完成。
- **发出的图片是裁剪、压缩后的副本。** 调整裁剪范围时，请保留完整收据或发票。找到清楚的单据边缘时，页面会建议裁剪范围，否则保留整张图片。对于长条彩色收据，如果检测边缘外仍有相同纸张颜色，可能会保留图片的整个端部，以保住标题或末尾文字，也会多留一些背景。请检查并调整建议范围。JPEG 副本最长边不超过 1600 像素，每张目标大小约为 350 KB。发送前检查预览和显示的大小，目标大小不保证能达到。原图不变，也不会作为附件发出。邮件应用无法使用邮件文件时，可下载并解压 ZIP，再手动添加 JPEG 副本和 CSV。
- **在线汇率查询是可选操作。** 使用手动汇率时，整个准备过程都可离线完成。仅选择在线查询不会发起请求，还需点击对应单据的“查询历史汇率”。请求只把原币种、汇总币种和所选日期发送给 api.frankfurter.dev，不带凭据或来源网址。Frankfurter 会看到你的 IP 地址和请求。返回的汇率和实际日期会显示在单据旁及报告中。参考汇率可能与银行或银行卡扣款汇率不同。服务无法提供汇率时，请手动填写。页面不会悄悄改用今天的汇率。
- **保存或分享前，报告只存在于当前标签页。** 这里没有账户或单据历史。核对时请保持页面打开，离开前复制报告或保存 CSV。关闭或重新加载页面会丢失内存中的批次。复制、下载或交给其他应用的报告会保留在你选择的位置。
- **页面上的其他脚本会收到什么。** 本站的广告、统计和捐赠按钮脚本与其他工具一样加载。照片、OCR 文字、文件名、商家名称、金额和单据数量不会交给这些脚本。读取照片和生成报告的代码由本站提供，可在代码仓库中查看。
- **识别可离线完成，发送取决于邮件应用。** 等页面的离线状态显示已就绪后，可断网再识别一张照片。缓存的 OCR 引擎、核对表单、汇总、复制、JPEG 准备、手动换算和下载仍能使用。在线汇率查询需要联网。邮件应用可能可以离线保存草稿，实际发送则需要该应用使用的网络连接。

**你可以自己核对。**上面这些不用你信。这个页面是仓库里的模板和配置生成出来的，构建脚本你能读，也能自己跑一遍，跑出来的结果就提交在 `dist` 分支上。拿实际发给你的内容，跟你自己从源码构建出来的结果对一遍就知道了： https://github.com/A-Box-of-Tools/website

最值得先读的几个文件：`config/site.toml` 里是 Content-Security-Policy，`src/ocr.js` 是本地 OCR 封装，`src/main.js` 负责核对以及交给邮件或分享菜单，`src/attachments.js` 生成 JPEG 副本，`src/email.js` 生成邮件文件，`src/fx.js` 负责换算和可选的历史汇率查询，`vendor/` 保存引擎和许可证。报告和附件都在当前标签页内生成。你可以选择邮件应用或下载邮件文件，再自行发送。
