在簡(jiǎn)書(shū)這一個(gè)月不可發(fā)布文章的期間抵赢,我漸漸喜歡上掘金這個(gè)軟件闹瞧。掘金里面很多技術(shù)性的文章绑雄,寫(xiě)的也很好。但是我發(fā)現(xiàn)奥邮,之間一些自己遇到的問(wèn)題并不能很好的讓別人瀏覽到万牺。所以轉(zhuǎn)幾篇踩坑文章。
今天給大家分享一下洽腺,這幾天調(diào)用身份證認(rèn)證API的流程脚粟。在此是使用nodejs寫(xiě)的后臺(tái)。
前提
1.我們需要使用是百度的API蘸朋,你就必須有一個(gè)百度智能云的賬號(hào)核无。直接百度可能找不到!在此藕坯,附上網(wǎng)址鏈接:https://login.bce.baidu.com<br >
2.注冊(cè)在此不過(guò)多贅述团南,登錄成功后跳轉(zhuǎn)到如下界面:
-
點(diǎn)擊產(chǎn)品服務(wù)-人工智能-文字識(shí)別。
-
點(diǎn)擊進(jìn)入如下界面炼彪。
-
因?yàn)槲乙呀?jīng)創(chuàng)建了一個(gè)應(yīng)用吐根,在此,大家可以點(diǎn)擊創(chuàng)建應(yīng)用辐马,填寫(xiě)以下名稱拷橘,一切默認(rèn),點(diǎn)擊立即創(chuàng)建即可喜爷。
-
在你的應(yīng)用列表里就會(huì)出現(xiàn)一個(gè)應(yīng)用冗疮。在接下來(lái)你要使用的AppID、Appkey贞奋、Secret Key都在此復(fù)制赌厅。
安裝
- 我選擇的是Node-SDK安裝,再調(diào)用接口轿塔。安裝Node-SDK方法很多特愿,你可以到官網(wǎng)上去下載然后把你所需要的拖到自己的文件中仲墨,你也可以到GitHub上搜索下載。
- 我選擇的是直接在安裝好的node_modules基礎(chǔ)上揍障,直接輸入命令:npm install baidu-aip-sdk目养。
調(diào)用
-
我是直接使用npm命令導(dǎo)入baidu-aip-sdk模塊,所以毒嫡,在此之前默認(rèn)項(xiàng)目框架已經(jīng)搭建完好癌蚁。(采用MVC結(jié)構(gòu))目錄大致如下:
- 為方便使用,就不在此再創(chuàng)建文件兜畸,在你所需要認(rèn)證的文件內(nèi)努释,直接新建對(duì)象。(我是在個(gè)人中心的應(yīng)用層中寫(xiě)入)咬摇。
- 在應(yīng)用層內(nèi)調(diào)用baidu-aip-sdk模塊伐蒂,設(shè)置APPID/AK/SK。以下步驟均在應(yīng)用層操作肛鹏。
var AipOcrClient = require("baidu-aip-sdk").ocr;
// 設(shè)置APPID/AK/SK
var APP_ID = "你的 App ID";
var API_KEY = "你的 Api Key";
var SECRET_KEY = "你的 Secret Key";
// 新建一個(gè)對(duì)象逸邦,建議只保存一個(gè)對(duì)象調(diào)用服務(wù)接口
var client = new AipOcrClient(APP_ID, API_KEY, SECRET_KEY);
var HttpClient = require("baidu-aip-sdk").HttpClient;
// 設(shè)置request庫(kù)的一些參數(shù),例如代理服務(wù)地址在扰,超時(shí)時(shí)間等
// request參數(shù)請(qǐng)參考 https://github.com/request/request#requestoptions-callback
HttpClient.setRequestOptions({timeout: 5000});
// 也可以設(shè)置攔截每次請(qǐng)求(設(shè)置攔截后缕减,調(diào)用的setRequestOptions設(shè)置的參數(shù)將不生效),
// 可以按需修改request參數(shù)(無(wú)論是否修改,必須返回函數(shù)調(diào)用參數(shù))
// request參數(shù)請(qǐng)參考 https://github.com/request/request#requestoptions-callback
HttpClient.setRequestInterceptor(function(requestOptions) {
// 查看參數(shù)
console.log(requestOptions)
// 修改參數(shù)
requestOptions.timeout = 5000;
// 返回參數(shù)
return requestOptions;
});
- 上傳身份證正面芒珠。首先需要完成能夠上傳圖片的基礎(chǔ)上桥狡,再進(jìn)行身份證識(shí)別。上傳圖片路由妓局、應(yīng)用層:
//router文件
router.post('/idCardFront', function(req, res, next) {
userController.idCardFront(req, res)
})
//controllerse文件
idCardFront: function(req, res) {
var form = new formidable.IncomingForm() //創(chuàng)建上傳表單對(duì)象
form.uploadDir = path.join(__dirname, '..', '/public/idCard') //設(shè)置上傳文件的路徑
form.keepExtensions = true //設(shè)置保留上傳文件的擴(kuò)展名
form.parse(req, function(err, fields, files) {
if (err) {
res.send('頭像上傳錯(cuò)誤总放!')
}
console.log('...................')
//fields是上傳的表單字段數(shù)組呈宇,files是上傳的文件列表
// console.log(files)
//保存圖片路徑到數(shù)據(jù)庫(kù)
//1.獲取當(dāng)前用戶編號(hào)
let userId = req.user[0].base_info_Id
//2.獲取當(dāng)前用戶的圖片名稱
let headPic = path.parse(files.file.path).base
// console.log('jpg格式:' + headPic)
// console.log(files.file.path)
res.json({ code: 200, data:headPic, msg: '身份證上傳成功好爬!審核通過(guò)!' })
})
}
- 在識(shí)別身份證之前甥啄,需要將你存在服務(wù)器的圖片讀取并以base64格式顯示存炮。
//讀取服務(wù)器文件,以base64顯示
let filePath = files.file.path
let bitmap = fs.readFileSync(filePath);
let image = Buffer.from(bitmap, 'binary').toString('base64');
- 調(diào)用百度接口蜈漓。
client.idcard(image, idCardSide).then(function(result) {
results = JSON.stringify(result)
console.log(results)
var id = {}
res.json({ code: 200, data: results, msg:'身份證上傳成功穆桂!審核通過(guò)!' })
}).catch(function(err) {
// 如果發(fā)生網(wǎng)絡(luò)錯(cuò)誤
console.log(err);
res.json({ code: 200, msg: '身份證上傳成功融虽!審核不通過(guò)享完!' })
});
7.運(yùn)行postman,傳入圖片有额,進(jìn)行身份證識(shí)別般又。
可以在服務(wù)器看到身份證上的信息代表認(rèn)證成功彼绷!在此附上標(biāo)準(zhǔn)認(rèn)證成功返回的json格式:
{
"log_id": 2648325511,
"direction": 0,
"image_status": "normal",
"idcard_type": "normal",
"edit_tool": "Adobe Photoshop CS3 Windows",
"words_result": {
"住址": {
"location": {
"left": 267,
"top": 453,
"width": 459,
"height": 99
},
"words": "南京市江寧區(qū)弘景大道3889號(hào)"
},
"公民身份號(hào)碼": {
"location": {
"left": 443,
"top": 681,
"width": 589,
"height": 45
},
"words": "330881199904173914"
},
"出生": {
"location": {
"left": 270,
"top": 355,
"width": 357,
"height": 45
},
"words": "19990417"
},
"姓名": {
"location": {
"left": 267,
"top": 176,
"width": 152,
"height": 50
},
"words": "伍云龍"
},
"性別": {
"location": {
"left": 269,
"top": 262,
"width": 33,
"height": 52
},
"words": "男"
},
"民族": {
"location": {
"left": 492,
"top": 279,
"width": 30,
"height": 37
},
"words": "漢"
}
},
"words_result_num": 6
}
這樣,身份認(rèn)證就完成啦茴迁!