package ai_model_cli import ( "bytes" "encoding/base64" "encoding/json" "goskeleton/app/global/my_errors" "goskeleton/app/global/variable" "goskeleton/app/utils/baidubce" "net/http" "github.com/gin-gonic/gin" ) type BaiduBCEVOP struct { Format string `json:"format"` Rate int `json:"rate"` Channel int `json:"channel"` Cuid string `json:"cuid"` DevPid int `json:"dev_pid"` Speech string `json:"speech"` Len int `json:"len"` Token string `json:"token"` } /** * 向百度智能云ocr(基础精准版)发送消息, 获得识别消息 * @return 识别出的信息的内容 */ func RequestVOP(context *gin.Context) (r bool, c interface{}) { path := "https://vop.baidu.com/pro_api" // 获得语音数据,需要 base64 和urlencode处理 // TODO:linlnf content := context.PostForm("voc") // 再进行 Base64 解码 decodedVoc, _ := base64.StdEncoding.DecodeString(content) // 组装 body 数据,参数在该网址:https://cloud.baidu.com/doc/SPEECH/s/4lbxdz34z jsonData, _ := json.Marshal(BaiduBCEVOP{ Format: "pcm", Rate: 16000, Channel: 1, Cuid: "kRxqyFGTgJOtBU4b5LnhWEvX6g8EU4Z7", DevPid: 80001, Speech: content, Len: len(decodedVoc), Token: baidubce.GetAccessToken(), }) client := &http.Client{} // 请求数据 req, err := http.NewRequest("POST", path, bytes.NewBuffer(jsonData)) if err != nil { variable.ZapLog.Error(my_errors.ErrorBaiduCEUseVOPFail + err.Error()) return false, nil } req.Header.Add("Content-Type", "application/json") req.Header.Add("Accept", "application/json") res, err := client.Do(req) if err != nil { variable.ZapLog.Error(my_errors.ErrorBaiduCEUseVOPFail + err.Error()) return false, nil } defer res.Body.Close() //从res中提取识别出的信息 mbody, err := baidubce.DecodeResBody(res, "vop") if err != nil { variable.ZapLog.Error(my_errors.ErrorBaiduCEUseVOPFail + err.Error()) return false, nil } return true, gin.H{ "words": decodeBody2Str(mbody), } } /* * 将返回的内容中的所有识别出的文字信息进行组合 * @return 识别出的信息的内容字符串 */ func decodeBody2Str(mbody map[string]interface{}) (str string) { words, ok := mbody["result"].([]interface{}) if ok { for _, word := range words { str += word.(string) + "\n" } return str } return "" }