Intégration de Vision à Oracle Analytics Cloud (OAC)
Créez un flux Data Integration qui utilise le kit SDK Vision pour détecter les objets dans les images et projeter ces informations dans une table d'un data warehouse. Ces données de sortie sont ensuite utilisées par Oracle Analytics Cloud pour créer des visualisations et rechercher des modèles.
Voici le flux général du système entre Vision et OAC :
Avant de commencer
Pour suivre ce tutoriel, vous devez être en mesure de créer des réseaux VCN, des fonctions et des passerelles d'API, et d'utiliser Data Integration et Vision.
Discutez avec votre administrateur des stratégies requises.
Configuration des stratégies requises
Suivez ces étapes pour configurer les stratégies requises.
1. Création d'un réseau cloud virtuel
Créez un VCN qui servira de répertoire de base pour la fonction sans serveur et la passerelle d'API créée plus tard dans le tutoriel.
1.1 Création d'un VCN avec accès Internet
Suivez ces étapes pour créer un VCN avec accès à Internet.
- Dans le menu de navigation, sélectionnez Fonctions de réseau.
- Sélectionner des réseaux cloud virtuels.
- Cliquez sur Démarrer l'assistant VCN.
- Sélectionnez Créer un VCN avec la connectivité Internet.
- Sélectionnez Démarrer l'assistant VCN.
- Entrez le nom du VCN. Evitez de saisir des informations confidentielles.
- Sélectionnez Suivant.
- Sélectionnez Créer.
1.2 Accès à votre VCN à partir d'Internet
Vous devez ajouter une nouvelle règle entrante avec conservation de statut au sous-réseau régional public afin d'autoriser le trafic sur le port 443.
Terminez 1.1 Création d'un VCN avec un accès Internet avant d'essayer cette tâche.
API Gateway communique sur le port 443, qui n'est pas ouvert par défaut.
2. Création d'une passerelle d'API
Une passerelle d'API vous permet d'agréger toutes les fonctions que vous avez créées dans un point de terminaison unique qui peut être utilisé par vos utilisateurs.
Terminez 1. Créez un réseau cloud virtuel avant d'essayer cette tâche.
3. Création d'une fonction d'enrichissement
Suivez ces étapes pour créer une fonction d'enrichissement qui peut être appelée à partir d'Oracle Cloud Infrastructure Data Integration.
Créez une fonction sans serveur qui s'exécute uniquement à la demande. La fonction est conforme au schéma requis pour être utilisé par Data Integration. La fonction sans serveur appelle l'API de Vision via le SDK Python.
3.1 Création d'une application
Pour ajouter une fonction, nous devons d'abord créer une application.
Terminez 2. Création d'une passerelle d'API avant d'essayer cette tâche.
3.2 Création d'une fonction
Procédez comme suit pour créer une fonction dans votre application.
Terminez la section 3.1 Création d'une application avant d'essayer cette tâche.
Le moyen le plus rapide est de faire en sorte que le système génère un modèle Python.
Contenu recommandé pour 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
Contenu recommandé pour 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
Contenu recommandé pour 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 Déploiement de la fonction
déployer la fonction dans l'application,
Terminez la 3.2 Création d'une fonction avant d'essayer cette tâche.
3.4 Appel de la fonction
Testez la fonction en l'appelant.
Terminez la section 3.3 Déploiement de la fonction avant d'essayer cette tâche.
{"data":"eyJpZCI6MSwiaW5wdXRUZXh0IjoiaHR0cHM6Ly9pbWFnZS5jbmJjZm0uY29tL2FwaS92MS9pbWFnZS8xMDYxOTYxNzktMTU3MTc2MjczNzc5MnJ0czJycmRlLmpwZyJ9", "parameters":{"column":"inputText"}}
Les données encodées sont la version encodée 64 de base d'un ensemble de formats de lignes JSON (chaque ligne est un JSON pour chaque enregistrement). Chaque enregistrement a un ID qui est utilisé pour associer la sortie. Le décodage de l'exemple de chaîne donne :{"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. Ajout d'une stratégie de fonction
Créez une stratégie pour que la fonction puisse être utilisée avec Vision.
Terminez 3. Créez une fonction d'enrichissement avant d'essayer cette tâche.
5. Création d'un espace de travail Oracle Cloud Infrastructure Data Integration
Avant de pouvoir utiliser Data Integration, assurez-vous que vous disposez des droits nécessaires pour utiliser cette fonctionnalité.
Terminez 4. Ajout d'une stratégie Functions avant d'essayer cette tâche.
Créez les stratégies qui vous permettent d'utiliser Data Integration.
6. Ajout de stratégies Data Integration
Mettez à jour votre stratégie pour pouvoir utiliser Data Integration.
Terminez 5. Créez un espace de travail Oracle Cloud Infrastructure Data Integration avant d'essayer cette tâche.
7. Préparation des sources de données et des récepteurs
Vous utilisez des images de parking ainsi que la date à laquelle les images ont été prises en tant que données échantillon.
Rassemblez 10 images (ou plus) de voitures garées en tant que source de données sur laquelle vous effectuez une analyse de détection d'objet à l'aide de Data Integration et Vision.
7.1 Charger les données échantillon
Chargez les exemples d'images de voiture garées dans votre compartiment.
Terminez 6. Ajoutez des stratégies Data Integration avant d'essayer cette tâche.
7.2 Créer un bucket intermédiaire
Data Integration a besoin d'un emplacement intermédiaire dans lequel vider les fichiers intermédiaires avant de publier les données vers un entrepôt de données.
Effectuez le 7.1 Chargement des données échantillon avant d'essayer cette tâche.
- Dans le menu de navigation de la console, sélectionnez Storage.
- Sélectionner des buckets.
- Sélectionnez Créer un bucket.
-
Donnez-lui un nom approprié, par exemple,
data-staging
. Evitez de saisir des informations confidentielles. - Sélectionnez Créer.
- Acceptez toutes les valeurs par défaut.
7.3 Préparation de la base de données cible
Configurez la base de données Autonomous Data Warehouse cible pour ajouter un schéma et une table.
Terminez la section 7.2 Création d'un bucket d'import avant d'essayer cette tâche.
7.4 Créer une table pour projeter les données analysées
Créez une table pour stocker les informations sur les objets détectés.
Terminez la section 7.3 Préparation de la base de données cible avant d'essayer cette tâche.
8. Utilisation d'un flux de données dans Data Integration
Créez les composants nécessaires à la création d'un flux de données dans Data Integration.
Le flux de données est le suivant :
Toutes les ressources de stockage sous-jacentes ont été créées dans les chapitres précédents. Dans Data Integration, vous créez les ressources de données pour chacun des éléments du flux de données.
8.1 Création d'une ressource de données pour la source et la préparation
Créez une ressource de données pour les données source et de préparation.
Terminez 7. Préparez les sources de données et les récepteurs avant d'essayer cette tâche.
8.2 Création d'une ressource de données pour la cible
Créez une ressource de données pour l'entrepôt de données cible.
Complétez la section 8.1 Création d'une ressource de données pour la source et l'import avant d'essayer cette tâche.
8.3 Création d'un flux de données
Créez un flux de données dans Data Integration pour inclure les données d'un fichier.
Terminez 8.2 Création d'une ressource de données pour votre cible avant d'essayer cette tâche.
- Sur la page de détails du projet Vision-Lab, sélectionnez Flux de données.
- Sélectionnez Créer un flux de données.
- Dans le concepteur de flux de données, sélectionnez le panneau Propriétés.
-
Dans Nom, entrez
lab-data-flow
. - Sélectionnez Créer.
8.4 Ajouter une source de données
Maintenant, ajoutez une source de données à votre flux de données.
Terminez la section 8.3 Création d'un flux de données avant d'essayer cette tâche.
Après avoir créé le flux de données dans 8.3 Création d'un flux de données, le concepteur reste ouvert et vous pouvez y ajouter une source de données en procédant comme suit :
8.5 Ajout d'une expression
Ajoutez une expression pour remplacer le format de ID
par un entier et le format du champ date_taken
par une date.
Complétez la section 8.4 Ajout d'une source de données avant d'essayer cette tâche.
8.6 Ajout d'une fonction
Ajoutez une fonction au flux de données pour extraire les objets des images d'entrée.
Effectuez l'8.5 Ajout d'une expression avant d'essayer cette tâche.
8.7 Mettre en correspondance la sortie avec la table d'entrepôt de données
Mettez en correspondance la sortie de l'analyse des sentiments avec la table Data Warehouse.
Complétez la section 8.6 Ajout d'une fonction avant d'essayer cette tâche.
8.8 Exécution du flux de données 8
Exécutez le flux de données pour alimenter la base de données cible.
Complétez la section 8.7 Mapping de la sortie avec la table d'entrepôt de données avant d'essayer cette tâche.
9. Visualisation des données dans Analytics Cloud
Affichez les données que vous avez créées à l'aide d'Analytics Cloud.
Vous devez accéder à Analytics Cloud et créer une instance Analytics Cloud.
9.1 Création d'une instance Analytics Cloud
Suivez ces étapes pour créer une instance Analytics Cloud.
Terminez 8. Utilisez un flux de données dans Data Integration avant d'essayer cette tâche.
- Dans le menu de navigation de la console, sélectionnez Analytics et AI.
- Sélectionnez Analytics Cloud.
- Sélectionnez le compartiment,
- Sélectionnez Créer une instance.
- Entrez un nom. Ne pas saisir d'informations confidentielles
-
Sélectionnez
2 OCPUs
. Les autres paramètres de configuration conservent les valeurs par défaut. - Sélectionnez Créer.
9.2 Créer une connexion à l'entrepôt de données
Suivez ces étapes pour configurer une connexion entre votre instance Analytics Cloud et votre entrepôt de données.
Terminez la 9.1 Création d'une instance Analytics Cloud avant d'essayer cette tâche.
9.3 Création d'un ensemble de données
Pour créer un ensemble de données, procédez comme suit.
Terminez la section 9.2 Création d'une connexion à l'entrepôt de données avant d'essayer cette tâche.
- Sélectionnez Data.
- Sélectionnez Créer.
- Sélectionnez Créer un ensemble de données.
- Sélectionnez votre entrepôt de données.
- A partir de la base de données USER1, faites glisser la table OBJECTS vers le canevas.
- Enregistrez votre jeu de données.
9.4 Créer une visualisation
Suivez ces étapes pour afficher vos données dans Analytics Cloud.
Terminez la version 9.3 Création d'un ensemble de données avant d'essayer cette tâche.