ビジョンとOracle Analytics Cloud (OAC)の統合

Vision SDKを使用してイメージ内のオブジェクトを検出し、その情報をデータ・ウェアハウスの表に投影するデータ統合フローを作成します。この出力データは、Oracle Analytics Cloudでビジュアライゼーションの作成やパターンの検索に使用されます。

これは、VisionとOAC間のシステムの高レベルのフローです。 データ統合へのCSVファイルとしての入力データ・アセットから始まる、VisionとOAC間のフロー。これは処理され、出力データとしてADWオブジェクト表に渡され、その後OACのソースとして使用されます。

開始前

このチュートリアルに従うには、VCNネットワーク、関数およびAPIゲートウェイを作成し、データ統合およびVisionを使用できる必要があります。

必要なポリシーについて管理者に相談してください。

必要なポリシーの設定

必要なポリシーを設定するには、次のステップに従います。

  1. コンソールのナビゲーション・メニューで、「アイデンティティとセキュリティ」を選択します。
  2. 「アイデンティティ」にある「ポリシー」を選択します。
  3. 「ポリシーの作成」を選択します。
  4. 「ポリシーの作成」パネルで、「名前」および「説明」を入力します。
    「名前」に、スペースを含まない名前を入力します。英数字、ハイフン、ピリオドおよびアンダースコアのみを使用できます。

    「説明」に、他のユーザーにこのポリシー・セットの目的がわかるように説明を入力します。

  5. ポリシー・ビルダーで、手動エディタを使用して次の文を追加します:
    allow group <group-name> to use cloud-shell in tenancy
    allow group <group-name> to inspect all-resources in tenancy
    allow group <group-name> to read instances in tenancy
    allow group <group-name> to read audit-events in tenancy
    allow group <group-name> to manage dis-workspaces in compartment <compartment-name>
    allow group <group-name> to manage dis-work-requests in compartment <compartment-name>
    allow group <group-name> to manage virtual-network-family in compartment <compartment-name>
    allow group <group-name> to manage tag-namespaces in compartment <compartment-name>
    allow service dataintegration to use virtual-network-family in compartment <compartment-name>
    allow group <group-name> to manage object-family in compartment <compartment-name>
    allow group <group-name> to manage functions-family in compartment <compartment-name>
    allow group <group-name> to manage api-gateway-family in compartment <compartment-name>
    allow group <group-name> to inspect instance-family in compartment <compartment-name>
    allow group <group-name> to manage autonomous-database-family in compartment <compartment-name>
    allow group <group-name> to use analytics-instances in compartment <compartment-name>
    allow group <group-name> to manage repos in tenancy
    allow group <group-name> to read objectstorage-namespaces in tenancy
    allow group <group-name> to manage logging-family in compartment <compartment-name>
    allow group <group-name> to read metrics in compartment <compartment-name>
    allow group <group-name> to use apm-domains in compartment <compartment-name>
    allow service faas to use apm-domains in compartment <compartment-name>
    allow group <group-name> to use ai-service-vision-family in compartment <compartment-name>
  6. 「作成」を選択します。

1.Virtual Cloudネットワークの作成

チュートリアルの後半で作成したサーバーレス・ファンクションおよびAPIゲートウェイのホームとして機能するVCNを作成します。

1.1 インターネット・アクセスを使用したVCNの作成

インターネット・アクセスを持つVCNを作成するには、次のステップに従います。

  1. ナビゲーション・メニューで、「ネットワーキング」を選択します。
  2. 「Virtual Cloud Networks」を選択します。
  3. VCNウィザードの起動をスリックします。
  4. 「インターネット接続性を持つVCNの作成」を選択します。
  5. 「VCNウィザードの起動」を選択します。
  6. VCNの名前を入力します。機密情報を入力しないでください。
  7. 「次」を選択します。
  8. 「作成」を選択します。

1.2 インターネットからのVCNへのアクセス

ポート43でトラフィックを許可するには、パブリック・リージョン・サブネットに対して新しいステートフル・イングレス・ルールを追加する必要があります。

このタスクを試行する前に、1.1インターネット・アクセスによるVCNの作成を完了してください。

APIゲートウェイは、デフォルトでオープンされていないポート443で通信します。

  1. ナビゲーション・メニューで、「ネットワーキング」を選択します。
  2. 「Virtual Cloud Networks」を選択します。
  3. 1.1インターネット・アクセスを使用したVCNの作成で作成したVCNを選択します。
  4. パブリック・リージョナル・サブネットの名前を選択します。
  5. 「セキュリティ・リスト」で、Default Security Listを選択します。
  6. 「イングレス・ルールの追加」を選択します。
  7. 次のフィールドをこれらの値で更新します。
    • ソース・タイプ: CIDR
    • ソースCIDR: 0.0.0.0/0
    • IPプロトコル: TCP
    • ソース・ポート範囲: All
    • 宛先ポート範囲: 443
  8. 新しいルールをデフォルトのセキュリティ・リストに追加するには、「イングレス・ルールの追加」を選択します。

