Oracle Analtyics Cloud：画像認識AIサービスと連携してみる

# はじめに
Oracle Cloud Infrastracture（**OCI**）には、[Vision](https://docs.oracle.com/en-us/iaas/vision/vision/using/home.htm)という画像認識のAIサービスがあります。
Oracle Analytics Cloud（**OAC**）のデータ準備機能の一部である「データフロー」と、Visionで提供されている事前学習済みのモデルとの連携を試してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/7407cdca-2340-d9c5-eae5-d35ce0677684.png)

# 1. 準備
いくつか準備しておくものがありますので、紹介しておきます。

## 1.1 画像ファイルの準備
画像認識させるための画像ファイルが必要です。
自分で撮ってきたこんな画像ファイルをいくつか使うことにします。
![IMG_6659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/984a4ee7-0ad3-1c58-5b10-4a3a200dbe24.png)


## 1.2 オブジェクトストレージの準備
画像ファイルをアップロードするバケットと、一時領域として使用するバケットの2つが必要です。
OACとVisionとの連携では、一度の実行で2万枚までの画像が処理できます。
これを超えそうな場合は、バケットを分けてそれぞれに含まれる画像ファイルが2万を超えないようにします。
今回は、画像ファイルを「Vision」バケットに、一時領域として「MyVisionModelStagingBucket」バケットを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/0cded587-4156-017e-1f4d-fb04a2ede0e6.png)

## 1.3 接続に必要な情報
OCIコンソールにログインし、右上のプロファイルアイコンをクリックします。
「テナンシ」に移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f4d22bf6-c84a-f083-9681-c1ed5ccad7bb.png)
テナンシのOCIDをコピーしてメモしておきます。
オブジェクト・ストレージ・ネームスペースもメモしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/e005f12d-d7b5-3bdf-37d9-a18dbf8b5b7e.png)

同様にプロファイルからユーザ情報を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/df8769e7-acdb-b04d-6b18-2a3c1ab9457e.png)
ユーザのOCIDもコピーしてメモしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/fc26186b-eda4-5984-cd53-464547124937.png)

## 1.4 データセット
データセットを準備します。
今回は、CSVで準備しました。
|列名|値|
|:-|:-|
|ID|IDとなる数値|
|Bucket_Name|画像が保管されているバケットの名前|
|Bucket_URL|http:\//cloud.oracle.com/object-storage/<オブジェクト・ストレージ・ネームスペース>/<バケット名>/objects?region=<ホームリージョン>|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/fd568a08-2673-bbb7-c03f-6d601cb56a10.png)

# 2. OACとVisionの連携
## 2.1 Visionの事前学習済みモデルの登録
OACにログインし、ページメニューから「モデル/関数の登録」－「OCI Visionモデル」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/3cd840d5-af9d-7754-d061-e32bbf9402c0.png)
「接続の作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/6c281e3a-d3ed-bf0f-b047-8cb2dc512eb1.png)
次のように入力します。
|項目|値|
|:-|:-|
|接続名|任意の名称|
|リージョン識別子|ホームリージョンを指定します|
|テナンシOCID|メモしておいたOCID|
|ユーザーOCID|メモしておいたOCID|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/7199455d-1032-0b7b-c0bb-d487eeda4e96.png)
APIキーの「生成」をクリックします。
APIキーが生成されたら「コピー」をクリックします。

この画面は閉じないで、ブラウザの新規タブでOCIコンソールにログインし、ユーザの詳細画面で「APIキーの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/73121634-3f66-9935-9ce1-6d2524117f27.png)
「公開キーの貼り付け」を選択し、クリップボードから公開キーをペーストします。
「追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/3e5910ad-e185-b5b7-95f0-514cefa7918c.png)

OACに戻ってきて「接続の作成」の「保存」をクリックします。
モデルの選択画面が表示されます。今回はオブジェクト検出の事前学習済みモデルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/872fa7a7-8a8d-3b39-3295-ef1a91632f65.png)
事前に作成しておいた一時領域用のバケットを「ステージング・バケット名」に入力し「登録」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/699ceb64-dc13-35e0-d1ed-9bdd48d168a9.png)

