由於有這樣一件事情,須要獲取身份證正面照中的姓名和身份證號,若是所有經過眼看手敲的話,很費事,並且浪費時間,當時能想若是能自動化執行就行了。node
圖片識別暫時尚未接觸過,因此就去找了可以提供圖像識別的第三方應用,這邊我是用的是Face++shell
AppKey
和AppSecret
來調用提供的ApiPostman
簡單測試後,發現可行,post請求後,提供的接口會返回一組身份的信息JSON數據Postman 是經過能強大的網頁調試與發送網頁HTTP請求,並能運行測試用例的的Chrome插件,如今提供了客戶端。只要在GUI界面裏,填寫相應的URl和數據,選擇相應的方法,
POST
、GET
、PUT
、DELETE
,就可以將結果返回回來,不須要編寫代碼。官網連接npm
我是在mac的終端下開發的,若是是window環境系,部分命令不適用,須要替換合適的命令。json
/**
* images 資源文件
* package.json 執行npm init 後會自動生產
* index.js 實現的邏輯文件
*/
- idCard
- index.js
- images
- ***.jpg
- ***.png
- ....
- package.json
複製代碼
安裝 shelljs
包npm install shelljs
由於須要簡單的shell命令執行api
index.js實現(比較簡單)bash
var shell = require('shelljs')
var images = shell.exec('ls ./images/*', {silent: true}).toString()
var arr = images.split('\n')
var api_key = 'xxx' // 本身申請的apikey
var api_secret = 'xxx' // 本身申請的api_secret
var result = []
for (var item in arr) {
(function(item) {
setTimeout(function() {
var tmp = '@' + arr[item]
if (tmp == '@') {
return
}
var cmd = 'curl -X POST "https://api-cn.faceplusplus.com/cardpp/v1/ocridcard" -F "api_key="' + api_key + '" -F "api_secret="' + api_secret + '" -F "image_file=' + tmp + '"'
var res = shell.exec(cmd, {silent: true}).toString()
result.push(res)
if (item == arr.length - 2) {
for (var index in result) {
var res = JSON.parse(result[index])
if (typeof res.cards == 'object') {
console.log(res.cards[0].name + ' ' + res.cards[0].id_card_number)
} else {
console.log(result[item])
}
}
}
}, item * 1000)
}(item))
}
複製代碼
爲何要寫成setTimeout,而不是直接執行?是由於若是一次請求過多,api接口會返回一個error_message
,說當前接口請求過多,因此每次延時執行,保證不會丟失數據閉包
node index
,即會打印出姓名 + 身份證號主要就是用到了閉包,很簡單=_=||curl