2.APIゲートウェイの作成

APIゲートウェイを使用すると、作成したすべての関数を、ユーザーが使用できる単一のエンドポイントに集約できます。

1を完了します。このタスクを試行する前に、Virtual Cloud Networkを作成します

  1. コンソールのナビゲーション・メニューから、「開発者サービス」を選択します。
  2. 「ゲートウェイ」を選択します。
  3. 「ゲートウェイの作成」を選択します。
  4. ゲートウェイの「名前」を入力します。機密情報を入力しないでください。
  5. ゲートウェイの「タイプ」Publicに設定します。
  6. APIゲートウェイ・リソースの作成先のコンパートメントを選択します。
  7. APIゲートウェイで使用するVCNの名前を選択します。セクション1で作成したVCNの名前を使用します。Virtual Cloud Networkを作成します。
  8. VCNのリージョナル・サブネットの名前を選択します。変更したパブリック・サブネットに設定します。
  9. 「ゲートウェイの作成」を選択します。

    APIゲートウェイが作成されると、ゲートウェイ・ページのリストにActiveと表示されます。

3. エンリッチメント・ファンクションの作成

Oracle Cloud Infrastructure Data Integrationからコールできるエンリッチメント関数を作成するには、次のステップに従います。

オンデマンドでのみ実行されるサーバーレス関数を作成します。この関数は、データ統合で使用するために必要なスキーマに準拠しています。サーバーレス関数は、Python SDKを介してVisionのAPIを呼び出します。

3.1 アプリケーションの作成

関数を追加するには、まずアプリケーションを作成する必要があります。

2を完了します。このタスクを試行する前に、APIゲートウェイを作成しています

  1. コンソールのナビゲーション・メニューから、「開発者サービス」を選択します。
  2. 「アプリケーション」を選択します。
  3. 「アプリケーションの作成」を選択します。

    アプリケーションは、複数の関数が存在できる境界コンテキストと考えることができます。

  4. 「名前」を入力します機密情報を入力しないでください。
  5. セクション1で作成したVCNを選択します。Virtual Cloud Networkを作成します
  6. VCNのパブリック・サブネットを選択します
  7. 「作成」を選択します。
  8. アプリケーションが作成されたら、アプリケーションを開いて開始をクリックします。

    ファンクションを正しいコンパートメントおよびコンテナ・レジストリにデプロイできるように、CLIを設定します。

  9. 「Cloud Shell設定」を選択します。
  10. 「Cloud Shellの起動」を選択します。
    これにより、機能を設定するためのすべての構成を含むLinux仮想マシンが起動されます。
  11. クラウド・シェルでのfn CLIの設定のステップ1から7を実行するか、ビデオOracle Cloudでのサーバーレス・ファンクションの作成を参照してください。
    ノート

    ステップ4が明確でない場合は、ファンクション・ドキュメントのOracle Cloud Infrastructureに接続するためのFn ProjectのCLIコンテキストの作成を参照してください。OCIR-REPOには任意の用語を選択できます。これは、ファンクションをデプロイするためのコンテナ・レジストリの名前として使用される接頭辞です。

3.2 ファンクションの作成

次のステップに従って、アプリケーションにファンクションを作成します。

このタスクを試行する前に、3.1アプリケーションの作成を完了してください。

最速の方法は、システムでPythonテンプレートを生成することです。

  1. クラウド・シェルで次のコマンドを実行します。
    fn init --runtime python object-detection
    cd object-detection
    次の3つのファイルが生成されます。
    • func.yaml
    • requirements.txt
    • func.py
  2. 次の内容で3つのファイルをそれぞれ変更します。
Func.yaml

func.yamlの推奨コンテンツ。

schema_version: 20180708
name: object-detection
version: 0.0.1
runtime: python
build_image: fnproject/python:3.8-dev
run_image: fnproject/python:3.8
entrypoint: /python/bin/fdk /function/func.py handler
memory: 256
timeout: 300
Requirements.txt

requirements.txtの推奨コンテンツ。

fdk>=0.1.40
oci
https://objectstorage.us-ashburn-1.oraclecloud.com/n/axhheqi2ofpb/b/vision-oac/o/vision_service_python_client-0.3.9-py2.py3-none-any.whl
pandas
requests
Func.py

func.pyの推奨コンテンツ。

import io
import json
import logging
import pandas
import requests
import base64
from io import StringIO
from fdk import response
 
import oci
from vision_service_python_client.ai_service_vision_client import AIServiceVisionClient
from vision_service_python_client.models.analyze_image_details import AnalyzeImageDetails
from vision_service_python_client.models.image_object_detection_feature import ImageObjectDetectionFeature
from vision_service_python_client.models.inline_image_details import InlineImageDetails
 
