1. 前言
随着人工智能技术的不断发展,各大厂商相继推出了自己的AI开放平台。百度AI平台作为国内最为知名的开放平台之一,为开发者们提供了许多强大的API接口,能够极大地方便和加快人工智能应用的开发进程。本文主要介绍如何使用Golang对接百度AI平台的身份证识别API接口,达到身份证自动识别的目的。
2. 百度AI平台简介
2.1 百度AI平台概述
百度AI平台是百度推出的一款面向开发者的人工智能云平台,集成了丰富的人工智能API接口,包含图像识别、自然语言处理、语音识别等多个领域。开发者可以通过访问百度AI平台提供的API接口,使用图像、文字、语音等多种形式与平台进行交互,实现人工智能应用的快速开发。
2.2 百度AI平台中的身份证识别API
百度AI平台中的身份证识别API是一款基于深度学习的OCR技术,该技术能够识别身份证上面的文字信息,包括姓名、性别、民族、出生日期、住址以及身份证号码等信息。
3. Golang对接百度AI平台身份证识别API
以下是使用Golang对接百度AI平台身份证识别API的详细步骤:
3.1 注册百度AI平台账号
首先需要前往百度AI平台官网进行注册,注册完成后,需要创建一个应用并开通身份证识别API接口。
3.2 获取百度AI平台API Key和Secret Key
在百度AI平台中创建应用后,可以在应用管理页面中找到应用的API Key和Secret Key,并记录下来,待会需要用到。
3.3 安装必要的依赖包
使用Golang对接身份证识别API需要安装以下两个依赖包:
go get github.com/aliyun/alibaba-cloud-sdk-go
go get github.com/gogf/gf
3.4 编写代码
在Golang中,使用http包实现post请求即可调用百度AI身份证识别API接口。下面是调用API的示例代码:
package main
import (
"bytes"
"crypto/md5"
"encoding/hex"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)
const (
API_KEY = "API KEY" // 记录下第2步中获取到的API Key
SECRET_KEY = "SECRET KEY" // 记录下第2步中获取到的Secret Key
)
type IDCardResp struct {
Direction int `json:"direction"`
ImageStatus string `json:"image_status"`
IdcardNumber string `json:"idcard_number"`
IdcardName string `json:"idcard_name"`
IdcardAddress string `json:"idcard_address"`
Birth string `json:"birth"`
Gender string `json:"gender"`
Nationality string `json:"nationality"`
IdcardFront string `json:"idcard_front"`
RequestId string `json:"request_id"`
}
func main() {
const (
urlStr = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard"
fileType = "FRONT" // 是否为正面
filePath = "test.jpg" // 待识别的身份证图片
)
fileData, err := ioutil.ReadFile(filePath)
if err != nil {
fmt.Println(err.Error())
return
}
httpClient := &http.Client{Timeout: 10 * time.Second}
paramBody := bytes.NewBufferString(fmt.Sprintf("id_card_side=%s&image=%s", fileType, hex.EncodeToString(fileData)))
paramHeaders := getHeader(API_KEY, SECRET_KEY, fileType, fileData)
req, _ := http.NewRequest("POST", urlStr, paramBody)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Ocp-Apim-Subscription-Key", API_KEY)
for key, val := range paramHeaders {
req.Header.Set(key, val)
}
resp, err := httpClient.Do(req)
if err != nil {
fmt.Println(err.Error())
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err.Error())
return
}
var idCardResp IDCardResp
if err := json.Unmarshal(body, &idCardResp); err != nil {
fmt.Println(err.Error())
return
}
fmt.Println(idCardResp.IdcardNumber)
}
// 获取请求的header信息
func getHeader(apiKey, secretKey, fileType string, fileData []byte) map[string]string {
headers := make(map[string]string, 0)
oriStr := fmt.Sprintf("aipSdk=GoLang&apiKey=%s&fileType=%s×tamp=%d", apiKey, fileType, time.Now().UnixNano())
signStr := signString(oriStr, secretKey)
headers["Authorization"] = "bce-auth-v1/36e6b7ee540f4bdc99ad3727e6a452b8/2021-07-01T19:11:34Z/1800/host;x-bce-date/4d685c7a0e2a10072a85f0c53019a8b5be9b09d58c5ce5aa9ee92ffe22e568ee"
headers["Host"] = "aip.baidubce.com"
headers["x-bce-date"] = "20210701T211134Z"
headers["x-bce-content-sha256"] = HexEncode(md5.Sum(fileData))
headers["Content-Type"] = "application/x-www-form-urlencoded"
return headers
}
// 获取签名信息
func signString(oriStr, secretKey string) string {
h := md5.New()
h.Write([]byte(secretKey))
key := fmt.Sprintf("%x", h.Sum(nil))
h.Reset()
h.Write([]byte(oriStr))
data := fmt.Sprintf("%x", h.Sum(nil))
hmac := hMacSha256([]byte(key), []byte(data))
return hmac
}
// HMAC-SHA256签名
func hMacSha256(key, data []byte) string {
h := hmac.New(sha256.New, key)
h.Write(data)
return fmt.Sprintf("%x", h.Sum(nil))
}
// 十六进制编码
func HexEncode(sum [16]byte) string {
return hex.EncodeToString(sum[:])
}
3.5 运行程序
按照上面的步骤完成代码编写后,可以通过go run main.go命令执行程序,即可看到输出身份证号码等信息。
4. 总结
本文主要介绍了如何使用Golang对接百度AI平台的身份证识别API接口实现身份证识别。需要注意的是,使用API接口需要注册百度AI平台账号并创建应用,同时还需要记录下API Key和Secret Key,此外在使用API接口时需要传递图片数据、API Key和Secret Key等信息,并利用hmac-sha256算法进行签名。最后,希望本文能够帮助广大开发者快速理解和使用Golang对接百度AI身份证识别API接口。