本文為您介紹如何使用阿里云視覺智能開放平臺相關服務的Go SDK,包括SDK的獲取和安裝方法,以及SDK代碼示例。
阿里云視覺智能開放平臺各類目視覺AI能力SDK接入、接口使用或問題咨詢等,請通過釘釘群(23109592)加入阿里云視覺智能開放平臺咨詢群聯系我們。
該版本SDK最低環境要求必須不低于Go 1.10.x,如不滿足請升級Go版本。
準備工作
在安裝和使用阿里云SDK前,確保您已經注冊阿里云賬號并生成訪問密鑰(AccessKey)。具體操作,請參見創建AccessKey。
執行以下命令,根據需要的AI類目安裝SDK包。
生成專區:
go get github.com/alibabacloud-go/aigen-20240111
人臉人體:
go get github.com/alibabacloud-go/facebody-20191230/v4
文字識別:
go get github.com/alibabacloud-go/ocr-20191230/v3
商品理解:
go get github.com/alibabacloud-go/goodstech-20191230/v2
內容審核:
go get github.com/alibabacloud-go/imageaudit-20191230/v3
圖像識別:
go get github.com/alibabacloud-go/imagerecog-20190930/v2
圖像生產:
go get github.com/alibabacloud-go/imageenhan-20190930/v2
分割摳圖:
go get github.com/alibabacloud-go/imageseg-20191230/v2
目標檢測:
go get github.com/alibabacloud-go/objectdet-20191230/v2
圖像分析處理:
go get github.com/alibabacloud-go/imageprocess-20200320/v2
視覺搜索:
go get github.com/alibabacloud-go/imgsearch-20200320/v2
視頻生產:
go get github.com/alibabacloud-go/videoenhan-20200320/v3
視頻理解:
go get github.com/alibabacloud-go/videorecog-20200320/v2
視頻分割:
go get github.com/alibabacloud-go/videoseg-20200320/v2
異步任務管理:
go get github.com/alibabacloud-go/viapi-20230117/v2
人臉核身服務端20200910專用版本:
go get github.com/alibabacloud-go/facebody-20200910/v3
SDK下載地址如下:
AI類目 | Github鏈接 |
生成專區 | |
人臉人體 | |
文字識別 | |
商品理解 | |
內容審核 | |
圖像識別 | |
圖像生產 | |
分割摳圖 | |
目標檢測 | |
視覺搜索 | |
圖像分析處理 | |
視頻生產 | |
視頻理解 | |
視頻分割 | |
異步任務管理 | |
人臉核身服務端20200910專用版本 |
配置環境變量
配置環境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
阿里云賬號AccessKey擁有所有API的訪問權限,建議您使用RAM用戶進行API訪問或日常運維,具體操作,請參見創建RAM用戶。
請不要將AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導致AccessKey泄露,威脅您賬號下所有資源的安全。
Linux和macOS系統配置方法
在IntelliJ IDEA中打開終端Terminal。
執行以下命令,配置環境變量。
<access_key_id>
需替換為您RAM用戶的AccessKey ID,<access_key_secret>
替換為您RAM用戶的AccessKey Secret。如果后續需要進行更多權限相關的配置,具體操作請參見使用RAM Policy控制訪問權限。export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
Windows系統配置方法
新建環境變量文件,添加環境變量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并寫入已準備好的AccessKey ID和AccessKey Secret。然后重啟Windows系統。本操作以Windows 10為例進行說明。打開文件資源管理器,在此電腦上右鍵單擊屬性。
在右側導航欄,單擊高級系統配置。
在系統屬性對話框的高級頁簽下,單擊環境變量。
在環境變量對話框中,單擊新建(W)。
在彈出的新建系統變量對話框中,添加環境變量
ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
,并寫入已準備好的AccessKey ID和AccessKey Secret。重啟Windows系統,使配置生效。
SDK示例
本文以RecognizeBankCard為例。
文件在上海地域OSS
每個類目的訪問域名與對應Region開通能力,請參見訪問域名。
package main
// 建議使用go mod tidy安裝依賴
import (
"fmt"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
// 1、這里只是以ocr為例,其他能力請引入相應類目的包。包名可參考本文檔上方的SDK包名稱,能力名可參考對應API文檔中的Action參數。例如您想使用通用分割,其文檔為http://bestwisewords.com/document_detail/151960.html,可以知道該能力屬于分割摳圖類目,能力名稱為SegmentCommonImage,那么您需要將代碼中ocr20191230改為imageseg20191230,ocr-20191230改為imageseg-20191230,將RecognizeBankCard改為SegmentCommonImage。版本可以參考文檔上面的SDK包信息。
ocr20191230 "github.com/alibabacloud-go/ocr-20191230/v3/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
)
func main() {
// 2、創建AccessKey ID和AccessKey Secret,請參考http://bestwisewords.com/document_detail/175144.html。
// 如果您用的是RAM用戶的AccessKey,還需要為RAM用戶授予權限AliyunVIAPIFullAccess,請參考http://bestwisewords.com/document_detail/145025.html。
// 從環境變量讀取配置的AccessKey ID和AccessKey Secret。運行示例前必須先配置環境變量。
accessKeyId := os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
accessKeySecret := os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
//初始化配置對象 &openapi.Config。Config對象存放AccessKeyId、AccessKeySecret、Endpoint等配置。
config := &openapi.Config{
AccessKeyId: tea.String(accessKeyId),
AccessKeySecret: tea.String(accessKeySecret),
}
// 3、訪問的域名。注意:這個地方需要求改為相應類目的域名,參考:http://bestwisewords.com/document_detail/143103.html
config.Endpoint = tea.String("ocr.cn-shanghai.aliyuncs.com")
// 4、這里只是以ocr為例,其他能力請使用相應類目的包
client, err := ocr20191230.NewClient(config)
if err != nil {
panic(err)
}
// 5、這里只是以ocr的RecognizeBankCard為例,其他能力請使用相應類目的包和類
recognizeBankCardRequest := &ocr20191230.RecognizeBankCardRequest{
ImageURL: tea.String("http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg"),
}
runtime := &util.RuntimeOptions{}
// 6、這里只是以ocr的RecognizeBankCard為例,其他能力請使用相應類目的包和類,注意RecognizeBankCardWithOptions也需要改成對應能力的方法名。方法名是根據能力名稱按照一定規范形成的,如能力名稱為SegmentCommonImage,對應方法名應該為SegmentCommonImageWithOptions。
recognizeBankCardResponse, err := client.RecognizeBankCardWithOptions(recognizeBankCardRequest, runtime)
if err != nil {
// 獲取整體報錯信息
fmt.Println(err.Error())
} else {
// 獲取整體結果
fmt.Println(recognizeBankCardResponse)
// 獲取單個字段,這里只是一個例子,具體能力下的字段需要看具體能力的文檔
fmt.Println(recognizeBankCardResponse.Body.Data.CardNumber)
}
}
需要修改的地方均在上述代碼注釋中標明,總結如下:
引入包的時候,需要引入相應類目的包和相關類。包名可參考上文SDK包名稱,能力名稱可參考對應API文檔中的Action參數。
例如,您想使用通用分割能力,通過通用分割API文檔可知該能力屬于分割摳圖類目(imageseg20191230),能力名稱為SegmentCommonImage,您需要將代碼中的ocr20191230改為imageseg20191230,將RecognizeBankCard改為SegmentCommonImage。
訪問的域名一定要修改為相應類目的域名,如果域名類目不匹配會報錯
InvalidAction.NotFound
。關于域名詳情,請參見訪問域名。Client類需要使用相應類目的包下面的Client類。
Request和Response需要使用相應類目的包和類。
調用Client的方法時,方法名需要改成對應能力的方法名。方法名是根據能力名稱按照一定規范形成的。例如,能力名稱為SegmentCommonImage,對應方法名應該為SegmentCommonImageWithOptions。
文件在本地或可訪問的URL
文件在本地、文件不在同一地域與文件在同地域區別在于需要使用xxxAdvanceRequest,文件是以Stream形式通過ImageURLObject參數傳入。
package main
// 建議使用go mod tidy安裝依賴
import (
"fmt"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
// 1、這里只是以ocr為例,其他能力請引入相應類目的包。包名可參考本文檔上方的SDK包名稱,能力名可參考對應API文檔中的Action參數。例如您想使用通用分割,其文檔為http://bestwisewords.com/document_detail/151960.html,可以知道該能力屬于分割摳圖類目,能力名稱為SegmentCommonImage,那么您需要將代碼中ocr20191230改為imageseg20191230,ocr-20191230改為imageseg-20191230,將RecognizeBankCard改為SegmentCommonImage。版本可以參考文檔上面的SDK包信息。
ocr20191230 "github.com/alibabacloud-go/ocr-20191230/v3/client"
util "github.com/alibabacloud-go/tea-utils/v2/service"
"github.com/alibabacloud-go/tea/tea"
"net/http"
)
func main() {
// 2、創建AccessKey ID和AccessKey Secret,請參考http://bestwisewords.com/document_detail/175144.html。
// 如果您用的是RAM用戶的AccessKey,還需要為RAM用戶授予權限AliyunVIAPIFullAccess,請參考http://bestwisewords.com/document_detail/145025.html。
// 從環境變量讀取配置的AccessKey ID和AccessKey Secret。運行示例前必須先配置環境變量。
accessKeyId := os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
accessKeySecret := os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
//初始化配置對象 &openapi.Config。Config對象存放AccessKeyId、AccessKeySecret、Endpoint等配置。
config := &openapi.Config{
AccessKeyId: tea.String(accessKeyId),
AccessKeySecret: tea.String(accessKeySecret),
}
// 3、訪問的域名。注意:這個地方需要求改為相應類目的域名,參考:http://bestwisewords.com/document_detail/143103.html
config.Endpoint = tea.String("ocr.cn-shanghai.aliyuncs.com")
// 4、這里只是以ocr為例,其他能力請使用相應類目的包
client, err := ocr20191230.NewClient(config)
if err != nil {
fmt.Print(err.Error())
panic(err)
}
// 場景一,使用本地文件
//file, err:=os.Open("/tmp/bankCard.png")
//if err != nil {
// fmt.Println("can not open file",err)
// panic(err)
//}
// 場景二,使用任意可訪問的url
httpClient := http.Client{}
file, _ := httpClient.Get("https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/ocr/RecognizeBankCard/yhk1.jpg")
// 5、這里只是以ocr的RecognizeBankCard為例,其他能力請使用相應類目的包和類
recognizeBankCardAdvanceRequest := &ocr20191230.RecognizeBankCardAdvanceRequest{
ImageURLObject: file.Body,
}
runtime := &util.RuntimeOptions{}
// 6、這里只是以ocr的RecognizeBankCard為例,其他能力請使用相應類目的包和類,注意RecognizeBankCardAdvance也需要改成對應能力的方法名。方法名是根據能力名稱按照一定規范形成的,如能力名稱為SegmentCommonImage,對應方法名應該為SegmentCommonImageAdvance。
recognizeBankCardResponse, err := client.RecognizeBankCardAdvance(recognizeBankCardAdvanceRequest, runtime)
if err != nil {
// 獲取整體報錯信息
fmt.Println(err.Error())
} else {
// 獲取整體結果
fmt.Println(recognizeBankCardResponse)
// 獲取單個字段,這里只是一個例子,具體能力下的字段需要看具體能力的文檔
fmt.Println(recognizeBankCardResponse.Body.Data.CardNumber)
}
}
需要修改的地方均在上述代碼注釋中標明,總結如下:
引入包的時候,需要引入相應類目的包和相關類。包名可參考上文SDK包名稱,能力名稱可參考對應API文檔中的Action參數。
例如,您想使用通用分割能力,通過通用分割API文檔可知該能力屬于分割摳圖類目(imageseg20191230),能力名稱為SegmentCommonImage,您需要將代碼中的ocr20191230改為imageseg20191230,將RecognizeBankCard改為SegmentCommonImage。
訪問的域名一定要修改為相應類目的域名,如果域名類目不匹配會報錯
InvalidAction.NotFound
。關于域名詳情,請參見訪問域名。Client類需要使用相應類目的包下面的Client類。
Request和Response需要使用相應類目的包和類。
調用Client的方法時,方法名需要改成對應能力的方法名。方法名是根據能力名稱按照一定規范形成的。例如,能力名稱為SegmentCommonImage,對應方法名應該為SegmentCommonImageAdvance。
常見問題
調用報錯如何處理?
如果您的調用出現報錯,請先嘗試升級SDK包到最新版本,最新版本請參考各類目SDK鏈接。如果您的程序中同時引入了多個類目的包,也可以先嘗試將這些包都升級到最新版本,避免版本之間的包沖突問題。
依賴包版本如何確定?
可以在OpenAPI門戶中搜索能力名稱,選擇視覺智能開放平臺的API,點擊進入之后選擇Go語言查看生成的示例代碼。
依賴包如何安裝?
寫好代碼之后,建議使用go mod tidy安裝依賴。
技術支持
如果以上方法未能解決您的問題,請通過搜索釘釘群號(23109592)加入阿里云視覺智能開放平臺咨詢群聯系我們。屆時會有專業的技術人員與您對接解決問題。