def handler(ctx, data: io.BytesIO=None):
    signer = oci.auth.signers.get_resource_principals_signer()
    resp = do(signer,data)
    return response.Response(
        ctx, response_data=resp,
        headers={"Content-Type": "application/json"}
    )
 
def vision(dip, txt):
    encoded_string = base64.b64encode(requests.get(txt).content)
 
    image_object_detection_feature = ImageObjectDetectionFeature()
    image_object_detection_feature.max_results = 5
    features = [image_object_detection_feature]
    analyze_image_details = AnalyzeImageDetails()
    inline_image_details = InlineImageDetails()
    inline_image_details.data = encoded_string.decode('utf-8')
    analyze_image_details.image = inline_image_details
    analyze_image_details.features = features
    try:
        le = dip.analyze_image(analyze_image_details=analyze_image_details)
    except Exception as e:
        print(e)
        return ""
    if le.data.image_objects is not None:
      return json.loads(le.data.image_objects.__repr__())
    return ""
 
 
def do(signer, data):
    dip = AIServiceVisionClient(config={}, signer=signer)
 
    body = json.loads(data.getvalue())
    input_parameters = body.get("parameters")
    col = input_parameters.get("column")
    input_data = base64.b64decode(body.get("data")).decode()
    df = pandas.read_json(StringIO(input_data), lines=True)
    df['enr'] = df.apply(lambda row : vision(dip,row[col]), axis = 1)
    #Explode the array of aspects into row per entity
    dfe = df.explode('enr',True)
    #Add a column for each property we want to return from imageObjects struct
    ret=pandas.concat([dfe,pandas.DataFrame((d for idx, d in dfe['enr'].iteritems()))], axis=1)
 
 
    #Drop array of aspects column
    ret = ret.drop(['enr'],axis=1)
    #Drop the input text column we don't need to return that (there may be other columns there)
    ret = ret.drop([col],axis=1)
    if 'name' not in ret.columns:
        return pandas.DataFrame(columns=['id','name','confidence','x0','y0','x1','y1','x2','y2','x3','y3']).to_json(orient='records')
    for i in range(4):
        ret['x' + str(i)] = ret.apply(lambda row: row['bounding_polygon']['normalized_vertices'][i]['x'], axis=1)
        ret['y' + str(i)] = ret.apply(lambda row: row['bounding_polygon']['normalized_vertices'][i]['y'], axis=1)
    ret = ret.drop(['bounding_polygon'],axis=1)
 
    rstr=ret.to_json(orient='records')
    return rstr

3.3 ファンクションのデプロイ

ファンクションをアプリケーションにデプロイします

このタスクを試行する前に、3.2関数の作成を完了してください。

  1. 次のクラウド・シェル・コマンドを実行します。
    fn -v deploy app <app_name>
  2. ファンクションがコンテナ・レジストリに登録されていることを確認します。
    1. コンソールのナビゲーション・メニューから、「開発者サービス」を選択します。
    2. 「コンテナ・レジストリ」を選択します。この関数はコンテナ・レジストリに表示されます。

3.4 ファンクションの起動

関数をコールしてテストします。

このタスクを試行する前に、3.3ファンクションのデプロイを完了してください。

Oracle Cloud Infrastructure Data Integrationでは、コール関数がサポートされています。この場合、データ・ペイロードは、処理するレコードとパラメータのセットを含む単一の基本64エンコード文字列です。たとえば:
{"data":"eyJpZCI6MSwiaW5wdXRUZXh0IjoiaHR0cHM6Ly9pbWFnZS5jbmJjZm0uY29tL2FwaS92MS9pbWFnZS8xMDYxOTYxNzktMTU3MTc2MjczNzc5MnJ0czJycmRlLmpwZyJ9", "parameters":{"column":"inputText"}}
エンコードされたデータは、JSON行フォーマットの基本64エンコード・バージョンです(各行はレコードごとにJSONです)。各レコードには、出力の関連付けに使用されるIDがあります。文字列の例をデコードすると、次のようになります。
{"id":1,"inputText":"https://<server-name>/api/v1/image/106196179-1571762737792rts2rrde.jpg"}
次のコマンドを使用して、関数をテストします。
echo '{"data":"<data-payload>", "parameters":{"column":"inputText"}}' | fn invoke <application-name> object-detection
出力表示は次のようになります。
[{"id":1,"confidence":0.98330873,"name":"Traffic Light","x0":0.0115499255,"y0":0.4916201117,"x1":0.1609538003,"y1":0.4916201117,"x2":0.1609538003,"y2":0.9927374302,"x3":0.0115499255,"y3":0.9927374302},{"id":1,"confidence":0.96953976,"name":"Traffic Light","x0":0.8684798808,"y0":0.1452513966,"x1":1.0,"y1":0.1452513966,"x2":1.0,"y2":0.694972067,"x3":0.8684798808,"y3":0.694972067},{"id":1,"confidence":0.90388376,"name":"Traffic sign","x0":0.4862146051,"y0":0.4122905028,"x1":0.8815201192,"y1":0.4122905028,"x2":0.8815201192,"y2":0.7731843575,"x3":0.4862146051,"y3":0.7731843575},{"id":1,"confidence":0.8278353,"name":"Traffic sign","x0":0.2436661699,"y0":0.5206703911,"x1":0.4225037258,"y1":0.5206703911,"x2":0.4225037258,"y2":0.9184357542,"x3":0.2436661699,"y3":0.9184357542},{"id":1,"confidence":0.73488903,"name":"Window","x0":0.8431445604,"y0":0.730726257,"x1":0.9992548435,"y1":0.730726257,"x2":0.9992548435,"y2":0.9893854749,"x3":0.8431445604,"y3":0.9893854749}]

