Photo by Clem Onojeghuo on Unsplash

Aplicação SAPUI5 utilizando SAP Leonardo Machine Learning Foundation

Um verdadeiro Hands-on de como integrar sua aplicação com serviços do SAP Leonardo

Erick Carvalho
Bar8
Published in
10 min readJan 30, 2019

--

E aweeeeee meu povo!

Agora que já sabemos como realizar o deploy das nossas aplicações no SCP, vamos conhecer mais sobre os serviços disponíveis para tornar o nosso dia a dia dentro das empresas mais inteligente.

Nesta nova série de postagens minha ideia é que coloquemos a mão na massa e entendamos melhor as palavras mais faladas do momento: SAP Leonardo, SAP Machine Learning.

Para tal, iremos implementar hoje a integração de um serviço do SAP Leonardo, onde é possível realizar a detecção de rostos. Isso tudo em uma aplicação utilizando o stack: NodeJS + Express + SAPUI5.

A minha ideia com este post é criar uma aplicação onde você seja capaz de substituir os serviços de detecção de rostos por qualquer outro serviço do SAP Leonardo Machine Learning — isso porque os serviços possuem a mesma base de procedimentos para integração com aplicações.

Para este post é muito importante que você conheça o SCP. Caso não o conheça, recomendo ler antes os seguintes posts:

Introdução

Por mais que a ideia deste post é a de servir como tutorial para futuras implementações, é muito importante que você entenda o movimento que têm acontecido dentro das empresas nos últimos tempos.

Na história tivemos algumas eras, tais como:

  • Automação industrial nos anos 60s até 80s;
  • Automação dos Processos de Negócios nos anos 90s até 2000s;
  • Transformação Digital nos anos 2000s até 2010s.

E agora, na era em que vivemos, a SAP traz tecnologias para o mercado que já impactam — e deverão impactar ainda mais nos próximos anos. A essa era está sendo atribuído o nome de:

Era das empresas inteligentes.

Nessa era temos a utilização de tecnologias inteligentes, como: Aprendizado de máquina e inteligência artificial, IoT, Computação Distribuída e Blockchain

Então, numa era com tecnologias inteligentes, devemos estar atentos ao que nos capacite a coletar e conectar dados previamente isolados e reconhecer padrões não vistos para que, assim, possamos simular possíveis impactos e direcionar recursos escassos para as áreas necessárias. Apenas desta forma seremos capazes de responder mais rapidamente às mudanças no mercado e/ou nos negócios e dinamizar os processos de negócios em direção aos resultados corretos dos clientes.

Com tecnologias inteligentes o que eu julgo mais interessante é a capacidade de fazermos mais com menos, capacitando os funcionários através da automação de processos e libertando as pessoas para fazer um trabalho mais significativo. Dessa forma tenho certeza que será mais simples fornecer a melhor experiência para o cliente ao antecipar e responder proativamente às suas necessidades.

Para enfatizar a importância de estarmos atentos a novas tecnologias a SAP publicou o seguinte no SAP Strategy Paper — Delivering the Intelligent Enterprise:

60% de toda tarefa humana deverá ser automatizada até 2025
99% Acuracidade em reconhecimento de Vídeo e Voz até 2020
97% Acuracidade em imagens hoje

Este ainda não será um post puramente sobre Machine Learning. Entretanto, durante a utilização dos serviços de machine learning do SAP Leonardo ficará claro que, de agora em diante, a ideia é que passemos mais tempo realizando a prática do computador aprender com base em informações.

Uma definição que eu gosto bastante referente a Machine Learning foi descrita por Arthur Samuel como:

O campo de estudo que dá aos computadores a capacidade de aprender sem ser explicitamente programado.

Esta é uma definição mais antiga e informal, sendo, basicamente, o entendimento para quem está iniciando.

Isso porque hoje com o aprendizado de máquina os computadores já são capazes de ver, ouvir, falar, sentir e agir.

Nova arquitetura dos Times e das Tecnologias

Com a entrada de novas tecnologias, novos perfis de profissionais com novas habilidades passam a ser necessários também. Desta forma, a estrutura dos times mudam e ficam como na imagem abaixo:

Nossos queridos usuários utilizando nossas aplicações > Desenvolvedores Frontend e Backend > E os Cientistas de Dados trabalhando na Extração, Transformação e Carregamento de informações (ETL)

