您好,登錄后才能下訂單哦!
這篇文章主要講解了“Go請求兔子識別接口怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Go請求兔子識別接口怎么實現”吧!
這里主要使用的是曠視Face 的接口來完成這部分的工作。所以只要能獲取接口地址或者SDK的權限就可以完成工作。簡單的步驟:注冊賬號==> 控制臺中創建應用==> 獲取對應的 Api Key 和 Secret。
接口請求方法是 post
請求,請求格式是 multipart/form-data
。所以可以對請求進行簡單的封裝。這里先簡單抽出圖片地址方式進行封裝,其他的key 和secret 可以使用配置在方式。
// 二進制文件形式封裝 func RequestFormImgPath(imgPath string) (result []byte, err error) { url := "https://api-cn.faceplusplus.com/imagepp/beta/detectsceneandobject" method := "POST" payload := &bytes.Buffer{} writer := multipart.NewWriter(payload) _ = writer.WriteField("api_key", _ConfigKey) _ = writer.WriteField("api_secret", _ConfigSecret) var file *os.File if file, err = os.Open(imgPath); err != nil { return nil, err } defer file.Close() part3, err := writer.CreateFormFile("image_file", filepath.Base(imgPath)) _, err = io.Copy(part3, file) if err != nil { return nil, err } if err = writer.Close(); err != nil { return nil, err } client := &http.Client{} req, err := http.NewRequest(method, url, payload) if err != nil { fmt.Println(err) return } req.Header.Set("Content-Type", writer.FormDataContentType()) var res *http.Response if res, err = client.Do(req); err != nil { return nil, err } defer res.Body.Close() return ioutil.ReadAll(res.Body) }
這種可使用的場景是,當你的圖片存儲在OSS 上或者是你本地的課訪問的圖片地址。當然可以進一步封裝請求,可以增加
兩個標識請求類型和圖片字符串格式值,然后根據請求type 讀取不同的值進行請求。
func RequestFormImgPath(imgType int,imgStr string,imgPath string) (result []byte, err error) { if imgType =1 { imgage_url =imgStr } if imgType =2 { image_base64 =imgStr } if imgType =3 { image_file =imgPath } }
然后就可以根據返回值進行解析結果:objects[0].value == "Rabbit" 說明就是我們想要的兔子。
{ "time_used": 1398, "scenes": [ { "confidence": 42.366, "value": "Coast" } ], "image_id": "tJw8Sy1jtTJ+9/DBZNSvvQ==", "objects": [ { "confidence": 85.478, "value": "Rabbit" } ], "request_id": "1675855779,71f61465-240d-4174-b82b-f98f4b22b082" }
因為 Go語言沒有類的定義,所以如何反序列化請求接口也很是很重要的問題,因為這就要求你的 response 的結構體要定義好的。以上的 json 格式是當你請求成功時的返回結果,但是當請求失敗的時候返回結果是不一樣的。
所以在設計的時候可以將錯誤返回的字段也定義在響應結構體上,然后根據 error_message 字段是否非空來判斷是否成功與否。
type RabbitResponse struct { TimeUsed int `json:"time_used"` ErrorMessage string `json:"error_message"` // 接口錯誤時才有值 Scenes []ScenesDto `json:"scenes"` ImageId string `json:"image_id"` Objects []ObjectsDto `json:"objects"` RequestId string `json:"request_id"` } type ScenesDto struct { Confidence float64 `json:"confidence"` Value string `json:"value"` } type ObjectsDto struct { Confidence float64 `json:"confidence"` Value string `json:"value"` }
這樣就簡單的完成了兔子圖片的識別接口封裝。
感謝各位的閱讀,以上就是“Go請求兔子識別接口怎么實現”的內容了,經過本文的學習后,相信大家對Go請求兔子識別接口怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。