4. ファンクション・ポリシーの追加

ファンクションをVisionで使用できるようにポリシーを作成します。

3を完了します。このタスクを試行する前に、エンリッチメント関数を作成します

  1. コンソールのナビゲーション・メニューから、「アイデンティティとセキュリティ」を選択します。
  2. 「動的グループ」を選択します。
  3. 次のルールを使用して動的グループを作成します:
    ALL {resource.type = 'fnfunc', resource.compartment.id = '<compartment-id>'}
  4. 次のステートメントをポリシーに追加します。
    allow any-user to use functions-family in compartment <compartment-name> where ALL {request.principal.type= 'ApiGateway', request.resource.compartment.id = '<compartment-id>'}
    allow dynamic-group <dynamic-group-name> to use ai-service-vision-family in tenancy

5. Oracle Cloud Infrastructureデータ統合ワークスペースの作成

データ統合を使用する前に、その機能を使用する権限があることを確認してください。

4を完了します。このタスクを試行する前に、関数ポリシーを追加する

データ統合を使用できるようにするポリシーを作成します。

  1. コンソールのナビゲーション・メニューから、「分析とAI」を選択します。
  2. 「データ統合」を選択します。
  3. ワークスペースのコンパートメントを選択します。
  4. 「ワークスペースの作成」を選択します。
  5. ワークスペースに名前を指定します。機密情報を入力しないでください。
  6. 「プライベート・ネットワークの有効化」が選択されていることを確認します。
  7. コンパートメント内のVCNを選択します。
  8. 選択したサブネットがプライベート・サブネットであることを確認します。
  9. 「作成」を選択します。
    ワークスペースの作成には数分かかります。
  10. ワークスペースが作成されたら、Active状態であることを確認します。

6. データ統合ポリシーの追加

データ統合を使用できるようにポリシーを更新します。

5を完了します。このタスクを試行する前に、Oracle Cloud Infrastructure Data Integration Workspaceを作成します

  1. 「必要なポリシーの設定」のステップに従って、ポリシー・ビルダーを開きます。
  2. 次のステートメントをポリシーに追加します。
    allow any-user to read buckets in compartment <compartment-name> where ALL {request.principal.type = 'disworkspace', request.principal.id = '<data-integration-workspace-ocid>', request.operation = 'GetBucket'}
    allow any-user to manage objects in compartment <compartment-name> where ALL {request.principal.type = 'disworkspace', request.principal.id = '<data-integration-workspace-ocid>'}
    allow any-user to manage buckets in compartment <compartment-name> where ALL {request.principal.type = 'disworkspace', request.principal.id = '<data-integration-workspace-ocid>', request.permission = 'PAR_MANAGE'}
    allow any-user {PAR_MANAGE} in compartment <compartment-name> where ALL {request.principal.type='disworkspace', request.principal.id='<data-integration-workspace-ocid>'}
    allow any-user to use functions-family in compartment <compartment-name> where ALL {request.principal.type = 'disworkspace', request.principal.id='<data-integration-workspace-ocid>'}

7. データ・ソースおよびシンクの準備

駐車場イメージと、イメージがサンプル・データとして取得された日付を使用しています。

データ統合およびVisionを使用してオブジェクト検出分析を実行するデータ・ソースとして、パーク状態の自動車のイメージ(またはそれ以上)を10個収集します。

7.1 サンプル・データのロード

駐車した車のイメージのサンプル・データをバケットにロードします。