Na arquitetura das tecnologias teremos serviços prontos para serem utilizados (que é o nosso exemplo de hoje) e serviços para que treinemos modelos que possam ser, então, utilizados como serviços. Segue exemplo melhor ilustrado abaixo:

Inference é o tipo de serviço que já é baseado em informações (modelo) — previamente treinado — , enquanto que Training é a capacidade de você treinar um modelo com base na experiência adquirida durante o treinamento de um modelo já existente (dessa forma podemos obter modelos mais específicos).

Modelo

De agora em diante não será raro as ocasiões em que conversaremos sobre modelos. Um modelo é o resultado obtido após o aprendizado de máquina (Machine Learning, ML) ser concluído. O aprendizado é a representação matemática de um processo do mundo real.

Obtemos isso ao executarmos um algoritmo de ML que localiza padrões nos dados de treinamento de modo que os parâmetros de entrada correspondam ao alvo alcançando, assim, um modelo de aprendizado de máquina que você pode usar para fazer previsões.

No SCP teremos acesso a alguns tipos formas de modelos, que são:

  • Ready-to-use: Aqui aproveitamos os serviços ML pré-treinados através de APIs Web simples, permitindo uso imediato (como no exemplo de hoje);
  • Bring your own Model (BYOM): Possibilidade de implementar, publicar e executar seu próprio modelo de ML como um serviço; #boraAprenderPython #boraAprenderR
  • Modelo customizado: Aqui pegamos os serviços Ready-to-use e então Re-treinamos e personalizamos com base nos nossos próprios dados.

Ilustração abaixo para ajudar a detalhar toda essa arquitetura:

Como já citado, hoje utilizaremos no nosso exemplo o Model Inference, criando a camada de aplicação e utilizando um serviço do ambiente Cloud Foundry.

Vantagens

Em resumo, as vantagens de utilizar serviços disponíveis do SAP Leonardo são:

  • Serviços de machine learning fáceis de consumir e, principalmente, destinados a não especialistas em Machine Learning;
  • Suporte a todo o ciclo de vida do software de autoaprendizagem;
  • Forte integração com os softwares da SAP;
  • Aberto para várias tecnologias de Machine Learning.

Bom, chega de histórinha e vamos logo colocar a mão na massa.

Passo 1: Entendendo como funciona a API

Para consumir o serviço de Machine Learning do SAP Leonardo, primeiro vamos precisar obter:

  • Parâmetros URI;
  • Padrão de requisição;
  • Resposta do serviço.

Pra isso vamos acessar:

https://api.sap.com/

Então, teremos acesso a seguinte página:

Desde já aconselho que você realize o login. O botão de login fica no canto superior direito da página.

Busque por: SAP Leonardo Machine Learning

Vamos clicar na opção:
SAP Leonardo Machine Learning Foundation — Functional Services

Agora, já dentro da opção onde clicamos, deveremos escolher qual API desejamos. Para isso, vamos utilizar o campo de pesquisa mais uma vez como na imagem abaixo:

Inference Service for Face Detection
É possível também acessar diretamente pelo endereço: https://api.sap.com/api/face_detection_api/resource

Após acessarmos a página da API, percebemos que ela possui apenas um serviço que utiliza o método POST:

Clicando em “detalhes”, teremos informações como: arquitetura REST; última modificação; versão e a possibilidade de baixar toda a especificação do serviço.

Esta é uma API para detectar rostos em uma imagem ou em várias imagens. Na documentação está descrito que a posição dos rostos encontrados para cada imagem é retornada.

As únicas limitação que conheço para a utilização desse serviço é que as imagens devem ser RGB ou escala de cinza de 8 bits (e não devem exceder o tamanho máximo do arquivo de 101 MB).

Voltemos ao API References. Vamos fazer como na imagem abaixo:

Clique em Try out. Dessa forma somos capazes de executar o serviço diretamente do site. Perceba que, neste caso, é necessário apenas informar uma imagem e clicar em executar — dessa forma já conseguiríamos testar o nosso serviço. Muito importante: estou utilizando no meu exemplo o navegador Google Chrome.

A imagem que irei utilizar será a seguinte:

Photo by rawpixel on Unsplash
Neste momento apenas informei o caminho da imagem para que o serviço possa analisá-la.
Após a execução do serviço, temos um retorno 200 com o conteúdo da resposta em formato JSON, onde é informada a posição de cada rosto encontrado (e uma propriedade chamada numberofFaces com a quantidade total de rostos encontrados).

Tendo executado o serviço com sucesso, podemos então clicar em Code Snippet:

