LoginSignup
7
9

More than 5 years have passed since last update.

Google Vision APIをHerokuで使う

Last updated at Posted at 2017-04-26

最近Line Bot作りを暇つぶしにやっています。

簡単な画像認識をするためにGoogle Vision APIを使おうとしたのですが、LineBotの運用をHerokuで行っていたことで問題がありました。

Herokuではアプリケーションの管理をgitを用いて行っています。そのためGoogle Vison Apiを使用するのに必要な認証用のjsonファイルをプロジェクトに含めなければなりませんでした。(Google Vision APIのGo言語用パッケージの仕様はjsonファイルを読み込む用になっている)

ctx := context.Background()

// Create the client.
client, err := vision.NewClient(ctx)
if err != nil {
    return nil, err
}

通常は上記のようにしてclientのインスタンスを作成します。しかし、これでは先ほど述べたようにjsonファイルをHeroku上に置くことになるのでよろしくありません。

ここに参考となるコードが載っていたので、これを参考に書き換えてみました。

json := os.Getenv("GOOGLE_APPLICATION_CREDENTIALS")
ctx := context.Background()
jwtConfig, err := google.JWTConfigFromJSON([]byte(json), vision.Scope)
if err != nil {
    return nil, errors.New("google.JWTConfigFromJSON :" + err.Error() + "\n" + json)
}

ts := jwtConfig.TokenSource(ctx)

// Create the client.
client, err := vision.NewClient(ctx, option.WithTokenSource(ts))
if err != nil {
    return nil, err
}

先ほどよりも長くなってしまいましたが、これでいけました。Herokuの環境変数GOOGLE_APPLICATION_CREDENTIALSに認証用のjsonファイルの中身を設定しておく必要があります。使っているシェルがbashであるなら以下のようにして設定できると思います。

$ heroku config:set GOOGLE_APPLICATION_CREDENTIALS="$(cat <ファイル名>.json)"

参考にしたページ:
Load GOOGLE_APPLICATION_CREDENTIALS json content via an environment variable instead of a file #185
Google Vision APIのサンプルプログラム


作成中のlinebot
https://github.com/hasokon/linebot

7
9
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
7
9