6を完了します。このタスクを試行する前に、データ統合ポリシーを追加してください。

  1. 駐車した車の10の写真をローカルまたはオンラインで見つけます。
  2. コンソールのナビゲーション・メニューで、「ストレージ」を選択します。
  3. 「バケット」を選択します。
  4. 既存のバケットを選択するか、新しいバケットを作成します。
  5. 「バケットの詳細」ページの「オブジェクト」で、「アップロード」を選択します。
  6. ステップ1で収集した10個のイメージ・ファイルをドロップ・ゾーンにドラッグします。
  7. 「アップロード」を選択します。
  8. 4つの列と10行の表を含むCSVファイルを作成します。列名は、「レコードID」、「イメージ名」、「取得日」および「イメージの場所」です。[レコードID]カラムに1から10を入力します。
    サンプル・データ・ファイル 4つの列と10行の表。列名は、「レコードID」、「イメージ名」、「取得日」および「イメージの場所」です。
  9. ファイルにcars.csvという名前を付けます。
  10. イメージ名、取得日およびイメージの場所を指定して、表に入力します。
    イメージの場所を確認するには、バケットを表示するときにコンソールでイメージの「アクション」メニュー(アクション・メニュー)を選択します。「ビュー・オブジェクトの詳細」を選択し、URLパスをcars.csvにコピーします。
  11. cars.csvをバケットにアップロードします。
  12. 「閉じる」を選択します。

7.2 ステージング・バケットの作成

データ統合では、データをデータ・ウェアハウスに公開する前に、中間ファイルをダンプするステージングの場所が必要です。

このタスクを実行する前に、7.1サンプル・データのロードを完了します。

  1. コンソールのナビゲーション・メニューで、「ストレージ」を選択します。
  2. 「バケット」を選択します。
  3. 「Create Bucket」を選択します。
  4. 適切な名前(data-stagingなど)を指定します。機密情報を入力しないでください。
  5. 「作成」を選択します。
  6. すべてのデフォルト値を受け入れます。

7.3 ターゲット・データベースの準備

ターゲットAutonomous Data Warehouseデータベースを構成して、スキーマおよび表を追加します。

このタスクを試行する前に、7.2ステージング・バケットの作成を完了してください。

  1. コンソールのナビゲーション・メニューで、「Oracle Database」を選択します。
  2. Autonomous Data Warehouseを選択します。
  3. コンパートメントを選択します。
  4. 「Autonomous Databaseの作成」を選択します。
  5. 「表示名」を入力します。機密情報を入力しないでください。
  6. データベース名を入力します。機密情報を入力しないでください。
  7. 「ワークロード・タイプ」Data warehouseに設定します。
  8. データベースの管理者のユーザー名とパスワードを作成します。
  9. 「アクセス・タイプ」Secure access from anywhereに設定します。
  10. 「認証」mTLSに設定します。
  11. 「ライセンス・タイプ」BYOLに設定します。
  12. 「Autonomous Databaseの作成」を選択します。
  13. データベースがプロビジョニングされたら、「データベース詳細」ページで「データベース・アクション」を選択します。
  14. ステップ8で指定した資格証明でログインします。
  15. 開発を選択します。
  16. 「SQL」を選択します。
  17. 次のSQLを実行して、Contributorユーザーを作成します。
    CREATE USER USER1 IDENTIFIED BY "<enter user1 password here>";
    GRANT DWROLE TO USER1;
    ALTER USER USER1 QUOTA 200M ON DATA;

    Autonomous Databasesには、DWROLEという事前定義済データベース・ロールが用意されています。リアルタイム分析を実行するための共通権限をデータベース開発者またはデータ・サイエンティストに提供します。使用要件によっては、他のユーザーに権限を付与する必要がある場合もあります。

7.4 分析データを投影する表の作成

検出されたオブジェクトに関する情報を格納する表を作成します。

このタスクを試行する前に、7.3ターゲット・データベースの準備を完了します。

  1. 「データベース・アクション」ダッシュボードに移動します(まだ表示されていない場合)。
  2. 次のスクリプトを実行します。
    CREATE TABLE USER1.OBJECTS
       ("RECORD_ID" INT,
        "IMAGE_NAME" VARCHAR2(200 BYTE),
        "DATE_TAKEN" DATE,
        "IMAGE_LOCATION" VARCHAR2(2000 BYTE),
        "OBJECT_NAME" VARCHAR2(200 BYTE),
        "OBJECT_CONFIDENCE" DECIMAL(8,7),
        "VERTEX_X1" FLOAT,
        "VERTEX_Y1" FLOAT,
        "VERTEX_X2" FLOAT,
        "VERTEX_Y2" FLOAT,
        "VERTEX_X3" FLOAT,
        "VERTEX_Y3" FLOAT,
        "VERTEX_X4" FLOAT,
        "VERTEX_Y4" FLOAT
    ) SEGMENT CREATION IMMEDIATE
      PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
     NOCOMPRESS LOGGING
      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
      TABLESPACE "VISION"

8. データ統合でのデータ・フローの使用

データ統合でデータ・フローを作成するために必要なコンポーネントを作成します。

データ・フローは次のとおりです。 フローはcars.csvファイルから始まり、式およびオブジェクト検出機能が動作し、出力がターゲット・オブジェクト・ストレージに送信されます。