Teremos um pop-up aberto como o seguinte:

E até para ABAP é apresentado um exemplo de como implementar o serviço que acabamos de utilizar.

Essa ferramenta de consumo de serviço direto pelo SAP API Hub é muito bacana, entretanto, já tive problemas com ela utilizando outros navegadores e, por mais que o Google Chrome seja um dos melhores navegadores para o desenvolvedor durante o trabalho na web, definitivamente não é muito cômodo ficar trabalhando para testar serviço utilizando um navegador.

Dito isso, vou apresentar como tenho feito para consumir serviços do SAP API Hub. Primeiramente, precisamos conseguir a URL da API, que podemos conseguir aqui após ter executado o serviço:

Esse valor não vêm previamente preenchido, então é sempre bom, após ter clicado em Try out, clicar em Execute. Mesmo que dê erro, só o que desejamos é esse endereço.

E a última informação muito importante é a nossa API Key, e essa é possível conseguir clicando em:

Lembrando sempre que será necessário que você esteja logado para que isto seja possível.
Após clicarmos na opção Show API Key, um pop-up será aberto informando qual o valor da API Key. Copie esta informação pois vamos utilizá-la nos próximos passos.

Abra o Postman, e então:

1. Como vimos no inicio este é um serviço do tipo POST. 2. Informe a URL que pegamos anteriormente. 3. Nos campos Headers, preencha com a chave API Key e então informe o valor que conseguimos anteriormente. Precisamos informar o tipo de conteúdo que vamos enviar para o serviço, desse modo informe o Content-Type como multipart/form-data.
1. Navegue para a aba Body. 2. Escolha a opção form-data. 3. Preencha a chave com o valor FILES e escolha a opção FILE. Ao lado você terá a opção de informar onde está a imagem na sua máquina.

Enfim, após a execução teremos o seguinte resultado:

Retorno 200

Passo 2: Bora Codar, ou tipo isso

A primeira coisa que vamos fazer é o clone do projeto que está no GitHub. Então, para isso, vamos abrir o terminal e clonar o projeto:

git clone https://github.com/erickcarvalho/bar8-cf-exemplo03.git

Após realizar a clonagem do projeto, acesse o diretório onde está a aplicação, e então execute o comando do node para baixar as dependências:

npm install

Dependências instaladas, é hora de rodar o projeto.

node index

Aplicação no ar!

Antes de testarmos nossa aplicação, vamos realizar um único ajuste. Vamos abrir o projeto e navegar até o arquivo: settings.json

app > ui5 > webapp > model > settings.json

Neste arquivo vamos trocar o valor do APIKey pelo mesmo valor que estávamos utilizando para realizar o teste no postman:

Acesse o site https://api.sap.com/api/face_detection_api/resource > Realize o login > Clique em Show API Key
Copiado o valor da APIKey do site, substitua o atributo como na imagem acima.

Uma observação muito importante aqui é que quando você precisar desenvolver sua aplicação para valer, esta APIKey nada mais é que um Token. Sendo assim, não será sempre a mesma. Será necessário desenvolver uma rotina na sua aplicação que seja capaz de se autenticar no serviço da SAP, obtendo um token para o consumo de serviços.

Voltando para a aplicação, certifique-se de que a aplicação está no ar. Se sim, vamos acessá-la.

localhost:3000
Imagem Selecionada para Upload
Imagem carregada, clique no botão: Resultado
Um popup será aberto com a quantidade de rostos identificados
Clique em detalhes para obter o retorno do JSON

Conclusão

Hoje vimos um pouco sobre como o mundo dos negócios está se movimentado, bem como a SAP está trabalhando para acompanhar esse movimento. Vimos, também, que a SAP nos oferece acesso a modelos de análise de imagem pré-treinados com uma única chamada de API, o que facilita a adição da funcionalidade do ML aos seus aplicativos sem precisar se concentrar na criação ou no treinamento de um modelo personalizado.

No entanto, existem algumas situações em que você deseja treinar um modelo personalizado. Digamos que você queira classificar imagens específicas com condições específicas: para isso, vamos discutir em um próximo post como treinar modelos.

Antes de me despedir, quero agradecer imensamente ao Adriano Campanhola que foi o responsável por desenvolver a aplicação em SAPUI5 + NodeJS inteira, e assim tornou a minha vida muito mais simples. Muito obrigado mano!

--

--

Editor for

Agilista, Desenvolvedor e quando não está discutindo TDD está sendo repreendido por algum comentário infeliz