Vision mit Oracle Analytics Cloud (OAC) integrieren
Erstellen Sie einen Datenintegrationsfluss, der mit dem Vision SDK Objekte in Images erkennt und diese Informationen in einer Tabelle in einem Data Warehouse projiziert. Diese Ausgabedaten werden dann von Oracle Analytics Cloud verwendet, um Visualisierungen zu erstellen und Muster zu finden.
Dies ist der allgemeine Ablauf des Systems zwischen Vision und OAC:
Bevor Sie beginnen
Um dieses Tutorial zu befolgen, müssen Sie in der Lage sein, VCN-Netzwerke, -Funktionen und API-Gateways zu erstellen und Data Integration and Vision zu verwenden.
Sprechen Sie mit Ihrem Administrator über die erforderlichen Richtlinien.
Erforderliche Policys einrichten
Führen Sie die folgenden Schritte aus, um die erforderlichen Policys einzurichten.
1. Virtuelles Cloud-Netzwerk erstellen
Erstellen Sie ein VCN, das als Home für die serverlose Funktion und das später im Tutorial erstellte API-Gateway dient.
1.1 VCN mit Internetzugriff erstellen
Führen Sie diese Schritte aus, um ein VCN mit Internetzugriff zu erstellen.
- Wählen Sie im Navigationsmenü Networking aus.
- Wählen Sie Virtuelle Cloud-Netzwerke aus.
- Klicken Sie auf VCN-Assistenten starten.
- Wählen Sie VCN mit Internetverbindung erstellen aus.
- Wählen Sie VCN-Assistenten starten aus.
- Geben Sie einen Namen für das VCN ein. Geben Sie dabei keine vertraulichen Informationen ein.
- Wählen Sie Weiter aus.
- Klicken Sie auf Erstellen.
1.2 Über das Internet auf Ihr VCN zugreifen
Sie müssen eine neue zustandslose Ingress-Regel für das öffentliche regionale Subnetz hinzufügen, um Traffic auf Port 443 zu ermöglichen.
Führen Sie 1.1 VCN mit Internetzugriff erstellen aus, bevor Sie diese Aufgabe ausführen.
Das API Gateway kommuniziert auf Port 443, der standardmäßig nicht geöffnet ist.
2. API-Gateway erstellen
Mit einem API-Gateway können Sie alle von Ihnen erstellten Funktionen zu einem einzigen Endpunkt aggregieren, der von Ihren Benutzern genutzt werden kann.
Füllen Sie 1 aus. Erstellen Sie ein virtuelles Cloud-Netzwerk, bevor Sie diese Aufgabe ausführen.
3. Anreicherungsfunktion erstellen
Führen Sie diese Schritte aus, um eine Anreicherungsfunktion zu erstellen, die nicht über Oracle Cloud Infrastructure Data Integration aufgerufen werden kann.
Erstellen Sie eine serverlose Funktion, die nur auf Anforderung ausgeführt wird. Die Funktion entspricht dem Schema, das für die Nutzung durch Data Integration erforderlich ist. Die serverlose Funktion ruft die API von Vision über das Python-SDK auf.
3.1 Anwendung erstellen
Um eine Funktion hinzuzufügen, müssen Sie zunächst eine Anwendung erstellen.
Füllen Sie 2 aus. API Gateway erstellen, bevor Sie diese Aufgabe ausführen.
3.2 Funktion erstellen
So erstellen Sie eine Funktion in Ihrer Anwendung:
Schließen Sie 3.1 Anwendung erstellen ab, bevor Sie diese Aufgabe ausführen.
Der schnellste Weg ist, dass das System eine Python-Vorlage generiert.
Empfohlener Inhalt für 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
Empfohlener Inhalt für 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
Empfohlener Inhalt für 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 Funktion bereitstellen
Funktion für die Anwendung bereitstellen
Schließen Sie 3.2 Funktion erstellen ab, bevor Sie diese Aufgabe ausführen.
3.4 Aufrufen der Funktion
Testen Sie die Funktion, indem Sie sie aufrufen.
Schließen Sie 3.3 Funktion bereitstellen ab, bevor Sie diese Aufgabe ausführen.
{"data":"eyJpZCI6MSwiaW5wdXRUZXh0IjoiaHR0cHM6Ly9pbWFnZS5jbmJjZm0uY29tL2FwaS92MS9pbWFnZS8xMDYxOTYxNzktMTU3MTc2MjczNzc5MnJ0czJycmRlLmpwZyJ9", "parameters":{"column":"inputText"}}
Die codierten Daten sind die Basis-64-codierte Version eines JSON-Linienformats (jede Zeile ist eine JSON für jeden Datensatz). Jeder Record verfügt über eine Kennung, mit der die Ausgabe verknüpft wird. Die Decodierung der Beispielzeichenfolge ergibt:{"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. Funktions-Policy hinzufügen
Erstellen Sie eine Policy, damit die Funktion mit Vision verwendet werden kann.
Füllen Sie 3 aus. Erstellen Sie eine Anreicherungsfunktion, bevor Sie diese Aufgabe ausführen.
5. Oracle Cloud Infrastructure Data Integration-Workspace erstellen
Bevor Sie Data Integration verwenden können, stellen Sie sicher, dass Sie über die Rechte zur Verwendung dieser Funktion verfügen.
Füllen Sie 4 aus. Fügen Sie eine Functions-Policy hinzu, bevor Sie diese Aufgabe ausführen.
Erstellen Sie die Policys, mit denen Sie Data Integration verwenden können.
6. Data Integration-Policys hinzufügen
Aktualisieren Sie Ihre Policy, damit Sie Data Integration verwenden können.
Füllen Sie 5 aus. Erstellen Sie einen Oracle Cloud Infrastructure Data Integration-Workspace, bevor Sie diese Aufgabe ausführen.
7. Datenquellen und Sinks vorbereiten
Sie verwenden Parkplatzbilder zusammen mit dem Datum, an dem die Bilder als Beispieldaten aufgenommen wurden.
Erfassen Sie 10 Bilder (oder mehr) von geparkten Autos als Datenquelle, auf der Sie eine Objekterkennungsanalyse mit Data Integration und Vision durchführen.
7.1 Laden von Beispieldaten
Laden Sie die Beispieldaten der geparkten Fahrzeugbilder in Ihren Bucket.
Füllen Sie 6 aus. Data Integration-Policys hinzufügen, bevor Sie diese Aufgabe ausführen.
7.2 Staging-Buckets erstellen
Data Integration benötigt eine Staging Area, in der Zwischendateien ausgegeben werden, bevor Daten in einem Data Warehouse veröffentlicht werden.
Führen Sie 7.1 Laden von Beispieldaten aus, bevor Sie diese Aufgabe ausführen.
- Wählen Sie im Navigationsmenü der Konsole die Option Speicher aus.
- Wählen Sie Buckets aus.
- Wählen Sie Bucket erstellen aus.
-
Geben Sie ihm einen geeigneten Namen, z.B.
data-staging
. Geben Sie dabei keine vertraulichen Informationen ein. - Klicken Sie auf Erstellen.
- Übernehmen Sie alle Standardwerte.
7.3 Zieldatenbank vorbereiten
Konfigurieren Sie die Autonomous Data Warehouse-Zieldatenbank, um ein Schema und eine Tabelle hinzuzufügen.
Schließen Sie 7.2 Staging Bucket erstellen ab, bevor Sie diese Aufgabe ausführen.
7.4 Erstellen einer Tabelle zur Projektierung der analysierten Daten
Erstellen Sie eine Tabelle, in der alle Informationen zu den erkannten Objekten gespeichert werden.
Führen Sie 7.3 Zieldatenbank vorbereiten aus, bevor Sie diese Aufgabe ausführen.
8. Datenfluss in Data Integration verwenden
Erstellen Sie die Komponenten, die zum Erstellen eines Datenflusses in Data Integration erforderlich sind.
Der Datenfluss lautet:
Alle zugrunde liegenden Speicherressourcen wurden in früheren Kapiteln erstellt. In Data Integration erstellen Sie die Datenassets für jedes der Elemente des Datenflusses.
8.1 Erstellen eines Datenassets für Ihre Quelle und das Staging
Erstellen Sie ein Datenasset für Ihre Quell- und Staging-Daten.
Füllen Sie 7 aus. Bereiten Sie die Datenquellen und Sinks vor, bevor Sie diese Aufgabe ausführen.
8.2 Datenasset für das Ziel erstellen
Erstellen Sie ein Datenasset für das Ziel-Data Warehouse.
Führen Sie 8.1 Datenasset für Quelle und Staging erstellen aus, bevor Sie diese Aufgabe ausführen.
8.3 Datenflüsse erstellen
Erstellen Sie einen Datenfluss in Data Integration, um die Daten aus der Datei zu erfassen.
Führen Sie 8.2 Datenasset für das Ziel erstellen aus, bevor Sie diese Aufgabe ausführen.
- Wählen Sie auf der Seite "Vision-Lab-Projektdetails" die Option Datenflüsse aus.
- Wählen Sie Datenfluss erstellen aus.
- Wählen Sie im Datenflussdesigner den Bereich Eigenschaften aus.
-
Geben Sie unter Name
lab-data-flow
ein. - Klicken Sie auf Erstellen.
8.4 Datenquelle hinzufügen
Fügen Sie nun dem Datenfluss eine Datenquelle hinzu.
Führen Sie 8.3 Datenfluss erstellen aus, bevor Sie diese Aufgabe ausführen.
Nachdem Sie den Datenfluss in 8.3 Datenfluss erstellen erstellt haben, bleibt der Designer geöffnet, und Sie können ihm mit den folgenden Schritten eine Datenquelle hinzufügen:
8.5 Ausdruck hinzufügen
Fügen Sie einen Ausdruck hinzu, um das Format von ID
in Ganzzahl und das Format des Feldes date_taken
in ein Datum zu ändern.
Schließen Sie 8.4 Datenquellen hinzufügen ab, bevor Sie diese Aufgabe ausführen.
8.6 Funktionen hinzufügen
Fügen Sie dem Datenfluss eine Funktion hinzu, um Objekte aus den Eingabebildern zu extrahieren.
Schließen Sie 8.5 Einen Ausdruck hinzufügen ab, bevor Sie diese Aufgabe ausführen.
8.7 Ausgabe der Data Warehouse-Tabelle zuordnen
Ordnen Sie die Ausgabe der Sentimentanalyse der Data Warehouse-Tabelle zu.
Schließen Sie 8.6 Funktion hinzufügen ab, bevor Sie diese Aufgabe ausführen.
8.8 Ausführen des Datenflusses
Führen Sie den Datenfluss aus, um die Zieldatenbank aufzufüllen.
Schließen Sie 8.7 Ausgabe der Data Warehouse-Tabelle zuordnen ab, bevor Sie diese Aufgabe ausführen.
9. Daten in Analytics Cloud visualisieren
Zeigen Sie die Daten an, die Sie mit Analytics Cloud erstellt haben.
Sie benötigen Zugriff auf Analytics Cloud und zum Erstellen einer Analytics Cloud-Instanz.
9.1 Analytics Cloud-Instanz erstellen
Führen Sie diese Schritte aus, um eine Analytics Cloud-Instanz zu erstellen.
Füllen Sie 8 aus. Verwenden Sie einen Datenfluss in Data Integration, bevor Sie diese Aufgabe ausführen.
- Wählen Sie im Navigationsmenü der Konsole die Option Analysen und KI aus.
- Wählen Sie Analytics Cloud aus.
- Wählen Sie das Compartment aus,
- Wählen Sie Instanz erstellen aus.
- Geben Sie einen Namen ein. Geben Sie keine vertraulichen Informationen ein
-
Wählen Sie
2 OCPUs
aus. Die anderen Konfigurationsparameter werden als Standardwerte beibehalten. - Klicken Sie auf Erstellen.
9.2 Verbindung zum Data Warehouse erstellen
Führen Sie diese Schritte aus, um eine Verbindung von Ihrer Analytics Cloud-Instanz zu Ihrem Data Warehouse einzurichten.
Führen Sie 9.1 Analytics Cloud-Instanz erstellen aus, bevor Sie diese Aufgabe ausführen.
9.3 Datasets erstellen
So erstellen Sie ein Dataset:
Schließen Sie 9.2 Verbindung zum Data Warehouse erstellen ab, bevor Sie diese Aufgabe ausführen.
- Wählen Sie Daten.
- Klicken Sie auf Erstellen.
- Wählen Sie Neues Dataset erstellen aus.
- Wählen Sie Ihr Data Warehouse aus.
- Ziehen Sie die OBJECTS-Tabelle aus der Datenbank USER1 auf die Leinwand.
- Speichern Sie Ihr Dataset.
9.4 Visualisierung erstellen
Führen Sie diese Schritte aus, um Ihre Daten in Analytics Cloud anzuzeigen.
Schließen Sie 9.3 Dataset erstellen ab, bevor Sie diese Aufgabe ausführen.