Intégration du service de visualisation avec Oracle Analytics Cloud (OAC)
Créez un flux d'intégration de données qui utilise la trousse SDK Vision pour détecter des objets dans des images et projeter ces informations dans une table d'un entrepôt de données. Ces données de sortie sont ensuite utilisées par Oracle Analytics Cloud pour créer des visualisations et trouver des modèles.
Voici le flux de haut niveau 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, des fonctions et des passerelles d'API VCN, et d'utiliser le service d'intégration de données et le service de visualisation.
Parlez à votre administrateur des politiques requises.
Configuration des politiques requises
Suivez ces étapes pour configurer les politiques requises.
1. Créer un réseau en nuage virtuel
Créez un VCN pour servir de répertoire de base à 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 Réseau.
- Sélectionner des réseaux en nuage virtuels.
- Cliquez sur Démarrer l'assistant VCN.
- Sélectionnez Créer un réseau VCN avec connectivité Internet.
- Sélectionnez Démarrer l'assistant VCN.
- Entrez un nom pour le VCN. Évitez d'entrer 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 de trafic entrant avec état pour le sous-réseau régional public afin de permettre le trafic sur le port 443.
Terminez 1.1 Création d'un réseau VCN avec accès Internet avant d'essayer cette tâche.
La passerelle d'API 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 en un seul point d'extrémité qui peut être utilisé par vos utilisateurs.
Remplissez 1. Créez un réseau en nuage virtuel avant d'essayer cette tâche.
3. Créer 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 sur demande. La fonction est conforme au schéma requis pour le service d'intégration de données. La fonction sans serveur appelle l'API de Vision au moyen de la trousse SDK Python.
3.1 Création d'une application
Pour ajouter une fonction, il faut d'abord créer une application.
Remplissez 2. Création d'une passerelle d'API avant d'essayer cette tâche.
3.2 Création d'une fonction
Suivez ces étapes pour créer une fonction dans votre application.
Terminez 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: 300Contenu 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
requestsContenu 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 rstr3.3 Déploiement de la fonction
Déployer la fonction dans votre application
Terminez 3.2 Création d'une fonction avant d'essayer cette tâche.
3.4 Appelez la fonction
Testez la fonction en l'appelant.
Terminez 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 de base 64 d'un jeu de lignes JSON (chaque ligne est un JSON pour chaque enregistrement). Chaque enregistrement a un code 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. Ajouter une politique de fonctions
Créez une politique pour que la fonction puisse être utilisée avec Vision.
Remplissez 3. Créez une fonction d'enrichissement avant d'essayer cette tâche.
5. Créer un espace de travail d'intégration de données pour Oracle Cloud Infrastructure
Avant de pouvoir utiliser le service d'intégration de données, assurez-vous de disposer des droits nécessaires pour utiliser cette capacité.
Remplissez 4. Ajout d'une politique de fonctions avant d'essayer cette tâche.
Créez les politiques qui vous permettent d'utiliser le service d'intégration de données.
6. Ajouter des politiques d'intégration de données
Mettez à jour votre politique pour pouvoir utiliser le service d'intégration de données.
Remplissez 5. Création d'un espace de travail Oracle Cloud Infrastructure Data Integration avant d'essayer cette tâche.
7. Préparer les sources et les récepteurs de données
Vous utilisez des images de stationnement de voiture ainsi que la date à laquelle les images ont été prises comme données-échantillons.
Collectez 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 du service d'intégration de données et du service de visualisation.
7.1 Chargement des données-échantillons
Chargez les images de voiture stationnée dans votre seau.
Remplissez 6. Ajout de politiques d'intégration de données avant d'essayer cette tâche.
7.2 Création d'un seau intermédiaire
Le service d'intégration de données a besoin d'un emplacement temporaire pour vider les fichiers intermédiaires avant de publier les données dans un entrepôt de données.
Terminez 7.1 Chargement des données-échantillons avant d'essayer cette tâche.
- Dans le menu de navigation de la console, sélectionnez Stockage.
- Sélectionnez Seaux.
- Sélectionnez Créer un seau.
-
Donnez-lui un nom approprié, par exemple
data-staging. Évitez d'entrer 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 7.2 Création d'un seau intermédiaire 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 toutes les informations sur les objets détectés.
Terminez 7.3 Préparation de la base de données cible avant d'essayer cette tâche.
8. Utiliser un flux de données pour l'intégration de données
Créez les composants nécessaires pour créer un flux de données dans le service d'intégration de données.
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 le service d'intégration de données, 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 votre source et votre table intermédiaire
Créez une ressource de données pour vos données sources et intermédiaires.
Remplissez 7. Préparez les sources et les récepteurs de données avant d'essayer cette tâche.
8.2 Création d'une ressource de données pour votre cible
Créez une ressource de données pour l'entrepôt de données cible.
Terminez 8.1 Création d'une ressource de données pour la source et l'emplacement temporaire avant d'essayer cette tâche.
8.3 Création d'un flux de données
Créez un flux de données dans le service d'intégration de données pour ingérer les données à partir d'un fichier.
Terminez 8.2 Création d'une ressource de données pour votre cible avant d'essayer cette tâche.
- Dans la page des 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.
-
Pour Nom, entrez
lab-data-flow. - Sélectionnez Créer.
8.4 Ajouter une source de données
Maintenant, ajoutez une source de données à un flux de données.
Terminez 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 lui ajouter une source de données en suivant les étapes suivantes :
8.5 Ajout d'une expression
Ajoutez une expression pour remplacer le format de ID par un nombre entier et le format du champ date_taken par une date.
Terminez 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 des objets des images d'entrée.
Remplissez 8.5 Ajout d'une expression avant d'essayer cette tâche.
8.7 Mappage de la sortie à la table d'entrepôt de données
Mappez la sortie de l'analyse de sentiment à la table d'entrepôt de données.
Terminez 8.6 Ajout d'une fonction avant d'essayer cette tâche.
8.8 Exécuter le flux de données
Exécutez le flux de données pour alimenter la base de données cible.
Terminez 8.7 Mappage de la sortie à la table d'entrepôt de données avant d'essayer cette tâche.
9. Visualiser les 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.
Entrez 8. Utilisez un service de flux de données pour l'intégration de données avant d'essayer cette tâche.
- Dans le menu de navigation de la console, sélectionnez Analyse et intelligence artificielle.
- Sélectionnez Analytics Cloud.
- Sélectionnez le compartiment,
- Sélectionnez Créer une instance.
- Entrer un nom. N'entrez pas 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 de votre instance Analytics Cloud à votre entrepôt de données.
Terminez 9.1 Création d'une instance Analytics Cloud avant d'essayer cette tâche.
9.3 Création d'un jeu de données
Suivez ces étapes pour créer un jeu de données.
Terminez 9.2 Création d'une connexion à l'entrepôt de données avant d'essayer cette tâche.
- Sélectionner des données.
- Sélectionnez Créer.
- Sélectionnez Créer un jeu de données.
- Sélectionnez votre entrepôt de données.
- À partir de la base de données USER1, faites glisser la table OBJECTS sur 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 9.3 Création d'un jeu de données avant d'essayer cette tâche.
Mappages cinq à huit
Mappages neuf à douze
Mappages treize et quatorze