Google Cloud Functionsで、Cloud Vision APIを使ってみました。Cloud Functionsを使う利点は、credentialsをアプリに埋め込む必要がない点(内部でAWSだとIAM Role的にcredentialsを取得してくれる。)
まず、ディレクトリの作成。
mkdir visiontest; cd visiontest;
次に、ライブラリのインストール。node versionは、v0.12.7を使用。
npm install --save gcloud
node.jsのvision APIは以下を参照
https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.36.0/vision?method=detectText
Cloud functionsのコードサンプルは以下になります。
var gcloud = require('gcloud')({ projectId: 'xxxxxxxxxx' }); exports.visiontest = function (context, data){ var vision = gcloud.vision(); if ( data != null ){ var gcs = gcloud.storage(); var myBucket = gcs.bucket('vision-load-image'); var file = myBucket.file(data.name); vision.detectText(file, function(err, text, apiResponse) { console.log('text ', text); data = null; }); } context.success(); }
functionsをデプロイ。
gcloud alpha functions deploy visiontest --bucket deploy-bucket --trigger-gs-uri vision-load-image
以前デジカメで撮影した画像をGCSバケットにアップロード。
gsutil cp IMAG0105.jpg gs://vision-load-image/
Stackdriver loggingに、解析結果が表示されることがわかります。おもけに、精度も高い。コマンドでアップロードする場合は、1度のみ実行されるのだが、Cyberduckで画像ファイルをドラッグドロップすると、なぜうか2回functionsが実行される。
GCSに登録された画像を画像解析結果をBigQueryに蓄積していくようなことが可能になります。
安価なOCRシステムが構築できる!?チュートリアルも公開されています。
https://cloud.google.com/functions/docs/tutorials/ocr
今はまだnodeのAPIが公開されていないSpeech APIもよくよくは使えるようになるのかなあ。(GCSに音声ファイルをアップロードすると、音声ファイルを解析して結果を返すとか)
2016/9/22 Update
packages.jsonをデプロイするフォルダに置いておけば、npm install –save gloud等不要です。0.29.0からVision APIのfunctionが使えるようです。
{ "name": "visiontest", "version": "1.0.0", "main": "index.js", "dependencies": { "gcloud": "^0.37.0", "node-uuid": "^1.4.7" } }