基礎となるすべてのストレージリソースは、前の章で作成しました。データ統合では、データ・フローの各要素のデータ・アセットを作成します。

8.1 ソースおよびステージングのデータ・アセットの作成

ソースおよびステージング・データのデータ・アセットを作成します。

7を完了します。このタスクを実行する前に、データ・ソースおよびシンクを準備します。

  1. コンソールのナビゲーション・メニューから、「分析とAI」を選択します。
  2. 「データ統合」を選択します。
  3. On the home page of the workspace you created in 5. Creating an Oracle Cloud Infrastructure Data Integration Workspace, select Create Data Asset on the Quick Actions tile.
  4. 「データ・アセットの作成」ページで、次のフィールドに入力します:
    1. 「名前」に、cars-data-sourceを入力します。
    2. 「説明」に、自分または他のユーザーがデータ・アセットを検索するのに役立つテキストを入力します。
    3. 「タイプ」として「Oracle Object Storage」を選択します。
    4. テナントOCIDを入力します。テナンシ情報を検索する必要がある場合は、コンソールの「プロファイル」アイコンを選択した場合に使用できます。
    5. 「OCIリージョン」を指定します。
  5. 「接続テスト」を選択します。
  6. 「作成」を選択します。
  7. (オプション)ステージング・バケットの場所が異なる場合は、ステップ3から6を繰り返してステージング用のデータ・アセットを作成します。
    ノート

    ステージング場所の名前は大文字にする必要があります。

8.2 ターゲットのデータ・アセットの作成

ターゲット・データ・ウェアハウスのデータ・アセットを作成します。

このタスクを試行する前に、8.1ソースおよびステージングのデータ・アセットの作成を完了してください。

  1. コンソールのナビゲーション・メニューから、「分析とAI」を選択します。
  2. 「データ統合」を選択します。
  3. On the home page of the workspace you created in 5. Creating an Oracle Cloud Infrastructure Data Integration Workspace, select Create Data Asset on the Quick Actions tile.
  4. 「データ・アセットの作成」ページで、次のフィールドに入力します:
    1. 「名前」に、data-warehouseと入力します。
    2. 「識別子」「名前」から自動生成されますが、値を変更できます。
    3. 「説明」に、自分または他のユーザーがデータ・アセットを検索するのに役立つテキストを入力します。
    4. 「タイプ」として「Oracle Autonomous Data Warehouse」を選択します。
    5. 「データベースの選択」を選択します。
    6. テナントOCIDを入力します。テナンシ情報を検索する必要がある場合は、コンソールの「プロファイル」アイコンを選択した場合に使用できます。
    7. 「コンパートメント」を選択します。
    8. 7.3ターゲット・データベースの準備で作成したADWを選択します。
    9. 「TNSレベル」を指定します。適切な値に設定します。
    10. ADWに接続する「サービス名」を選択します。
  5. 「接続」セクションに、次の情報を追加します。
    1. 「名前」で、デフォルト値を選択しますが、名前を変更できます。
    2. 「説明」に、自分または他のユーザーがデータ・アセットを検索するのに役立つテキストを入力します。
    3. 「ユーザー名」USER1に設定します。
    4. ユーザーの「パスワード」を入力します。
  6. 「接続のテスト」を選択して、入力した資格証明を確認します。
  7. ステップ6が成功した場合は、「作成」を選択します。

8.3 データ・フローの作成

データ統合でデータ・フローを作成して、ファイルからデータを収集します。

このタスクを試行する前に、8.2ターゲットのデータ・アセットの作成を完了してください。

  1. Vision-labプロジェクトの詳細ページで、「データ・フロー」を選択します。
  2. 「データ・フローの作成」を選択します。
  3. データ・フロー・デザイナで、「プロパティ」パネルを選択します。
  4. 「名前」に、lab-data-flowと入力します。
  5. 「作成」を選択します。

8.4 データ・ソースの追加

次に、データ・ソースをデータ・フローに追加します。

このタスクを試行する前に、8.3データ・フローの作成を完了してください。

8.3データ・フローの作成でデータ・フローを作成した後も、デザイナが開いたままになり、次のステップを使用してデータ・ソースを追加できます。

  1. ソース・アイコンをデータ・フロー・ワークスペース領域にドラッグします。
  2. ソースを選択します。
  3. 「プロパティ」「詳細」タブを選択します。
  4. プロパティーを次のように更新します。
    1. 「識別子」に、CARS_CSVと入力します。
    2. 「詳細」で、8.1ソースおよびステージングのデータ・アセットの作成で作成したソース・データ・アセットを選択します。
    3. 「接続」をデフォルトに設定します。
    4. 「スキーマ」で、cars.csvデータファイルを含むバケットを選択します。
    5. 「データ・エンティティ」で、cars.csvデータ・ファイルを選択します。
    6. 「ファイル・タイプ」CSVに設定します。
  5. 「データ」にナビゲートします。1分または2分後にデータが表示されます。

