Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

GX - IA con Genexus

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 24

Laboratorio

Inteligencia Artificial con GeneXus™


Campus Party, Mar 15th 2019 GeneXus S.A

Copyright 1988 - 2019 | GeneXus S.A.


Todos los derechos reservados. Este documento no puede ser reproducido en ningún medio
sin el consentimiento explícito de GeneXus S.A. La información contenida en este documento
es para uso personal únicamente.

Marcas Registradas
GeneXus es una marca registrada (®) en múltiples países y regiones, incluyendo entre otros,
América Latina, EEUU, Japón, la UE y Uruguay. Todas las demás marcas mencionadas en
este documento son propiedad de sus respectivos dueños.
Campus Party, Mar 15th 2019 GeneXus S.A

Objetivos
Generales
Desarrollar una aplicación ​mobile que permita realizar la traducción automática de texto escrito,
texto hablado y texto identificado en imágenes consumiendo servicios de Inteligencia Artificial
(IA) en la nube.

Específicos
● Presentar el módulo ​GeneXusAI​, las funcionalidades que provee y cómo configurarlo.

● Analizar la importancia de ​tipos de datos no estructurados (i.e. texto en lenguaje


natural, audio e imágenes) y la complejidad de su tratamiento computacional.

● Estudiar el abanico de opciones en ​servicios de IA en la nube​.

● Integrar los ​building-blocks​ de la IA​ para construir sistemas complejos, incluyendo:


+ ​Machine-Translation​ (MT)
+ ​Speech-To-Text​ (STT)
+ ​Optical-Character-Recognition​ (OCR).
Asimismo, se hará uso de ​Language Detection para identificar el idioma de origen y
Text-To-Speech​ (TTS) para sintetizar el texto traducido en audio (i.e. ‘decir en voz alta’).

Estructura del documento


El laboratorio se compone de tres partes.

1. Configuración de la base de conocimiento (KB, K ​ nowledge Base)​ que se va a utilizar


durante el laboratorio, y una breve presentación del módulo con una descripción de la
funcionalidad que provee.

2. Incorporación de los servicios de IA a la aplicación mediante GeneXusAI, incluyendo la


configuración del proveedor y la programación del código para ejecutar la funcionalidad.

3. OPCIONAL. Configurar los servicios con un proveedor distinto incluyendo el proceso para
obtener las claves necesarias.
Campus Party, Mar 15th 2019 GeneXus S.A

Parte 1: Configuración inicial


Preliminar
● El diseño de la interfaz de usuario de la aplicación no es parte del taller, por lo que se
cuenta con una KB con el desarrollo inicial.

● Es necesario contar con una ​GeneXus Account para poder hacer ​Deploy To Cloud​. Si no
cuenta con una al momento de realizar este laboratorio, crear una nueva (necesita
verificación por correo electrónico). Además, debe estar suscrito a Deploy To Cloud en la
sección ​My Apps​ una vez logueado.

● Usted debe contar con un dispositivo móvil con sistema operativo Android o iOS.

○ Dispositivos Android
Es necesario tener un lector de códigos QR (usualmente es una funcionalidad nativa en
la aplicación de cámara) y permitir instalar aplicaciones de fuentes desconocidas; para
ello, dirigirse a Ajustes > Seguridad, y marcar la opción ​Orígenes Desconocidos.​

○ Dispositivos iOS
Es necesario descargar la aplicación ​GeneXus KB Navigator​ desde el App Store.

Crear la base de conocimientos


Abrir GeneXus IDE, y desde la toolbar seleccionar File > New > Knowledge Base (ver Figura 1).
Elija un nombre para su KB, deje el resto de las opciones por defecto, y haga click en “Create”.
Campus Party, Mar 15th 2019 GeneXus S.A

Importar la base de conocimientos


GeneXus permite el intercambio de KBs mediante archivos ‘xpz’. Para importarlo, desde la
toolbar de GeneXus IDE, dirigirse a ​Knowlege Manager > Import​ (ver Figura 2).

En la ventana de ​Import Objects desplegada a continuación (ver Figura 3), buscar el archivo
LabAI Startup.xpz disponible en el escritorio (click en ). Una vez seleccionado, presionar el
botón “Load” y se desplegarán los objetos allí contenidos. Para importarlos a la KB,
simplemente damos click en el botón “Import”.
Campus Party, Mar 15th 2019 GeneXus S.A

