<返回更多

如何使用 Java 对收据的照片执行 OCR

2022-07-15    qaseven
加入收藏

本文的目的是演示一个专门设计用于对收据照片执行OCR(光学字符识别)操作并自动从中提取关键业务信息的 API,例如企业名称和地址、电话号码、收据总额等等。在页面的下方,我提供了代码示例和说明来帮助您在JAVA中构建 API 调用。

经营企业有数十种成本,管理这些成本的工作在复杂性上各不相同。虽然办公室租金、工资和供应商合同等公司支出是内部团队(即应付账款)可以直接处理的周期性和可管理的发票,但以客户晚餐、出租车乘车和团队郊游形式的员工支出需要公司报销,这只能通过员工交易的证明来完成。对于员工而言,证明此类交易需要向企业出示收据。除了显示最重要的外出总费用外,收据还提供员工企业可以验证的其他有用信息,包括员工访问的场所名称、网站、地址、电话号码、以及在该地点购买的特定商品或服务的清单。然而,尽管收据费用流程看似简单,但它往往存在重大技术缺陷:大多数企业已经完全数字化了他们的工资和费用程序,而收据仍然经常以硬拷贝形式获得。因此,将实物收据转换为数字形式提出了相关的业务技术挑战。

在高层次上,光学字符识别是指将硬拷贝文本内容数字化为数据可以很容易地在数据库中存储、查询和传输。为了实现数字化,文档的扫描或拍照图像由 OCR API/应用程序处理,并通过识别算法挑选出文档上的字符。文档的每一页都被分解成不同的组成部分(文本块、表格、图像等),这些部分中的每个字母都以数字方式重新创建,或者通过与一组存储的字母或数字字符进行比较,或者通过识别独特的形状/特征。毫无疑问,将 OCR 纳入世界各地的企业有助于提高工作流程效率。它不仅降低了数据输入服务的间接成本,而且还增强了具有硬拷贝来源的数据的可访问性。更远,

在智能手机之前,使用笨重的办公室扫描设备扫描文档是为 OCR 目的(或用于对象存储)创建文档数字副本的最常用方法。如今,随着手持智能手机的大量流通以及对远程工作的文化接受度不断提高,手机摄像头已成为 OCR 极其相关的 diy(自己动手)工具。从个人设备拍摄文档的粗略照片并将这些照片直接发送给相关利益相关者现在被认为是许多专业交易的标准做法,包括收据费用。

在可以通过个人设备为 OCR 拍照的文件中,收据是最明显的受益者之一。它们几乎不会在方便的时候收集:我们经常在离开出租车、走出餐厅或手拿一袋袋商品离开购物中心时收到收据。此外,收据通常由脆弱的材料制成,并且比大多数其他实物文件更容易损坏(如果它们没有得到充分维护)。这使得成功存储和移交实物收据副本的过程比我们收到的大多数其他实物文件更难,这些实物文件可能会被层压或整齐地塞在马尼拉信封中。为 OCR 拍摄收据的快速照片并将照片直接发送到相关费用处理应用程序的能力意味着减轻员工在较长时间内管理物理文档的负担。这种便利性极大地提高了费用处理效率,确保收据可以通过单一入口点汇集,既可以作为对象(例如,JPG 或 PNG 等照片文件)存储,也可以作为单独文档/应用程序中的可搜索文本存储。

使用 Cloudmersive Receipt OCR API 为您的业务包含收据 OCR 服务非常简单。该API支持数十种常用语言(包括英文、阿拉伯文、中文等),输出收据中包含的所有重要信息,包括收据时间戳、商家名称、商家网址、商家地址、商家电话号码、收据项目(包括每件商品的描述和价格),以及收货总额和小计。API 可以选择性地配置为包括高级识别和手写识别模式,并且您可以选择打开一个可选的预处理模式,该模式将在操作发生之前自动增强图像(这将纠正一些可能发生的小错误,同时拍摄原始照片)。以下,

首先,我们首先需要使用 Maven 安装 SDK 包。为此,我们首先在 pom.xml 中添加对存储库的引用:

XML

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

 

接下来,我们来引用 pom.xml 中的依赖:

XML

<dependencies>
<dependency>
    <groupId>com.github.Cloudmersive</groupId>
    <artifactId>Cloudmersive.APIClient.Java</artifactId>
    <version>v4.25</version>
</dependency>
</dependencies>

 

安装完成后,我们可以在文件顶部包含导入:

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.ImageOcrApi;

 

然后,我们可以使用下面的代码示例调用 Receipt OCR 函数。在这个阶段,您需要布置一些参数并决定您希望包含哪些可选功能。您的参数包括以下内容:

  1. 您要执行操作的输入文件
  2. 您的 Cloudmersive API 密钥(可以通过在我们的网站上注册一个免费帐户来获得,该帐户将提供每月 800 次 API 调用的限制)

