LoginSignup
3
2

More than 5 years have passed since last update.

GAEでCloudVisionAPIを使ったら案外簡単だった(golang)

Last updated at Posted at 2016-10-07

とりあえずCloudPlatformの管理画面に行って、VisionAPIを有効にする。

認証情報を追加しようとすると
スクリーンショット 2016-10-07 17.04.10.png

スクリーンショット 2016-10-07 17.04.34.png

なるほど、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
}

使ってみた

はやりのLINE Botで使うとこんな感じ。
CuJtgdxVIAAINkR (1).jpg

よしよし、カレーだな

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2