1. 前言
在AI人工智能的潮流下,出現(xiàn)了很多方便人們生活的產(chǎn)品:人臉識(shí)別技術(shù)-完成人臉開鎖,人臉核身;車牌識(shí)別-完成停車場無人計(jì)費(fèi)系統(tǒng)設(shè)計(jì);自動(dòng)駕駛-輔助車主行車,自動(dòng)泊車等等,還有很多相關(guān)的應(yīng)用。
這篇文章就是利用華為云提供的銀行卡信息識(shí)別接口來提取識(shí)別銀行卡詳細(xì)信息,這個(gè)接口是文字識(shí)別接口中的一個(gè),銀行卡信息識(shí)別主要是應(yīng)用在各種購物app里綁卡、保險(xiǎn)在線理賠填卡號(hào)、社交軟件綁卡、證券軟件綁卡等等很多地方,以前都是人工輸入卡號(hào),非常不方便,有了AI識(shí)別功能,可以提前將銀行卡圖片保存在手機(jī)里,也可以選擇現(xiàn)場拍攝,這樣軟件通過圖片快速識(shí)別出當(dāng)前銀行卡的類別、所屬銀行、卡號(hào)等信息完成自動(dòng)填充,極大的方便用戶體驗(yàn)。
2. 文字識(shí)別云服務(wù)
2.1 開通文字識(shí)別服務(wù)功能
地址: https://console.huaweicloud.com/ocr/?region=cn-north-4&locale=zh-cn#/ocr/overview
文字識(shí)別服務(wù)接口支持API方式調(diào)用,支持按需計(jì)費(fèi),每個(gè)用戶每月有1000次的免費(fèi)調(diào)用額度,前期的體驗(yàn)調(diào)試比較方便。
接口的計(jì)費(fèi)使用說明: https://support.huaweicloud.com/productdesc-ocr/ocr_01_0070.html
2.2 API接口使用介紹
幫助文檔地址: https://support.huaweicloud.com/api-ocr/ocr_03_0104.html
接口識(shí)別銀行卡上的關(guān)鍵文字信息后,是以json格式返回識(shí)別的結(jié)果,根據(jù)說明解析就能拿到信息。
接口格式:
URL請(qǐng)求格式:POST https://{endpoint}/v2/{project_id}/ocr/bankcard
?
endpoint 指定承載REST服務(wù)端點(diǎn)的服務(wù)器域名或IP,不同服務(wù)不同區(qū)域的endpoint不同,可以從終端節(jié)點(diǎn)中獲取。
例如,OCR服務(wù)在"華北-北京四"區(qū)域的"endpoint"為"ocr.cn-north-4.myhuaweicloud.com"。
?
project_id是項(xiàng)目ID,可以從這里 https://support.huaweicloud.com/api-ocr/ocr_03_0130.html 獲取。
?
?
完整請(qǐng)求示例:
https://ocr.cn-north-4.myhuaweicloud.com/v2/0e5957be8a00f53c2fa7c0045e4d8fbf/ocr/bankcard
?
請(qǐng)求頭:
{
"X-Auth-Token": "******",
"Content-Type": "application/json;charset=UTF-8"
}
?
X-Auth-Token參考在這里獲取:https://support.huaweicloud.com/api-ocr/ocr_03_0005.html
?
請(qǐng)求體里包含了圖片的bash編碼數(shù)據(jù)
{
"image": ..............
}
?
?
識(shí)別后響應(yīng)的結(jié)果:
{
"result": {
"bank_name": "中國建設(shè)銀行",
"card_number": "6217003860002354304",
"issue_date": "",
"expiry_date": "09/22",
"type": "借記卡",
"confidence": {
"bank_name": 0.9608,
"card_number": 0.9793,
"issue_date": 0,
"expiry_date": 0.8646,
"type": 0
}
}
}
?
響應(yīng)結(jié)果里字段含義解釋:
?
bank_name 發(fā)卡行。
?
card_number 銀行卡號(hào)。
?
issue_date 有效期開始日期。
?
expiry_date 有效期截止日期。
?
type 銀行卡類別,如:借記卡,信用卡,準(zhǔn)貸記卡,預(yù)付費(fèi)卡。
2.3 在線調(diào)試
在線調(diào)試地址: https://apiexplorer.developer.huaweicloud.com/apiexplorer/debug?product=OCR&api=RecognizeBankcard
先通過調(diào)試接口體驗(yàn)之后,再編寫代碼可以少走一些彎路,很多參數(shù)都比較清楚了。
將圖片的base64編碼貼到 image字段里,點(diǎn)擊調(diào)試即可查看結(jié)果。
3. 示例代碼
代碼采用QT編寫,主要是就是HTTP請(qǐng)求,獲取結(jié)果,解析結(jié)果,API接口不依賴語言,任何語言使用都是一樣的流程。
3.2 發(fā)起請(qǐng)求,獲取銀行卡信息
//獲取銀行卡信息
void Widget::getCardInfo(QString file)
{
function_select=1;
QString requestUrl;
QNetworkRequest request;
?
//存放圖片BASE64編碼
QString imgData;
?
//設(shè)置請(qǐng)求地址
QUrl url;
?
//人臉?biāo)阉髡?qǐng)求地址
requestUrl = QString("https://ocr.%1.myhuaweicloud.com/v2/%2/ocr/bankcard")
.arg(SERVER_ID)
.arg(PROJECT_ID);
?
//設(shè)置數(shù)據(jù)提交格式
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
?
//將圖片進(jìn)行Base64編碼
imgData = QString(toBase64(QImage(file))); //編碼后的圖片大小不超過2M
//設(shè)置token
request.setRawHeader("X-Auth-Token",Token);
?
//構(gòu)造請(qǐng)求
url.setUrl(requestUrl);
request.setUrl(url);
?
QString post_param=QString
("{"
""image": "%1""
"}").arg(imgData);
?
//發(fā)送請(qǐng)求
manager- >post(request, post_param.toUtf8());
}
3.3 獲取token
/*
功能: 獲取token
*/
void Widget::GetToken()
{
//表示獲取token
function_select=3;
?
QString requestUrl;
QNetworkRequest request;
?
//設(shè)置請(qǐng)求地址
QUrl url;
?
//獲取token請(qǐng)求地址
requestUrl = QString("https://iam.%1.myhuaweicloud.com/v3/auth/tokens")
.arg(SERVER_ID);
?
//自己創(chuàng)建的TCP服務(wù)器,測試用
//requestUrl="http://10.0.0.6:8080";
?
//設(shè)置數(shù)據(jù)提交格式
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=UTF-8"));
?
//構(gòu)造請(qǐng)求
url.setUrl(requestUrl);
?
request.setUrl(url);
?
QString text =QString("{"auth":{"identity":{"methods":["password"],"password":"
"{"user":{"domain": {"
""name":"%1"},"name": "%2","password": "%3"}}},"
""scope":{"project":{"name":"%4"}}}}")
.arg(MAIN_USER)
.arg(IAM_USER)
.arg(IAM_PASSWORD)
.arg(SERVER_ID);
?
//發(fā)送請(qǐng)求
manager- >post(request, text.toUtf8());
}
3.4 解析結(jié)果
//解析反饋結(jié)果
void Widget::replyFinished(QNetworkReply *reply)
{
QString displayInfo="";
int statusCode = reply- >attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
?
//讀取所有數(shù)據(jù)
QByteArray replyData = reply- >readAll();
?
qDebug()< "狀態(tài)碼:"<
審核編輯:湯梓紅
-
AI
+關(guān)注
關(guān)注
87文章
30887瀏覽量
269063 -
人工智能
+關(guān)注
關(guān)注
1791文章
47274瀏覽量
238467 -
人臉識(shí)別
+關(guān)注
關(guān)注
76文章
4012瀏覽量
81894 -
文字識(shí)別
+關(guān)注
關(guān)注
0文章
16瀏覽量
8638 -
華為云
+關(guān)注
關(guān)注
3文章
2491瀏覽量
17425
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論