概要
- GoogleのAutoMLVisionを使ってWebAPI(NodeJS)を作った話。
- 事前にGCPにプロジェクトを作成する必要があります。
- Google Cloud AutoML Vision の使い方 機械学習モデルを作ってみよう を参考にプロジェクトを作成
環境構築
環境
- OS:CentOS 7.X
- NodeJS:10.7.0
- Expressを使ってます
環境構築
- 環境構築もあぱーブログ様のお世話になりました。以下、自分がハマったことのメモが中心です。
- Google Cloud AutoML Vision 機械学習モデルをAPI経由で使う手順を参考にサーバの環境構築を行います。
- ちょっとハマったこと
- CentOS 6.X へ構築しようとしたのですが、Pythonのバージョンが古くて、ろくにインストールできませんでした。
- Base64エンコード時に半角スペースが入っているとAutoMLVision側でデコード出来なかったってエラーが出たので、半角スペースを除いておいたほうが無難かと思います。
NodeJSでWebAPIを作る
- CurlでVisionAPIが実行できたので、あとはNodeJSからCurlを実行するお手軽形式でAPI作成しました。
Node module インストール
- NodeJSからコマンドを実行するためにchild-process を利用しました。
npm install child_process
バックエンド
router.post('/post2AutoMLVision', function(req, res, next) {
// 環境変数をNodeJSから読めてないようので直前でセット
process.env.GOOGLE_APPLICATION_CREDENTIALS = '/var/data/key/google-credential.json'; // 認証情報のパスを指定
// イメージのJSONファイルを作成
let jsonVal = '{"payload":{"image":{"imageBytes":"';
jsonVal += req.body.base64Image; // クライアントにてBase64へのエンコードは実施済み
jsonVal += '"},}}';
const requestJsonPath = '/var/data/temp/' + new Date().getTime().toString() + '.json';
fs.writeFileSync(requestJsonPath, jsonVal);
// curl実行
const visionUrl = 'https://automl.googleapis.com/v1beta1/projects/<プロジェクトID>/locations/us-central1/models/<モデルID>:predict';
const command = 'curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" ' + visionUrl + ' -d @' + requestJsonPath;
exec(command, (err, stdout, stderr) => {
// アップロードした ファイルを削除
fs.unlinkSync(requestJsonPath);
if (err) {
console.log(err);
}
// AutoMLVisionからのレスポンスをそのまま返す
res.status(200).send(stdout);
});
});
app.js
クライアントから送信するときに大きすぎってエラーがおきました。
- bodyParser側で上限サイズが決められているため、app.jsでサイズを変更すればOK
//app.use(bodyParser.urlencoded({ extended: false })); // 変更前 app.use(bodyParser.urlencoded({ limit:'10mb',extended: true }));
0 件のコメント :
コメントを投稿