Oracle Analtyics CloudとOCI画像認識AIサービスとの連携について試してみた



Oracle Cloud Infrastracture（**OCI**）では、[OCI Vision](https://speakerdeck.com/oracle4engineer/vision-overview)という画像認識のAIサービスが提供されています。このサービスを利用すると、画像ファイルに含まれるオブジェクトの検出や分類を行うことができます。

 Oracle Analytics Cloud（**OAC**）のデータ準備機能（データ・フロー）から、OCI Visionが提供する事前学習済みの画像分析用モデルを呼び出してデータセットに適用することができます。

今回は、Oracle Analytics CloudとOCI Vison連携を試してみます。

![001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/0e460197-e612-a4ef-a8d9-ff031756d9d2.jpeg)





# ステップ１：準備

## 1.1 画像ファイルの準備

まず、画像認識をさせたい、画像ファイルを準備します。OCI Vsionでは、JPGとPNGのフォーマットの画像ファイルを取り込むことができます。

利用可能なファイルフォーマット：JPG、PNG

最大ファイルサイズ：5MB

![IMG_0131.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/4ab4fc1b-be75-bbe0-8492-f45704903d66.jpeg)


## 1.2 オブジェクトストレージの準備

画像ファイルを格納するバケットと、ステージング領域として使用するバケットの2つが必要です。画像ファイルを格納するバケットとステージング用のバケットは同一のものでも構いません。

 今回は、「Tutrial_Backet」バケットを一つ用意して使いまわすことにします。

バケットはプライベートでもパブリックでも構いませんが、Analytics Cloudからアクセスできるようになっている必要があります。今回は、画像ファイルを表示するためのビジュアライズ表現をAnalytics Cloud上で利用する都合上、パブリックに変更します。


![003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/a3523394-658d-9a4e-25b4-06953778372a.jpeg)



## 1.3 イメージのアップロード

イメージをバケットにアップロードします。

バケットに無関係なファイルが含まれていないことを確認してください。Oracle Analyticsは、バケット内のすべてのファイルを処理します。

![](C:\Users\PC_User\Pictures\記事\Vision\004.JPG)
![005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/66de7b8c-9378-db58-f8cf-352ee085fab6.jpeg)




## 1.4 データセットの準備

データセットを準備します。今回はCSVフォーマットで準備します。

a.` ID`、`Image Name`および`File Location`のフィールドを含むCSVファイルを作成します。

b.  オブジェクトストレージ内の各イメージについて、省略アイコン![省略アイコン](https://docs.oracle.com/cloud/help/ja/analytics-cloud/ACUBI/img/GUID-42CCEAEF-AF97-4351-A9CB-0D531AB4B58F-default.png)をクリックし、「オブジェクト詳細の表示」を選択します。

c.  「名前」の値および「URLパス(URI)」の値をコピーします。

d.  「名前」の値を`Image Name`に貼り付け、「URLパス(URI)」の値を`File Location`に貼り付けます。



| 列名             | 備考                                         | 必須 |
| ---------------- | -------------------------------------------- | ---- |
| ID               | IDとなる数値                                 | Y    |
| Image Name       | 画像ファイルの「名前」                       | Y    |
| File Location    | 画像ファイルが格納されている「URLパス(URI)」 | Y    |
| Uploaded Date    | 画像ファイルのアップロード日、時間           | N    |
| Size             | 画像ファイルのサイズ                         |      |
| バケットのタイプ | N                                            |      |

**CSVファイルのサンプル**

![005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/c40b10fe-8ce1-f0ff-62dd-409a4f1257cb.jpeg)



任意の名前をつけて、CSVファイルを保存します。



## 1.5 データセットの作成

Oracle Analytics Cloudのホーム画面で、「作成」、「データセット」の順にクリックします。

![006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/f397aa7f-ea78-1637-7c64-e45cc4cb97ff.jpeg)


ステップ1.4で作成したCSVファイルをアップロードし、任意の名前（今回は`Vison_Image`）データセットを保存します

![007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/c9e632c3-aa7e-4714-4532-fdd65e09b790.jpeg)


# ステップ2：Analtics CloudとOCI Visionの連携



## 2.1接続情報の取得

OCIコンソールにログインし、右上のプロファイルアイコンをクリックします。
 「テナンシ」に移動します。

![008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/d4c6f20c-c77c-b5fb-8968-4a5f3b8d80d7.jpeg)




テナンシのOCIDをコピーして控えておきます。
![009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/b2e397f8-4630-3416-e8e2-5ccf5681ce87.jpeg)



同様にプロファイルからユーザー情報を表示します。


![010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/c4ea3c6f-3170-555f-252a-827329cdd675.jpeg)

ユーザーのOCIDもコピーして控えておきます


![011.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/e14e2d4e-6d49-bc17-8392-57a43c5af89d.jpeg)




## 2.2 OCI Visionの事前学習済みモデルの登録



Analytics Cloudにログインし、Oracle Analyticsホーム・ページで、「ページ・メニュー」 ![「ページ・メニュー」の省略記号](https://docs.oracle.com/cloud/help/ja/analytics-cloud/ACUBI/img/GUID-42CCEAEF-AF97-4351-A9CB-0D531AB4B58F-default.png)をクリックし、「モデル/関数の登録」、「OCI Visionモデル」の順に選択します。

![012.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/d903508c-b0ae-0518-f2d1-9eec8437969a.jpeg)



「接続の作成」をクリックします。


![013.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/00f6a08d-f632-885d-dc69-b755e0c54641.jpeg)



次の項目を入力します。

`接続名：任意の接続名称`

`接続情報：APIキーを選択`

`テナントOCID：2.1で控えておいたユーザーOCID`

`ユーザーOCID：2.1で控えておいたユーザーOCID`



APIキーの「生成」ボタンをクリックします。

生成されたAPIキーをコピーし、控えておきます。

![014.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/d2b622de-7630-359c-b28d-ea1699d8b2d8.jpeg)


この画面を「保存」する前に。ブラウザの新規タブでOCIコンソールにログインし、ユーザーの詳細画面で「APIキーの追加」をクリックします。

<img src="C:\Users\PC_User\Pictures\記事\Vision\015.JPG" style="zoom:80%;" />

![015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/da88e53b-512f-14df-3730-112b0fb58442.jpeg)



「公開キーの貼付け」を選択し、Analytics Cloudの接続定義画面で生成したAPIキーを貼付けて、「追加」をクリックします。



<img src="C:\Users\PC_User\Pictures\記事\Vision\016.JPG" style="zoom:80%;" />

![016.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/f8cb0922-17f1-8918-a47f-4952b932c8af.jpeg)


「閉じる」をクリックしたら、Oracle Analytics Cloudの設定画面に戻ってきて「接続の作成」の「保存」をクリックします。



Oracle Analytics Cloudのホーム・ページで、「ページ・メニュー」 ![「ページ・メニュー」の省略記号](https://docs.oracle.com/cloud/help/ja/analytics-cloud/ACUBI/img/GUID-42CCEAEF-AF97-4351-A9CB-0D531AB4B58F-default.png)をクリックし、「モデル/関数の登録」、OCI Visionモデルの順に選択します。

Visionモデルの登録ダイアログで、「接続から」の下にある、先ほど作成した接続「test_Bucket」を選択します。

![017.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/2e8aa4e0-8e1c-1796-6f61-ff452b5abd5d.jpeg)




使用可能な事前定義済みモデルのリストが表示されます。

![018.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/340a3254-4432-dfe6-156c-001be5a7ec3a.jpeg)

使用可能なモデルのリストから、画像データに適用するモデルを選択します。

今回は、画像データに写っているオブジェクトを検出したいので、「`Pretrained Object Detection`」を選択します。

モデルの詳細を表示する情報パネルがポップアップ表示されるので、

「モデル名」に、Oracle Analytics Cloud内でモデルを識別するための名前を指定します。

ステージング・バケット名には、用意したオブジェクトストレージのバケット名(今回は、`Tutrial_Bucket`)を入力します。

最後に「登録」をクリックします。

![019.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/c63905fb-810e-60bc-e9b8-3f1e9f265bf9.jpeg)

## 2.3 データ・フローの作成と実行

Oracle Analytics Cloudのホーム画面で、「作成」、「データ・フロー」の順にクリックします

![020.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/f955fa1f-d2f0-3730-4601-23c7b5dcb0c1.jpeg)


ステップ1.5で作成したデータセット（Vision_Imange）を選択し「追加」をクリックします。

![021.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/7eb635db-08d9-94a1-2da3-28a6efe62515.jpeg)


データ・フローの編集画面で、「＋」をクリックして、「AIモデルの適用」ステップを追加します。


![022.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/d24256e7-9dfe-c63f-9889-abc1a68bf9cb.jpeg)


ステップ2.2で登録したOCI Visionのモデル「Pretrained Object Detection」を選択し「OK」をクリックします。

![023.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/fa10354c-12ca-a307-d35c-986d3c58b0a4.jpeg)


パラメータを以下の要領で指定します。

`Input Column`：画像ファイルが格納されている「URLパス(URI)」が記載されたカラム（File Location）

`Input Type`: BucketかImagesのどちらかを選択。今回のデータセットは、個別の画像ファイルを指定しているので、Imageを選択

`Maximum Number of Results`:画像ファイル上で検出するオブジェクトの数の上限を指定（デフォルトは5）



<img src="C:\Users\PC_User\Pictures\記事\Vision\024.JPG" style="zoom: 80%;" />

![024.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/dd6a8819-3712-a6da-34f2-677d17503b15.jpeg)


「データの保存」ステップを追加し、データセットに任意の名称（今回は、Image_detection）指定します。

![025.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/d698b37b-4a18-3a1a-d821-d28f0d5a3b1a.jpeg)

![026.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/236edf2f-893a-ce9c-c693-7be7cb2accff.jpeg)


データ・フローに任意の名前（今回は、Image_detection_DF）を付けて、「データ・フローの実行」をクリックします。
![027.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/11f119ca-1372-44f4-04c7-1dccc1ecd887.jpeg)


データ・フローの実行が完了したら、生成されたデータセットを開きます。

生成されたデータセットを見つけるには、Oracle Analytics Cloudのホーム・ページから、「データ」、「データセット」の順に移動します。

![028.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/3fde0fef-5715-b5eb-d7a4-ad3207556aee.jpeg)


# ステップ3：データセットの分析

## 3.1 カスタム・ビジュアル・プラグインのダウンロードとセットアップ

下記URLから、カスタム・ビジュアル・プラグイン「AI Vision Series」をダウンロードします。この拡張機能を利用すると、OCI Visionのモデルの分析結果で検出されたオブジェクトに関するデータを対象となる画像ファイル上にプロットすることができます。



※ダウンロードには、アカウント登録（無料）が必要です。

https://www.oracle.com/jp/business-analytics/data-visualization/extensions/

![029.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/28e1f2dd-13ca-ac75-6f55-38f54dddd517.jpeg)



Oracle Analytics Cloudのホーム画面から、「コンソール」メニューの「拡張機能」をクリックします。

![030.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/0900ea40-0422-4306-786e-8f84e823ab77.jpeg)


ダウンロードしたZipファイルを「拡張機能のアップロード」にドラグすると、カスタム・ビジュアル・プラグイン（com-company-visionseries）が追加されます。

![031.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/2e0ee329-726b-5204-3f57-7f26c6005222.jpeg)


## 3.2 ブラウザのセキュリティ・ブロック設定の無効化

カスタム・ビジュアル・プラグインで画像ファイルがブロックされないようにするために、

Google Chromeを利用する場合、以下のURLを開き、「Block insecure Private network requests」の設定を無効化（Disabled）します。

[Google Chrome Block insecure privae network requests](chrome://flags/#block-insecure-private-network-requests)

![035.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/1c966824-9200-c218-7e17-ae103110d4e6.jpeg)


## 3.2 ワークブックの作成

データ・フローで生成されたデータセット（Image_detection）を使用して新規にワークブックを作成します。
 「File Location」列をキャンバスにドラッグ＆ドロップします。

![034.bmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/2d4c8f30-a893-a46d-4a09-d8f8cc9aa1e0.png)


自動的に「表」形式で結果が表示されますが、カスタム・プラグイン「Vision Plugin」に変更します。

![033.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/8ff29ed8-4272-3f91-d1e9-97dfef417697.jpeg)


「Vertices」に「Vertex 1」列と「Vertex 3」列をドラッグ＆ドロップします。

![040.bmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/29256c9a-dbb7-5f4d-93d0-5c97e6d7702b.png)


コントロールキーを押しながら`Object Name`、`Vertex1`、`Vertex2`、`Image Name`カラムを選択し、キャンバスに、ドラグします。

新しい「表」がキャンバスに追加されました。

![041.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/48aed82e-cd06-316b-f7d6-74be61ba9b58.png)



「表」の右クリックメニュから、「フィルタとして使用」を選択します。

![042.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/f852e79c-25b6-f5a4-7339-d55f15b5861f.jpeg)


「表」の`Image Name`列で、特定の行（i㎎0112.jpg）を選択すると、`Object Name`列には、”Cat”と表示されていますが、これは、OCI Visionがこの画像を分析して検出したオブジェクトを示しています。

また、画面右の画像ファイルが切り替わります。画像ファイルの中で、検出されたオブジェクトにオレンジ色の枠が付いています。

![043.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513882/c347d102-41e6-5860-f570-dec285354997.jpeg)


# まとめ

- Oracle Analytics Cloudでは、OCIが提供するAI画像認識サービス「OCI Vision」と連携することで、オブジェクト・ストレージに保存された画像ファイル上のオブジェクトを検出し、結果データをビジュアライズすることが可能です。
- OCI Visionの画像認識モデルを呼び出した、データ・フロー機能は、スケジュール実行することも出来るので、定期的にオブジェクト・ストレージのバケットに蓄積されたデータを分析、オブジェクト検出、ビジュアライズすることも出来そうです。
- 現時点では、事前定義済みのモデルを呼び出すことが可能なようですが、将来的にOCI Visionで作成したカスタム・モデルについても呼び出せるようになれば、画像認識データの利用の幅が広がると思いました。

# 参考情報

- [オブジェクト検出、イメージ分類およびテキスト検出分析の実行](https://docs.oracle.com/cloud/help/ja/analytics-cloud/ACUBI/GUID-9C6F4C43-3C7F-451C-A3B5-E8FFB7E05B6D.htm#GUID-9C6F4C43-3C7F-451C-A3B5-E8FFB7E05B6D)

- [OCI Vision概要](https://speakerdeck.com/oracle4engineer/vision-overview)