- 安装gin:go get -u github.com/gin-gonic/gin
- 在GOPATH的src目录新建项目baiduapi
- 在项目目录使用命令: go mod init
- 新建:main.go,代码如下
package main
import (
"github.com/gin-gonic/gin"
"net/http"
"net/url"
"io/ioutil"
"encoding/json"
)
//获取access_token的url
var accessTokenUrl = "https://aip.baidubce.com/oauth/2.0/token"
//文字识别普通接口
var textGeneralBasicUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
var apiKey = "xxxxxxxxxxxxxxx"
var secretKey = "xxxxxxxxxxxxxxxx"
var accessToken = ""
type Token struct{
Refresh_token string `json:"Refresh_token"`
Expires_in string `json:"Expires_in"`
Scope string `json:"Scope"`
Session_key string `json:"Session_key"`
Access_token string `json:"Access_token"`
Session_secret string `json:"Session_secret"`
Error string `json:"Error"`
Error_description string `json:"Error_description"`
}
func main() {
r := gin.Default()
//获取post过来的图片(base64编码)
r.POST("/recognize", func(c *gin.Context) {
var tokenData Token
json2struct( getAccessToken(), &tokenData )
accessToken = tokenData.Access_token
image := c.PostForm("image")
text := getText(image)
c.JSON(200, gin.H{
"result": text,
})
})
r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}
//json字符串转struct
func json2struct(str string, t *Token){
err := json.Unmarshal([]byte(str), t)
if err != nil {
panic("json转struct出错")
}
}
//获取access token
func getAccessToken() string{
response, err := http.PostForm(accessTokenUrl, url.Values{"grant_type": {"client_credentials"}, "client_id": {apiKey}, "client_secret": {secretKey}})
if err != nil {
return ""
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil{
return ""
}
return string(body)
}
//获取图片上的文字
func getText(image string) string{
response, err := http.PostForm(textGeneralBasicUrl + "?access_token="+ accessToken, url.Values{"image": {image}})
if err != nil {
return ""
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil{
return ""
}
return string(body)
}
最后输入命令:go run main.go
总结
百度api上说要 urlencode(base64),这里不用写,通过 uni.request 的 post 过来时 header 里加上content-type: application/x-www-form-urlencoded就可以了