You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package ai_model_cli
import (
"goskeleton/app/global/my_errors"
"goskeleton/app/global/variable"
"goskeleton/app/utils/baidubce"
"net/http"
"net/url"
"strings"
"github.com/gin-gonic/gin"
)
/**
* 向百度智能云ocr(基础精准版)发送消息, 获得识别消息
* @return 识别出的信息的内容
*/
func RequestOCR(context *gin.Context) (r bool, c interface{}) {
path := "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token=" + baidubce.GetAccessToken()
// 获得图片数据,需要 base64 和urlencode处理
// TODO:linlnf
content := context.PostForm("pic")
// 组装 body 数据参数在该网址https://cloud.baidu.com/doc/OCR/s/1k3h7y3db
data := make(url.Values)
data.Set("detect_direction", "false")
data.Set("paragraph", "false")
data.Set("probability", "false")
data.Set("multidirectional_recognize", "false")
data.Set("image", content)
payload := strings.NewReader(data.Encode())
client := &http.Client{}
// 请求数据
req, err := http.NewRequest("POST", path, payload)
if err != nil {
variable.ZapLog.Error(my_errors.ErrorBaiduCEUseOCRFail + err.Error())
return false, nil
}
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
req.Header.Add("Accept", "application/json")
res, err := client.Do(req)
if err != nil {
variable.ZapLog.Error(my_errors.ErrorBaiduCEUseOCRFail + err.Error())
return false, nil
}
defer res.Body.Close()
//从res中提取识别出的字符信息
mbody, err := baidubce.DecodeResBody(res, "ocr")
if err != nil {
variable.ZapLog.Error(my_errors.ErrorBaiduCEUseOCRFail + err.Error())
return false, nil
}
return true, gin.H{
"words": decodeOCRBody2Str(mbody),
}
}
/*
* 将返回的内容中的所有识别出的文字信息进行组合
* @return 识别出的信息的内容字符串
*/
func decodeOCRBody2Str(mbody map[string]interface{}) (str string) {
words, ok := mbody["words_result"]
if ok {
sliceWords, ok := words.([]interface{})
if ok {
// 遍历切片
for _, word := range sliceWords {
str += word.(map[string]interface{})["words"].(string) + "\n"
}
}
return str
}
return ""
}