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 "" }