前言
我們在做系統的時候存在這么一個場景,客戶如果要在平台充值金額,需要開票審核,由財務確認后進行充值,為了方便財務審核以及發票信息的記錄查詢,需要對發票內容進行記錄,人工輸入效率太低,這時候就需要用到OCR識別。

方案
市面上已經存在許多開放AI能力的平台,包括百度大腦,騰訊雲,訊飛開放平台,阿里雲等等,在經過多次嘗試對比之后,最終采用阿里雲市場里【四川涪擎大數據技術有限公司】所提供的API服務(不是在打廣告)
這個API服務的價格、識別率的性價比比較高,上線之后也沒有遇到什么問題。
實現
確認好API服務之后,點擊進去查看相關信息
由於是API方式調用,所以非常簡單,並且官方已經提供了原生http請求的示例代碼,只需要復制粘貼封裝一下即可。
這里貼出PHP的示例代碼
<?php
error_reporting(E_ALL || ~E_NOTICE);
$host = "https://nvoiceocr.market.alicloudapi.com";
$path = "/taxinvoice";
$method = "POST";
$appcode = "你自己的AppCode";//開通服務后 買家中心-查看AppCode
$headers = array();
array_push($headers, "Authorization:APPCODE " . $appcode);
//根據API的要求,定義相對應的Content-Type
array_push($headers, "Content-Type" . ":" . "application/x-www-form-urlencoded; charset=UTF-8");
$querys = "";
$bodys = "image=http://img3.fegine.com/image/taxinvoice.jpg";
//或者base64
//$bodys = "image=data:image/jpeg;base64,/9j/4A......";
$url = $host . $path;
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
if (1 == strpos("$" . $host, "https://")) {
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys);
$out_put = curl_exec($curl);
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
list($header, $body) = explode("\r\n\r\n", $out_put, 2);
if ($httpCode == 200) {
print("正常請求計費(其他均不計費)<br>");
print($body);
} else {
if ($httpCode == 400 && strpos($header, "Invalid Param Location") !== false) {
print("參數錯誤");
} elseif ($httpCode == 400 && strpos($header, "Invalid AppCode") !== false) {
print("AppCode錯誤");
} elseif ($httpCode == 400 && strpos($header, "Invalid Url") !== false) {
print("請求的 Method、Path 或者環境錯誤");
} elseif ($httpCode == 403 && strpos($header, "Unauthorized") !== false) {
print("服務未被授權(或URL和Path不正確)");
} elseif ($httpCode == 403 && strpos($header, "Quota Exhausted") !== false) {
print("套餐包次數用完");
} elseif ($httpCode == 500) {
print("API網關錯誤");
} elseif ($httpCode == 0) {
print("URL錯誤");
} else {
print("參數名錯誤 或 其他錯誤");
print($httpCode);
$headers = explode("\r\n", $header);
$headList = array();
foreach ($headers as $head) {
$value = explode(':', $head);
$headList[$value[0]] = $value[1];
}
print($headList['x-ca-error-message']);
}
}
其中需要注意的是bodys支持url或者base64的上傳,這里建議優先采用url,因為發票圖片肯定需要上傳的,上傳完成之后上傳url識別即可。
總結
不僅僅是發票識別,包括身份證,人臉,快遞,駕駛證,車牌等等,都已存在成熟識別的服務,在未來越來越多的功能將以服務的方式提供,讓專業的人干專業的事,使得我們能將更多的精力放在業務實現上,降低開發的成本。