Estructura de la base de conocimiento


La estructura de la KB se puede encontrar en la zona izquierda del IDE de GeneXus, en la
solapa “KB Explorer”, bajo el nodo “Root Module” (ver Figura 4).

Componentes:

MainLabAI panel
Panel principal. Es el panel a ejecutar en el
dispositivo móvil. Contiene la UI y lógica para
invocar los servicios de AI que vamos a utilizar.

UI folder
Contiene dos paneles auxiliares para interactuar
con la aplicación móvil, uno para poder
grabar/reproducir audio desde el dispositivo
(​RecordAudio​) y otro para seleccionar una imagen
(desde la galería o mediante una foto,
SelectImage​).

Helpers folder
Contiene dos objetos de tipo Procedure donde
programaremos la configuración del proveedor de
servicios de AI en la nube (​GetProvider)​ y haremos
post-procesamiento del texto identificado por OCR
(​PostprocessOcr​).

El resto de los componentes no son de interés para este laboratorio.

Configuración para prototipado


Vamos a estar prototipando nuestra aplicación en GeneXus Cloud. Para ello, dirigirse a la
solapa ​Preferences (ver Figura 5), seleccionar el generador con el que estamos trabajando
(​Default, C# Web)​ y, posicionados en la solapa ​Properties​, buscamos la propiedad ​Deploy To
Cloud​ y seleccionamos la opción “Yes” (ver Figura 6).
Campus Party, Mar 15th 2019 GeneXus S.A

Ejecución de la aplicación
Primero hay que armar la KB. Para ello, habiendo hecho la configuración para el ​prototipado en
la nube​, dirigirse a ​Build > Build All desde la toolbar de GeneXus IDE (ver Figura 7, o dar click
en el ícono ). Esto iniciará el proceso de armado, y esperamos a que culmine exitosamente
(esto lo podemos ver en la solapa ​Output)​ .
Campus Party, Mar 15th 2019 GeneXus S.A

NOTA​: Al usar la opción ​Deploy to Cloud todos los servicios se ejecutan de forma remota, pudiendo
presentarse problemas de red. Asegurarse tener buena conectividad.

Una vez armada la KB, dirigirse a ​View > Show QR desde la toolbar (ver Figura 8). Esto lanzará
el navegador, y nos mostrará el código QR al cual podremos acceder a la aplicación.

Cliente Android Cliente iOS

Escanear el QR bajo la sección “​Install Abrimos la aplicación KBN que descargamos


Android Apps”​ utilizando la cámara de su desde el App Store, seleccionamos “Añadir
dispositivo (o aplicación third-party). Esta Base de Conocimientos”, luego tap al botón
acción nos descargará un archivo “apk” “+” y finalmente a “Escanear código QR” para
(instalador), y se procede a instalar la asociar la aplicación. Se debe escanear el
aplicación. código QR que está bajo la sección “​Install
iOS Apps​”. Una vez escaneada, la aplicación
estará listada en el KBN (no se instala en el
dispositivo).

NOTA​: Considerar que en este punto del workshop aún no hemos agregado ninguna funcionalidad. Con cada
cambio que realizamos, debemos repetir el proceso de para armar la KB y obtener el código QR.
Campus Party, Mar 15th 2019 GeneXus S.A

La explicación de los componentes de la interfaz de usuario se pueden consultar en el ​Anexo II


de este documento.

Conociendo el módulo GeneXusAI


El primer paso para poder utilizar el módulo ​GeneXusAI es instalándolo en la KB. Para esto
debemos ir a ​Knowledge manager > Manage Module References desde la toolbar de GeneXus
IDE, y en el menú Knowledge Manager e instalar el módulo GeneXusAI (ver Figura 9).

​ B Explorer lo
Una vez instalado el módulo, en el K
podemos encontrar dentro del nodo ​References (​ ver
Figura 10).

El módulo ​GeneXusAI se compone de un conjunto de


Procedures, Structured Data Types (SDTs) y Domains
que permiten interactuar de forma fácil con los servicios
de IA con distintos proveedores.

El módulo1 cuenta con la posibilidad de interactuar con


seis proveedores:

● Amazon Web Services


● IBM Watson
● Google Cloud Services
● Microsoft Cognitive Services
● SAP Leonardo
● Tencent AI

1
En su versión para GeneXus 16 Upgrade 2. En upgrades posteriores se incorporarán Baidu AI y
Alibaba, así como también la posibilidad de incluir modelos adaptados a necesidades específicas.
Campus Party, Mar 15th 2019 GeneXus S.A

NOTA​: En este laboratorio vamos a utilizar los servicios de ​IBM Watson​, pero la funcionalidad que
implementemos es independiente de los servicios que se terminen usando.

El módulo ​GeneXusAI a su vez está compuesto por varios submódulos que agrupan las
funciones del mismo según el tipo de funcionalidad de cada una.

Configuration
Define el concepto de ​Provider (SDT), utilizado como input en todas las funciones del módulo.
Para cada “provider” se define un nombre y el tipo de proveedor2, y además un conjunto de
parejas clave-valor con la información que necesita cada servicio.

Audio
Contiene las funciones que permiten interactuar con el habla.
+ ​SpeechToText​:​ Transcribe de un audio con voz a texto.
+ ​TextToSpeech​:​ Recita un texto en “voz alta”.

Image
Contiene las funciones para manipular imágenes.
+ ​Classify:​ Identifica el objeto principal en la imagen.
+ ​DetectFaces:​ Detecta rostros en la imagen.
+ ​DetectObjects:​ Detecta los objetos que se encuentran presentes en la imagen.
+​ ​DetectScene​: Detecta el escenario en por la imagen (p.e.campo, ciudad, playa, etc.).
+ ​OCR​: R​econoce de texto en imágenes.

Text
Contiene funciones relativas a textos escritos en lenguaje natural.
+ ​DetectLanguage​: I​dentifica el idioma en que está escrito el texto dado.
+ ​ExtractEntities:​ Extrae las entidades principales del texto.
+ ​KeyPhrases​:​ Extrae las palabras o frases más relevantes del texto.
+​ ​SentimentAnalysis:​ ​Cuantifica el sentimiento expresado en el texto.
+ ​Translate​: Traduce de un idioma a otro.

Video
Contiene funciones para el tratamiento de videos
+ ​Process​: Comienza el procesamiento de un video en forma asíncrona.
+ ​Analyze:​ Extrae la información analizada en el video (p.e. caras, discurso, texto, categorías).

Para este laboratorio las funciones que vamos a utilizar son:


Audio.SpeechToText​, ​Audio.TextToSpeech​, ​Image.OCR​, ​Text.DetectLanguage​ y
Text.Translate

2
Es decir, el fabricante.
Campus Party, Mar 15th 2019 GeneXus S.A

Parte 2: Agregando la funcionalidad


Definiendo el proveedor y los servicios
Antes de comenzar a implementar la funcionalidad de inteligencia artificial, necesitamos
configurar los proveedores que vamos a utilizar.

NOTA​: ​Las claves aquí expuestas fueron generadas con propósito de este laboratorio y serán
dadas de baja culminado el workshop. En la ​Parte 3 de este documento se brinda una guía de
ejemplo para generar claves personales.

Con tal motivo, abrimos el objeto ​GetProvider y nos dirigimos a la solapa “Rules” para definir
qué parámetros aceptará el procedimiento mediante una regla “parm” como esta​:
parm​(​in​:​&name​, ​out​:​&provider​);

y definimos las variables en la solapa “Variables” de esta forma:


● &name VarChar(40)
● &provider Provider, GeneXusAI.Configuration

Luego, en la solapa “Source”, copiamos el siguiente código fuente:


if​ ​&name​ = !​'watson-translate'
​&provider​.Name = !​'watson-translate'
​&provider​.Type = ProviderType.IBM

​&prop​ = new()
​&prop​.Key = PropertyKey.Key
​&prop​.Value = !​'lzFqAZYt58LB2vd1EpROiJYYcgFtMt0nn4aO3Pu5_tdK'
​&provider​.Properties.Add(​&prop​)
endIf

if​ ​&name​ = !​'watson-tts'


​&provider​.Name = !​'watson-tts'
​&provider​.Type = ProviderType.IBM

​&prop​ = new()
​&prop​.Key = PropertyKey.Key
​&prop​.Value = !​'ggHrLTK63FUM8fpmEKL3uyH7JAzvdkrKC57mxks_jJSx'
​&provider​.Properties.Add(​&prop​)
endIf

if​ ​&name​ = !​'watson-stt'


Campus Party, Mar 15th 2019 GeneXus S.A

​&provider​.Name = !​'watson-stt'
​&provider​.Type = ProviderType.IBM

​&prop​ = new()
​&prop​.Key = PropertyKey.Key
​&prop​.Value = !​'lUUPdN8w9-Y55k1WtTEIovOvCx97hMkid6B7EGjCs2rU'
​&provider​.Properties.Add(​&prop​)
endIf

if​ ​&name​ = !​'watson-ocr'


​&provider​.Name = !​'watson-ocr'
​&provider​.Type = ProviderType.IBM

​&prop​ = new()
​&prop​.Key = PropertyKey.Key
​&prop​.Value = !​'FRrGhE9Am7IjH8BS54W3lEMW3lfNBQ0UxRu0yu8h5chV'
​&provider​.Properties.Add(​&prop​)
endIf

y definimos una nueva variable en la solapa “Variables” de esta forma:


● &prop Provider.Property, GeneXusAI.Configuration

NOTA​: Si bien estamos usando un sólo proveedor (IBM Watson), en este caso definimos varias entradas
para él (condicionales “if”) puesto que el proveedor nos brinda credenciales específicas por cada servicio.
Esta particularidad depende de cada proveedor; p.e. Google o Amazon nos brinda una única clave para todos
los servicios y, por tanto, estos proveedores tendrían una única entrada (i.e. un único “if” ) asociada en el
procedimiento.

Traducción de texto escrito


La función más básica de la aplicación es poder traducir de texto a texto.

En el Panel ​MainLabAI​, en pantalla tenemos dos combos, “From” y “To” que indican de qué
idioma a qué idioma vamos a traducir.

En dicho panel vamos a editar el evento ​translate.tap​ de esta forma:


Event​ ​translate.tap
​composite
​&provider​ = GetProvider(!​'watson-translate'​)
​if​ ​&fromLanguage​ = !​'.'
​// TODO: autodetect language
​&fromLanguage​ = !​''
Campus Party, Mar 15th 2019 GeneXus S.A

​endIf
​if​ ​&fromLanguage​.IsEmpty() ​OR ​&toLanguage​.IsEmpty()
​msg​(!​'Select valid from and to languages to perform translation'​)
​else
if​ ​&fromLanguage​ = ​&toLanguage
​msg​(​'Select different from and to languages'​)
​else
​&from​.FromString(​&fromLanguage​)
​&to​.FromString(​&toLanguage​)
Progress.ShowWithTitleAndDescription(​'Translate'​,​'Processing'​)
​&translated​ = Translate(​&source​,​&from​,​&to​,​&provider​,​&messages​)
Progress.Hide()
​endIf
​endIf
​endComposite
EndEvent

Source 1​: Evento ‘Translate’ para traducir texto escrito de un idioma a otro

donde las variables que debemos definir en la solapa “Variables” son:


● &from Language, GenexusAI
● &to Language, GenexusAI
● &provider Provider, GeneXusAI.Configuration
● &messages Messages, GeneXus.Common

¿Qué hace el código?

Lo primero es obtener la información necesaria del proveedor de traducción. Esto se hace


llamando al procedimiento ​GetProvider​.

Luego controlamos que en el ​&from no se haya elegido la opción de detectar el idioma, que
vamos a implementar en el ​siguiente paso​.

Por último validamos que se hayan seleccionado los idiomas ​&from y &​ to​. Si están
configurados por el usuario, y son distintos, invocamos a la función de traducción
(​Text.Translate​).

La función devuelve el texto traducido en la variable ​&translated y, si ocurrió algún error, la


variable ​&messages (un SDT) queda cargada con información describiendo el problema (se
muestra automáticamente en pantalla).
Campus Party, Mar 15th 2019 GeneXus S.A

Probamos la aplicación

Repetimos el paso para ​ejecutar la aplicación en nuestro dispositivo. En este punto, la


aplicación debe ser capaz de traducir de texto a texto.

Por ejemplo, si ingresamos el siguiente texto:

Bienvenidos al laboratorio de inteligencia artificial en Campus Party UY.

y seleccionamos “From” con valor ​Spanish y “To” con valor ​English,​ el resultado esperado es
(algo del estilo de):

Welcome to the Artificial Intelligence laboratory at Campus Party UY.

Detección del idioma


El combo “From” permite elegir la opción ​Auto​, funcionalidad que nos quedó pendiente de
implementar en el paso anterior.

Para poder detectar el idioma de origen vamos a utilizar la función ​Text.DetectLanguage​.

En el evento ​translate.tap​ (ver Source 1)​ ​vamos a cambiar el siguiente código:


if​ ​&fromLanguage​ = !​'.'
​// TODO: autodetect language
​&fromLanguage​ = !​''
endIf

por:
if​ ​&fromLanguage​ = !​'.'
Progress.ShowWithTitleAndDescription(​'Autodetect'​,​'Processing'​)
​&outputLabel​ = DetectLanguage(​&source​, ​&provider​, ​&messages​)
Progress.Hide()
​&fromLanguage​ = ​&outputLabel​.label
endIf
definiendo en la solapa “Variables” lo siguiente:
● &outputLabel OutputLabel, GeneXusAI

En este punto volvemos a ​ejecutar la aplicación​, y la misma debe ser capaz de detectar el
idioma del texto ingresado cuando hayamos seleccionando la opción ​Auto​ en el combo “From”.
Campus Party, Mar 15th 2019 GeneXus S.A

Reconocer texto en una imagen


Para dotar a la aplicación la capacidad de reconocer texto en imágenes con el fin de traducirla,
vamos utilizar la función de Optical Character Recognition (​Image.OCR​).

Para esto, debemos implementar el siguiente evento:


Event​ ​camera.tap
​composite
​if​ ​&fromLanguage​.IsEmpty()
​msg​(​'Select a From language first'​)
​else
​if​ ​&fromLanguage​ = !​'.'​ ​// autodetect language
​msg​(​'Autodetect language not available for images'​)
​else
SelectImage.CallOptions.Target = !​'blank'
​&image​ = SelectImage()
​&from​.FromString(​&fromLanguage​)
​&provider​ = GetProvider(!​'watson-ocr'​)
Progress.ShowWithTitleAndDescription(​'OCR'​,​'Processing'​)
​&outputRegionCollection​ = OCR(​&image​,​&from​,​&provider​,​&messages​)
Progress.Hide()
​if​ ​&outputRegionCollection​.Count > 0
​&source​ = PostprocessOcr(​&outputRegionCollection​)
​else
​&source​ = ​''
​msg​(​'Could not find text in selected image'​)
​endIf
​endIf
​endIf
​endComposite
EndEvent

Source 2​: Evento camera.tap para reconocer texto en imágenes

definiendo en la solapa “Variables” las siguientes variables:


● &outputRegionCollection OutputRegion, GeneXusAI [Collection]
● &image Image

¿Qué hace el código?

Primero valida que el idioma de origen esté correctamente configurado (no sea vacío ni ​Auto)​ .
Campus Party, Mar 15th 2019 GeneXus S.A

Luego se llama al panel ​SelectImage que ayudará al usuario a seleccionar una imagen, ya sea
eligiendo la imagen provista por defecto, eligiendo una desde su galería o tomando una
fotografía.

NOTA​: IBM Watson únicamente reconoce texto en Inglés a partir de imágenes. Otros valores de “From”
podrían dar resultados no esperados. Otros proveedores sí soportan texto multi-idioma.

Posteriormente, se obtiene la información necesaria del proveedor para el servicio de


reconocimiento de imágenes. Esto se hace mediante una llamada al procedimiento
GetProvider​.

Finalmente se llama a la función ​Image.OCR y se invoca al procedimiento ​PostprocessOcr


para concatenar todos los textos detectados en la imagen3 (puede leer el código si lo desea).

Probamos la aplicación
Repetimos el proceso para ​ejecutar la aplicación y, en este punto, la misma debe ser capaz de
detectar texto en una imagen que seleccionemos o tomemos foto.

Para ejecutar una prueba sencilla, seleccionar “From” el valor ​English y hacer tap en el ícono
de la cámara. Allí, elegir la imagen provista por defecto (cartel “Central Park”, en Inglés) y hacer
tap en el botón “Done”. Al terminar de procesar, se obtendrá en texto “​central south park”​ .

Si desea hacer otra prueba con imágenes de su galería o tomada mediante una fotografía,
asegúrese de que el texto presente en la imagen esté en Inglés (el resultado para otros idiomas
puede no ser correcto).

Transcripción de texto a partir del habla


El otro método de entrada de texto a la aplicación será mediante el habla.

Para eso, debemos implementar el siguiente evento:


Event​ ​microphone.tap
​composite
​if​ ​&fromLanguage​.IsEmpty()
​msg​(​'Select a From language first'​)
​else

3
En una implementación real seguramente vamos a querer saber dónde está cada texto y con qué
confianza se reconoció cada uno; para este ejemplo, nos alcanza con concatenarlos todos sin importar el
orden.
Campus Party, Mar 15th 2019 GeneXus S.A

​if​ ​&fromLanguage​ = !​'.'​ ​// autodetect language


​msg​(​'Autodetect language not available for images'​)
​else
RecordAudio.CallOptions.Target = !​'blank'
​&audio​ = RecordAudio()
​do case
​case​ ​&fromLanguage​ = !​'en'
​&locale​ = Locale.English_UnitedStates
​case​ ​&fromLanguage​ = !​'es'
​&locale​ = Locale.Spanish_Spain
​case​ ​&fromLanguage​ = !​'fr'
​&locale​ = Locale.French_France
​endcase
​&provider​ = GetProvider(!​'watson-stt'​)
Progress.ShowWithTitleAndDescription(​'STT'​,​'Processing'​)
​&source​ = SpeechToText(​&audio​,​&locale​,​&provider​,​&messages​)
Progress.Hide()
​endIf
​endIf
​endComposite
Endevent

Source 3​: Evento microphone.tap para reconocer texto a partir del habla

y definimos las variables en la solapa “Variables” de esta forma:


● &audio Audio
● &locale Locale, GenexusAI

¿Qué hace el código?

Se comporta de manera análoga al tratamiento de texto en imágenes, solicitando la información


del proveedor para el servicio de reconocimiento del habla mediante el procedimiento
GetProvider​ e invoca al panel ​RecordAudio​ para grabar/reproducir audio desde el dispositivo.

Luego, previo a invocar a la función ​Audio.SpeechToText​, infiere un valor para la variable


&locale​ a partir del valor de la variable ​&fromLanguage​ ingresada por el usuario.

Un ‘Locale’ es una particularización de un ‘Language’ para una zona determinada; p.e. para el
idioma Español (language ‘es’) podemos encontrar variantes para España (locale ‘es-ES’),
México (locale ‘es-MX’), etc.
Campus Party, Mar 15th 2019 GeneXus S.A

Probamos la aplicación

Ejecutar la aplicación​. En este punto la misma debe ser capaz de convertir a texto el contenido
(hablado) de un archivo de audio grabado por el dispositivo.

Síntesis de voz
Por último, vamos a agregar la opción de que el dispositivo lea en voz alta el texto traducido.

Para esto vamos a implementar el siguiente evento:


Event​ ​speech.tap
​composite
​if​ ​&toLanguage​.IsEmpty()
​msg​(​'Select a To language first'​)
​else
​&provider​ = GetProvider(!​'watson-tts'​)
​do case
​case​ ​&toLanguage​ = !​'en'
​&locale​ = Locale.English_UnitedStates
​case​ ​&toLanguage​ = !​'es'
​&locale​ = Locale.Spanish_Spain
​case​ ​&toLanguage​ = !​'fr'
​&locale​ = Locale.French_France
​endCase
​Progress.ShowWithTitleAndDescription(​'TTS'​,​'Processing'​)
​&audio​ = TextToSpeech(​&translated​,VoiceType.Female,​&locale​,​&provider​,​&messages​)
Progress.Hide()
GeneXus.SD.Media.Audio.PlayBackground(​&audio​)
​endIf
​endComposite
EndEvent

Source 4​: Evento speech.tap para reproducir el texto en forma hablada

¿Qué hace el código?

Primero valida que el lenguaje de destino haya sido previamente configurado por el usuario.

Luego, de forma análoga a los demás códigos que hemos visto, se solicita la información del
proveedor para el servicio de síntesis del habla mediante el procedimiento ​GetProvider​.
Luego, se infiere el valor de ​&locale a partir del ​&toLanguage y se invoca a la función
Audio.TextToSpeech​ para finalmente reproducir el resultado en el dispositivo.
Campus Party, Mar 15th 2019 GeneXus S.A

Probamos la aplicación

Ejecutar la aplicación​. En este punto la misma debe ser capaz de recitar en voz alta el texto
que hayamos traducido previamente.

Listo. Su aplicación ya está completa.

¡Felicitaciones!
Campus Party, Mar 15th 2019 GeneXus S.A

Parte 3 (opcional): Generar


credenciales
Un punto importante del módulo ​GeneXusAI es obtener las credenciales necesarias para utilizar
los servicios de los distintos proveedores en nuestras aplicaciones. Las credenciales que se
usaron para el laboratorio fueron creadas específicamente para el mismo y serán dadas de
baja a la brevedad.

El documento ​HowTo: Get provider's credentials for GeneXusAI explica cómo obtener las
credenciales para los distintos proveedores. Los pasos a seguir dependen de cada uno de
ellos, el documento antes mencionado indica cuáles son los servicios que se requieren para
cada función del módulo.

Funcionalidad de OCR de SAP


A modo de ejemplo, vamos a obtener una clave de SAP para la función de OCR.

Para eso, debemos acceder primero al sitio de SAP API:


https://api.sap.com/package/SAPLeonardoMLFunctionalServices​.

Una vez en el portal debemos iniciar sesión (o crear una cuenta si no tenemos una), y vamos a
ver una pantalla como muestra la Figura 11.
Campus Party, Mar 15th 2019 GeneXus S.A

En el campo de búsqueda escribimos “ocr”, y debe aparecer la opción “Inference Service for
Optical Character Recognition (OCR)” (ver Figura 12).

En dicha pantalla clickeamos el botón “Show API Key” nos da la clave que debemos usar en
nuestra aplicación.

Volviendo a GeneXus, en el Procedure ​GetProvider​, agregamos un nuevo proveedor


añadiendo una nueva entrada para SAP como muestra el siguiente código:

if​ & ​ name​ = !​'sap-ocr'


​&provider​.Name = !​'sap-ocr'
​&provider​.Type = ProviderType.SAP

​&prop​ = new()
​&prop​.Key = PropertyKey.Key
​&prop​.Value = !​'{tu_API_key}'
​&provider​.Properties.Add(​&prop​)
endif
Campus Party, Mar 15th 2019 GeneXus S.A

Solo nos falta un paso más para poder usar este servicio en nuestra aplicación. En el Panel
MainLabAI​, en el evento ​camera.tap​, simplemente reemplazamos la línea que dice:
&provider​ = GetProvider(!​'watson-ocr'​)
por:
&provider​ = GetProvider(!​'sap-ocr'​)

Cuando volvamos a ejecutar la aplicación, el servicio de OCR que estaremos usando será el de
SAP Leonardo en vez de usar el de IBM Watson. ¡​Todo esto habiendo cambiado sólamente
el nombre del proveedor!

Esta facilidad para intercambiar proveedores permite prototipar de forma rápida probando
varios servicios, permitiendo así que nuestra aplicación use el mejor servicio para nuestro caso
de uso.
Campus Party, Mar 15th 2019 GeneXus S.A

Anexo I: Referencias
● Documentación oficial
GeneXus Artificial Intelligence​.

● Funcionalidades del módulo ​GeneXusAI​ utilizada en el laboratorio:


○ SpeechToText procedure
○ TextToSpeech procedure
○ OCR procedure
○ DetectLanguage procedure
○ Translate procedure

● Guía para obtener claves


HowTo: Get provider's credentials for GenexusAI

● Imágenes de la aplicación
IconFinder​ (​MIT Licence​).
Campus Party, Mar 15th 2019 GeneXus S.A

Anexo II: Interfaz de usuario


A continuación se muestra una captura de pantalla de la aplicación que vamos a desarrollar.

La aplicación consiste de los siguientes componentes:


1. Texto a traducir
2. Idioma desde el cual se traduce
3. Idioma al cual se quiere traducir
4. Botón para realizar la traducción
5. Texto de salida, traducido al idioma de destino
6. Botón para poder introducir texto a partir de una imagen
7. Botón para poder introducir texto a partir de una grabación de audio
8. Botón para que la aplicación lea en voz alta el texto traducido

También podría gustarte