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"
}
}

