Nodejs + Face++ 識別身份證照片

_zysndy發表於2018-03-11

起因

因為有這樣一件事情,需要獲取身份證正面照中的姓名和身份證號,如果全部通過眼看手敲的話,很費事,而且浪費時間,當時能想如果能自動化執行就好了。

實現

影像識別Api

圖片識別暫時還沒有接觸過,所以就去找了能夠提供影像識別的第三方應用,這邊我是用的是Face++

  • 登陸註冊並完善相關資訊後,提供了AppKeyAppSecret來呼叫提供的Api
  • 在使用Postman簡單測試後,發現可行,post請求後,提供的介面會返回一組身份的資訊JSON資料

Postman 是通過能強大的網頁除錯與傳送網頁HTTP請求,並能執行測試用例的的Chrome外掛,現在提供了客戶端。只要在GUI介面裡,填寫相應的URl和資料,選擇相應的方法,POSTGETPUTDELETE,就能夠將結果返回回來,不需要編寫程式碼。官網連結

Nodejs實現

我是在mac的終端下開發的,如果是window環境系,部分命令不適用,需要替換合適的命令。

  1. 目錄結構
/**
 * images 資原始檔
 * package.json  執行npm init 後會自動生產
 * index.js 實現的邏輯檔案
 */

- idCard
    - index.js
    - images
        - ***.jpg
        - ***.png
        - ....
    - package.json

複製程式碼
  1. 安裝 shelljsnpm install shelljs 因為需要簡單的shell命令執行

  2. index.js實現(比較簡單)

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,即會列印出姓名 + 身份證號

主要就是用到了閉包,很簡單=_=||

相關文章