本文的目的是演示一個專門設計用于對收據照片執行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 函數。在這個階段,您需要布置一些參數并決定您希望包含哪些可選功能。您的參數包括以下內容:
- 您要執行操作的輸入文件
- 您的 Cloudmersive API 密鑰(可以通過在我們的網站上注冊一個免費帳戶來獲得,該帳戶將提供每月 800 次 API 調用的限制)
您的可選功能包括以下內容:
- recognitionMode通過設置等于字符串來啟用高級識別模式Advanced。
- recognitionMode通過設置等于字符串來啟用手寫識別模式EnableHandwriting。
- String Language通過設置等于包含首選語言的三字母標識符的字符串來設置語言(默認選項是英語) 。
- 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 應用程序以盡可能高的準確度檢測文本。