您的可选功能包括以下内容:

  1. recognitionMode通过设置等于字符串来启用高级识别模式Advanced。
  2. recognitionMode通过设置等于字符串来启用手写识别模式EnableHandwriting。
  3. String Language通过设置等于包含首选语言的三字母标识符的字符串来设置语言(默认选项是英语) 。
  4. string preprocessing通过设置等于启用预处理(默认为禁用)Advanced。

 

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");

ImageOcrApi apiInstance = new ImageOcrApi();
File imageFile = new File("/path/to/inputfile"); // File | Image file to perform OCR on.  Common file formats such as PNG, JPEG are supported.
String recognitionMode = "recognitionMode_example"; // String | Optional, enable advanced recognition mode by specifying 'Advanced', enable handwriting recognition by specifying 'EnableHandwriting'.  Default is disabled.
String language = "language_example"; // String | Optional, language of the input document, default is English (ENG).  Possible values are ENG (English), ARA (Arabic), ZHO (Chinese - Simplified), ZHO-HANT (Chinese - Traditional), ASM (Assamese), AFR (Afrikaans), AMH (Amharic), AZE (Azerbaijani), AZE-CYRL (Azerbaijani - Cyrillic), BEL (Belarusian), BEN (Bengali), BOD (Tibetan), BOS (Bosnian), BUL (Bulgarian), CAT (Catalan; Valencian), CEB (Cebuano), CES (Czech), CHR (Cherokee), CYM (Welsh), DAN (Danish), DEU (German), DZO (Dzongkha), ELL (Greek), ENM (Archaic/Middle English), EPO (Esperanto), EST (Estonian), EUS (Basque), FAS (Persian), FIN (Finnish), FRA (French), FRK (Frankish), FRM (Middle-French), GLE (Irish), GLG (Galician), GRC (Ancient Greek), HAT (Hatian), HEB (Hebrew), HIN (Hindi), HRV (Croatian), HUN (Hungarian), IKU (Inuktitut), IND (Indonesian), ISL (Icelandic), ITA (Italian), ITA-OLD (Old - Italian), JAV (Javanese), JPN (Japanese), KAN (Kannada), KAT (Georgian), KAT-OLD (Old-Georgian), KAZ (Kazakh), KHM (Central Khmer), KIR (Kirghiz), KOR (Korean), KUR (Kurdish), LAO (Lao), LAT (Latin), LAV (Latvian), LIT (Lithuanian), MAL (Malayalam), MAR (Marathi), MKD (macedonian), MLT (Maltese), MSA (Malay), MYA (Burmese), NEP (Nepali), NLD (Dutch), NOR (Norwegian), ORI (Oriya), PAN (Panjabi), POL (Polish), POR (Portuguese), PUS (Pushto), RON (Romanian), RUS (Russian), SAN (Sanskrit), SIN (Sinhala), SLK (Slovak), SLV (Slovenian), SPA (Spanish), SPA-OLD (Old Spanish), SQI (Albanian), SRP (Serbian), SRP-LAT (Latin Serbian), SWA (Swahili), SWE (Swedish), SYR (Syriac), TAM (Tamil), TEL (Telugu), TGK (Tajik), TGL (Tagalog), THA (Thai), TIR (Tigrinya), TUR (Turkish), UIG (Uighur), UKR (Ukrainian), URD (Urdu), UZB (Uzbek), UZB-CYR (Cyrillic Uzbek), VIE (Vietnamese), YID (Yiddish)
String preprocessing = "preprocessing_example"; // String | Optional, preprocessing mode, default is 'None'.  Possible values are None (no preprocessing of the image), and 'Advanced' (automatic image enhancement of the image before OCR is Applied; this is recommended and needed to handle rotated receipts).
try {
    ReceiptRecognitionResult result = apiInstance.imageOcrPhotoRecognizeReceipt(imageFile, recognitionMode, language, preprocessing);
    System.out.println(result);
} catch (ApiException e) {
    System.err.println("Exception when calling ImageOcrApi#imageOcrPhotoRecognizeReceipt");
    e.printStackTrace();
}

 

一旦您配置了可选功能,您的 API 调用就完成并准备好进行测试。下面,我提供了一个示例 API 响应模型 JSON 供您参考:

JSON

{
  "Successful": true,
  "Timestamp": "2022-07-14T14:33:18.565Z",
  "BusinessName": "string",
  "BusinessWebsite": "string",
  "AddressString": "string",
  "PhoneNumber": "string",
  "ReceiptItems": [
    {
      "ItemDescription": "string",
      "ItemPrice": 0
    }
  ],
  "ReceiptSubTotal": 0,
  "ReceiptTotal": 0
}

 

为了进一步提高 OCR 图像的质量,我建议深入研究预处理API 并测试可能解决最常见问题的那些。例如,在 OCR 照片中,在深色背景上以小角度查看文档是很常见的。借助有效的预处理服务,您可以自动检测这些角度并自动校正它们,从而确保您的 OCR 应用程序以尽可能高的准确度检测文本。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>