Node.jsからAutoML Vision の鼓膜画像分類モデルを使ってみる

##概要
普段は耳鼻科の開業医をしています。

前回の記事はこちら
[GCP Cloud AutoML Vision を使った鼓膜画像分類](https://qiita.com/doikatsuyuki/items/ff00183f71347219d0f8)

今回は作成したAutoML Visionの鼓膜画像分類モデルをNode.jsから使ってみました。

##作成
**1.プロジェクトの作成**

こちらを参考にしました
[Cloud AutoML: Node.js Client](https://googleapis.dev/nodejs/automl/latest/)

```index.js
require('dotenv').config();//.envを読み込む

const automl = require('@google-cloud/automl');
const fs = require('fs');

// Create client for prediction service.
const client = new automl.PredictionServiceClient();

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */

const projectId = `The GCLOUD_PROJECT string, e.g. "my-gcloud-project"`;
const computeRegion = `region-name, e.g. "us-central1"`;
const modelId = `id of the model, e.g. “ICN723541179344731436”`;
const filePath = `local text file path of content to be classified, e.g. "./resources/flower.png"`;
const scoreThreshold = `value between 0.0 and 1.0, e.g. "0.5"`;

// Get the full path of the model.
const modelFullId = client.modelPath(projectId, computeRegion, modelId);

// Read the file content for prediction.
const content = fs.readFileSync(filePath, 'base64');

const params = {};

if (scoreThreshold) {
  params.score_threshold = scoreThreshold;
}

// Set the payload by giving the content and type of the file.
const payload = {};
payload.image = {imageBytes: content};

async function test(){
  // params is additional domain-specific parameters.
  // currently there is no additional parameters supported.
  const [response] = await client.predict({
    name: modelFullId,
    payload: payload,
    params: params,
  });
  console.log(`Prediction results:`);
  response.payload.forEach(result => {
    console.log(`Predicted class name: ${result.displayName}`);
    console.log(`Predicted class score: ${result.classification.score}`);
  });
}

test();

```

**2.AutoML用認証キーの作成**

コンソール画面左上のナビゲーションメニューから『APIとサービス』➡『認証情報』
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/e785d75d-e28c-4601-f701-1e8d189c3cb1.png)

『認証情報を作成』➡『サービスアカウント』
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/120422cb-2295-42a7-fcd6-a42e43b64f4b.png)

サービスアカウント名を適当に決めて『作成』を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/963df2bf-ce17-e439-16bc-33218d63fd98.png)

ロールは『AutoML 予測者』を選択し『続行』
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/a2a20887-7731-62db-4726-bd62d545d1f2.png)

『+キーを作成』を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/6573eadf-96f0-e498-b570-6a30bc160da5.png)

『JSON』➡『作成』を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/2d381296-dfae-2531-aee8-2d812b846625.png)
JSONファイルがダウンロードされます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/2103fd4b-c234-5661-2805-3ce819291f2b.png)

**3.AutoML用認証キーのつなぎ込み**

ダウンロードされたJSONファイルをindex.jsと同じフォルダーに入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/db35968a-08a0-43fc-8a6a-1a38d587f257.png)

.envを作成

```.env
GOOGLE_APPLICATION_CREDENTIALS=./ここにダウンロードされたJSONファイル名を記入
````

必要なパッケージをインストール

```
$ npm install @google-cloud/automl 
$ npm install dotenv 
```

**4.認証情報を設定**

index.jsを以下のように書き換える

```index.js
const projectId = "自分のプロジェクト名";
const computeRegion = "us-central1";
const modelId = "ICNで始まる番号";
const filePath = "テストしたいローカル画像のフルパス"
const scoreThreshold = "0.5";

```

modelIdはこちらの赤丸の部分
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/23688134-aa27-cace-8cac-051e7702a7b7.png)

今回テストしたローカル画像はこちら
急性中耳炎の画像です

![WIN_20190529_08_40_52_Pro.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/cacc3753-adb8-1ae6-6132-428a11e724ba.jpeg)

フルパスは以下のように区切らないとうまく動きませんでした(windows10)。

```js
const filePath = "C:\\Users\\***\\data\\test\\aom\\WIN_20190529_08_40_52_Pro.jpg";
```

**5.デプロイ**
今回デプロイし終わるまで20～30分ほどかかりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/19462cea-36f6-7834-dc43-488c20204f02.png)

ちなみにデプロイしたままにすると1日3000円ほど課金されますので。使わないときはデプロイを解除しましょう。
[モデルのデプロイ解除の方法はこちら](https://cloud.google.com/vision/automl/object-detection/docs/undeploy?hl=ja&fbclid=IwAR2715JeSEceTjs3OQMb-vByZpzp6ACfcdOhss6SeBqVKZqeXiUN8K8tdUM)



##テスト
index.jsを実行します。
Prediction class name：aom(急性中耳炎）と正しく判定されています。
Prediction class score(信頼度　0.0〜1.0の値が入ります）は１なのでかなり自信があるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453374/0fc18dd5-5486-965f-6fe6-4179c9b472fb.png)

##考察
Node.jsからAutoML Vision の鼓膜画像分類モデルを使うことができました。
次はLINE Botに組み込んでみたいと思います。