概要
- 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 件のコメント :
コメントを投稿