## 2.2 データフローの作成
データフローを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/444a8b5b-0e7d-f6bf-f316-1b49659b31f8.png)
事前に作成しておいたCSVファイルをデータセットとして使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/4fde3c2e-ac98-4c27-8651-14bed087e1c6.png)
「＋」をクリックしてステップを追加します。「AIモデルの適用」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/68a0f414-ea28-f6d6-d868-c7790390de05.png)
登録したVisionモデルを選択し「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/20877df7-e270-d0eb-5412-3f6fb047cc12.png)
「Input Column」を「Bucket_URL」にし、「Maximum Number of Results」を「50」にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/7cfea9bd-dac2-cbc5-35a8-20867cb4c7d7.png)
行数をカウントするための列を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/52fd803c-1141-719b-c8f8-cc9de7d59ba0.png)
「データの保存」ステップを追加し、データフローに名前をつけて保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/faee99a9-02de-f251-95e5-aeb6cd0bffca.png)

## 2.3 結果の確認
データフローを実行し、できあがったデータセットを読み込んでみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/bb99d783-53f2-187c-e890-824912415d37.png)
駅前で撮った写真を5枚使ったのですが、結構認識するものなんですね！

## 2.4 カスタム・ビジュアライゼーションの使用
このカスタムビジュアライゼーションを使ってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/442627dc-9a01-3828-5cba-a25f37ed4882.png)
[ここからダウンロード](https://www.oracle.com/business-analytics/data-visualization/extensions/)できます。（無料のユーザ登録は必要です）

:::note info
「Vision Series plugin」は、オブジェクトストレージ内の画像ファイルをキャンバス内に表示してくれますが、オブジェクトストレージの可視性を「パブリック」にする必要があるため、セキュリティには十分留意してください。
また、OACの安全ドメインに「*.oraclecloud.com」を含めてください。
:::

OACの「コンソール」メニューの「拡張機能」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/26a91f18-7e58-7c92-a502-53dc76d0763e.png)
ダウンロードしたzipファイルをそのままアップロードしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/25536a11-608b-0eaf-f790-dd6ea487ed6c.png)

データフローで作成したデータセットを使用して新規にワークブックを作成します。
「Image File from Bucket」列をキャンバスにドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f45000e7-68a2-7f3f-7366-37078175c1ec.png)
自動ビジュアライゼーション機能が働いて「表」が作成されるので、導入したカスタムプラグイン「Vision Plugin」に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a83c36ba-fe2b-0944-a2e5-1fec9f5408f2.png)
「Vertices」に「Vertex 1」列と「Vertex 3」列をドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/45de7753-7e7e-1177-2e2b-19c34aef1996.png)
「マイ計算」を右クリックして、新規に計算を追加ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d4e72231-98a1-5088-a654-9b1646ecbbed.png)
「Image File from Bucket」列からファイル名だけを取り出す計算式を記入します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/6ddb8f12-9853-71fe-74e6-1e0c13ce570d.png)
作成した計算をキャンバスにドラッグ＆ドロップして「表」を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/cd119212-9538-9ddd-204a-24d6db0f3cef.png)
作成した表ビジュアライゼーションを「フィルタとして使用」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/2b9e7ba3-eba8-6cc6-6576-bc86bd7dc5d3.png)
できあがり。
ファイル名をクリックすると対応する画像が表示され、どこがオブジェクトとして認識されたかがわかるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/15fcefe6-bcb8-3b0a-1a58-147e9724f5a9.png)

# おわりに
アナリティクスツールとしては、ちょっと変わった使い方になりますが、画像ファイルからオブジェクト認識させた結果を確認するためのアプリケーションが簡単に作成できました。

# 参考情報

- [OCI Vision と Data Labeling でサクッと画像分類](https://qiita.com/shukawam/items/7fb5b7df843bff856f9c)
- [公式ドキュメント：OACとVisionの連携](https://docs.oracle.com/en/cloud/paas/analytics-cloud/acubi/integrate-oracle-analytics-cloud-oci-vision.html#GUID-DD87FD38-176B-4D0C-83B1-8106263DAC98)
- [公式ドキュメント：Vision](https://docs.oracle.com/en-us/iaas/vision/vision/using/home.htm)