8.5 式の追加

式を追加して、IDの形式を整数に、date_takenフィールドの形式を日付に変更します。

このタスクを試行する前に、8.4データ・ソースの追加を完了してください。

  1. <data source name>.idフィールドのアクション・メニュー・アイコンを右クリックします。
  2. 「データ型の変更」を選択します。
  3. IDと入力します。
  4. 「データ型」で、integerを選択します。
  5. 「適用」を選択します。
    新しい式ステップがYUTデータ・フローに作成されます。
  6. <data source name>.date_takenフィールドのアクション・メニュー・アイコンを右クリックします。
  7. 「データ型の変更」を選択します。
  8. 「データ型」で、Dateを選択します。
  9. 日付書式がCSVファイル(yyyy-MM-dd)にあるものと一致していることを確認します。
  10. 「名前」DATE_TAKENに設定します。
  11. 新しいフィールドを表示するには、式の「データ」タブを選択します。
    データ・フィールド 移入されたセルを含む式の4つのデータ・フィールド。

8.6 関数の追加

データ・フローにファンクションを追加して、入力イメージからオブジェクトを抽出します。

このタスクを試行する前に、8.5式の追加を完了してください。

  1. 演算子ツールバーから、「ファンクション(fn)」演算子をキャンバスにドラッグします。
  2. 関数の入力として式の出力を接続します。
  3. ファンクションを選択します
  4. 「プロパティ」ペインで、「詳細」にナビゲートします。
  5. 識別子をOBJECT_DETECTIONに変更します。
  6. 関数を選択するには、「選択」を選択します。
  7. 3.1アプリケーションの作成で作成したアプリケーションを選択します。
  8. オブジェクト検出関数を選択します。
  9. OK」を選択して変更を確認します。
  10. プロパティを追加または編集します。「プロパティの追加」を選択して、プロパティを追加します。次の値を使用します。
    機能属性
    名前 タイプ データ型 Length スケール
    data 入力属性 VARCHAR 2000
    機能構成 VARCHAR data
    BATCH_SIZE 機能構成 NUMERIC/VARCHAR (デフォルト) 1
    名前 出力属性 VARCHAR 200
    自信 出力属性 DECIMAL 8 7
    x0 出力属性 FLOAT 64
    y0 出力属性 FLOAT 64
    x1 出力属性 FLOAT 64
    y1 出力属性 FLOAT 64
    x2 出力属性 FLOAT 64
    y2 出力属性 FLOAT 64
    x3 出力属性 FLOAT 64
    y3 出力属性 FLOAT 64

8.7 データ・ウェアハウス表への出力のマッピング

センチメント分析の出力をデータ・ウェアハウス表にマップします。

このタスクを試行する前に、8.6ファンクションの追加を完了してください。

  1. 「マップ」タブにナビゲートします。
  2. ソース属性表のimage_locationdataフィールド関数の入力にドラッグします。
  3. 演算子のツールバーから、「ターゲット」演算子をキャンバスにドラッグします。
  4. オブジェクト検出関数の出力をターゲット演算子の入力に接続します。
  5. ターゲットの詳細プロパティ・タブで、次のフィールドを指定された値に設定します。
    識別子
    TARGET_OBJECT_DETECTION
    統合戦略
    挿入
    データ・アセット
    8.2ターゲットのデータ・アセットの作成で作成したデータ・ウェアハウス・アセットを選択します。
    接続
    デフォルト接続
    スキーマ
    USER1
    データ・エンティティ
    オブジェクト
    ステージングの場所
    データ・フローの実行時に中間ファイルを作成できるオブジェクト・ストレージの場所を指定します。
    データ・アセット
    車データソース
    接続
    デフォルト接続
    In Schema
    data-stagingオブジェクト・ストレージの場所を選択します
  6. ファンクションの出力をターゲット・データベース表の正しいフィールドにマップします。次の表のマッピングを使用します。
    関数出力マップ
    名前 マッピング
    RECORD_ID RECORD_ID
    IMAGE_NAME Image_Name
    DATE_TAKEN DATE_TAKEN
    IMAGE_LOCATION Image_Location
    OBJECT_NAME 名前
    OBJECT_CONFIDENCE 自信
    頂点 X1 x0
    頂点 Y1 y0
    頂点 X2 x1
    頂点 Y2 y1
    頂点 X3 x2
    頂点 Y3 y2
    頂点 X4 x3
    頂点 Y4 y3
    マッピングは次のようになります。

    マッピング1から4 アプリケーションに表示される最初の4つのマッピング

    5から8へのマッピング アプリケーションに表示される2番目の4つのマッピング

    9から12へのマッピング アプリケーションに表示される3番目の4つのマッピング

    マッピング13および14 アプリケーションに表示される最後の2つのマッピング

