とりあえずCloudPlatformの管理画面に行って、VisionAPIを有効にする。
なるほど、GAE、GCE内だと認証いらないのか。
Golangだからgo getしてimportする。
"golang.org/x/oauth2/google"
"golang.org/x/net/context"
GCE、GAE外だとJsonファイルを読み込んでOAuth2の認可を付与したHTTPクライアントを作らないといけないけど、GCE、GAE内だとgoogle.DefaultClientでいいみたい。
// cはGAEのコンテキスト
client, err := google.DefaultClient(c, vision.CloudPlatformScope)
実際リクエストを送るfunc全体。(今回はLABEL_DETECTION)
func RequestVisionApi(c context.Context,imgData []byte) (string ,error) {
enc := base64.StdEncoding.EncodeToString(imgData)
img := &vision.Image{Content: enc}
feature := &vision.Feature{
Type: "LABEL_DETECTION",
MaxResults: 10,
}
req := &vision.AnnotateImageRequest{
Image: img,
Features: []*vision.Feature{feature},
}
batch := &vision.BatchAnnotateImagesRequest{
Requests: []*vision.AnnotateImageRequest{req},
}
client, err := google.DefaultClient(c, vision.CloudPlatformScope)
if err != nil {
return "", err
}
service, err := vision.New(client)
res, err := service.Images.Annotate(batch).Do()
if err != nil {
return "", err
}
// てきとーに使いたい形に整形する。
s := ""
for _,annotation := range res.Responses[0].LabelAnnotations {
s = fmt.Sprintf("%s\n%s:%d%",s ,annotation.Description, int(annotation.Score * 100.0))
}
s = strings.TrimPrefix(s, "\n")
return s, nil
}
使ってみた
よしよし、カレーだな