8.8 データ・フローの実行

データ・フローを実行してターゲット・データベースに移入します。

このタスクを実行する前に、8.7データ・ウェアハウス表への出力のマッピングを完了します。

  1. ワークスペースの「クイック・アクション」メニュー(アクション・メニュー)で、「統合タスクの作成」を選択します。

    作成プロセスの一環として、8.3データ・フローの作成で作成したプロジェクトおよびデータ・フローを選択します。

  2. ワークスペースで、「アプリケーション」を選択します。
  3. 「アプリケーションの作成」を選択します。
  4. 「名前」を入力します
  5. 「作成」を選択します。
  6. ワークスペースで、「プロジェクト」を選択します。
  7. 8.3データ・フローの作成で作成したプロジェクトを選択します。
  8. 「詳細」メニューで、「タスク」を選択します。
  9. ステップ1で作成したタスクに対して、アクション・アイコン・メニューから「実行」を選択します。
  10. 「アプリケーションに公開」を選択します。
  11. ステップ3で作成したアプリケーションを選択します。
  12. アプリケーションで、統合タスクを選択します。
  13. アクション・アイコン・メニューから「実行」を選択します。
    「実行」ページから実行の進行状況を追跡できます。エラーが発生した場合は、ログを確認してその理由を理解してください。
  14. 実行が正常に終了したら、データベース内で表が正しく移入されているかどうかを確認します。次のSQLを実行します。
    SELECT * FROM USER1.OBJECTS;

9. Analytics Cloudのデータの視覚化

Analytics Cloudを使用して作成したデータを表示します。

Analytics Cloudにアクセスし、Analytics Cloudインスタンスを作成する必要があります。

9.1 Analytics Cloudインスタンスの作成

Analytics Cloudインスタンスを作成するには、次のステップに従います。

Complete 8. Use a Data Flow in Data Integration before trying this task.

  1. コンソールのナビゲーション・メニューから、「分析とAI」を選択します。
  2. 「Analytics Cloud」を選択します。
  3. 「コンパートメント」を選択します。
  4. インスタンスの作成を選択します。
  5. 「名前」を入力します機密情報を入力しない
  6. 2 OCPUsを選択します。他の構成パラメータはデフォルト値として保持されます。
  7. 「作成」を選択します。

9.2 データ・ウェアハウスへの接続の作成

Analytics Cloudインスタンスからデータ・ウェアハウスへの接続を設定するには、次のステップに従います。

このタスクを試行する前に、9.1 Analytics Cloudインスタンスの作成を完了してください。

  1. 詳細ページで、「分析ホーム・ページ」をクリックします。Analytics Cloudインスタンスにサインインします。
  2. 「データセットの作成」を選択します。
  3. 「接続の作成」を選択します。
  4. Oracle Autonomous Data Warehouseを選択します。
  5. 7.3ターゲット・データベースの準備で作成したターゲット・データベースのログイン資格証明を入力します。
    ウォレットの取得方法が思い出せない場合は、Walletのダウンロード方法を参照してください。

9.3 データセットの作成

データセットを作成するには、次のステップに従います。

このタスクを試行する前に、9.2データ・ウェアハウスへの接続の作成を完了してください。

  1. 「データ」を選択します
  2. 「作成」を選択します。
  3. 「新規データセットの作成」を選択します。
  4. データ・ウェアハウスを選択します。
  5. USER1データベースから、OBJECTS表をキャンバスにドラッグします。
  6. データセットを保存します。

9.4 ビジュアライゼーションの作成

Analytics Cloudにデータを表示するには、次のステップに従います。

このタスクを試行する前に、9.3データセットの作成を完了してください。

  1. 「作成」を選択します。
  2. 「ワークブック」を選択します。
  3. 9.3データセットの作成で作成したデータセットを選択します。
  4. 「ワークブックに追加」を選択します。
  5. 「Visualizations」タブをクリックします。
  6. 棒のビジュアライゼーションをキャンバスにドラッグします。
  7. データに移動します。
  8. 「計算」表を右クリックします。
  9. 「計算の追加...」を選択します。
  10. 「名前」COUNT OF OBJECTSに設定します。
  11. 「関数」COUNT(OBJECT_NAME)と入力します。
  12. COUNT OF SENTIMENTをビジュアライゼーションの値(Y軸)にドラッグします。
  13. ビジュアライゼーションの「カテゴリ」(X軸)で「OBJECTS」→「DATE_TAKEN」を選択します。
  14. DATE_TAKENを選択します。
  15. 「by...Dayの表示」を選択します。
  16. 「色」で、OBJECT_NAMEを選択します。
    次のようなグラフが表示されます。 各日に検出された車輪の数を示す棒グラフ。