Photo by Jeremy Lapak on Unsplash

Treinando um Serviço de Reconhecimento de Imagem com SAP Leonardo Machine Learning

Treine seu próprio modelo e o consuma como um serviço integrado através de uma aplicação SAPUI5 no SCP

Erick Carvalho
Bar8
Published in
18 min readFeb 6, 2019

--

E aweeee meu povo!!!!!

No último post nós criamos uma aplicação utilizando um serviço que o SAP Leonardo nos disponibiliza. Dessa vez, vamos criar uma aplicação onde a ideia é o reconhecimento dos logos do SAPUI5, OpenUI5 e NodeJS.

Em resumo, após este post você será capaz não apenas de criar uma aplicação com integração com os serviços do SAP Leonardo, como também será capaz de customizar um serviço já existente com o recurso de treinamento. Dessa forma será possível reconhecer imagens mais específicas (como é o caso dos logos do NodeJS ou do SAPUI5).

E a melhor parte é: tudo isso sem que você precise ser um cientista de dados ou expert no assunto. Caso você seja novo por aqui, recomendo que você leia primeiro os seguintes posts:

Introdução

No post anterior nós criamos uma aplicação integrada com um serviço pronto para consumo onde, naquele cenário, fomos capazes de identificar rostos. Entretanto, não éramos capazes de identificar de quem eram os rostos de forma precisa.

Para o nosso caso de uso, hoje vamos treinar um classificador para predizer exatamente se uma imagem é o logo do NodeJS ou SAPUI5/OpenUI5. Para isso, vamos antes entender uma técnica através da qual seremos capazes de treinar um modelo onde, caso seja necessário, além de reconhecer o que é um rosto (retomando o exemplo do post passado), identifique de quem é o rosto.

Isso que estamos prestes a fazer é o que se chama de Transferência de Aprendizagem (Transfer Learning), que consiste na reutilização de um modelo pré-treinado em um novo problema. Esta técnica é muito popular no campo do Deep Learning pois permite treinar Redes Neurais com dados relativamente pequenos. Com o Transfer Learning, o conhecimento de um modelo de Aprendizado de Máquina já treinado é aplicado a um problema diferente, mas relacionado.

O Transfer Learning é muito utilizado — e a SAP faz uso disso. Existem alguns modelos pré-treinados para aprendizado de máquina que se tornaram bastante populares. A SAP, por exemplo, utiliza um deles que é o modelo Inception-v3, que foi treinado pelo ImageNet. Esse tipo de prática é muito útil quando não há dados suficientes para treinar uma rede neural. Neste caso, uma maneira de contornar esse problema seria encontrar alguém que tenha treinado uma rede neural suficientemente para que sirva de ponto de partida para você utilizar como base, e então resolver o problema da sua rede neural.

Em resumo, com o aprendizado por transferência, basicamente tentamos explorar o que foi aprendido em uma tarefa para melhorar a generalização em outra. Transferimos os pesos que uma rede aprendeu na tarefa A para uma nova tarefa B.

Treinando um serviço

O treinamento de um serviço é um processo que não é complexo, entretanto envolve alguns passos.

Então sem mais rodeios, vamos lá.

Passo 1 — Efetue login no SCP, e então acesse o ambiente Cloud Foundry.

E lá vamos nós outra vez…

Passo 2 — Acesse a sua subconta.

Passo 3 — Acesse a opção Spaces e, então, acesse o espaço disponibilizado para a sua conta.

Neste momento possuo o espaço DEV
No meu caso possuo apenas uma aplicação (que está parada)

Passo 4 Aqui, vamos iniciar o processo de criação de uma instância do serviço SAP Leonardo Machine Learning. Para tal, vá até o Service Marketplace e busque por: ml-foundation.

Existe uma chance deste serviço não estar disponível para você. Isso porque, dependendo de como você configurou a sua conta no inicio, o SCP passa a não liberar o serviço de machine learning. A única forma que consegui para resolver este problema, infelizmente, foi criando uma nova conta trial =/
Durante a preparação deste post, o serviço estava sendo disponibilizado com o nome de ml-foundation-TRIAL-BETA. Preste bastante atenção nisso! Não acredito que isto será um problema no futuro ao ponto de mudar a ordem como são executados os processos. Entretanto, para este post, veremos que daqui a alguns passos isso fará a diferença durante uma configuração que referencia o serviço ml-foundation que, neste momento, não está disponível para contas trial.

Passo 5 Nesta área é possível ter acesso ao suporte e documentação deste serviço, mas o que queremos neste momento é criar nossa instância. Desta forma, clique em: Instances.

Acesso à documentação
Tela que deverá ser apresentada após clicar em Instances

Passo 6 — Clique em New Instance e preencha as informações como descrito abaixo.

Standard
Não é necessário o preenchimento de nada, apenas clique em Next
Não é necessário o preenchimento de nada, apenas clique em Next
Aqui informamos um nome para a instância que estamos criando e então finalizamos o processo. Dica: escolha um nome fácil de lembrar e escrever pois faremos referência a ele ao longo de todo o post

Passo 7 — Podemos ver que a instância foi criada com sucesso, podendo fazê-lo, também, acessando pelo terminal. Efetue o Login no SCP utilizando o CLI. — Caso não saiba ou não se lembre como fazer isso é possível verificar aqui).

cf login -a <ENDPOINT> -u <USUARIO LOGIN> ou apenas cf login

cf services

cf services

Passo 8 — De volta ao SCP, vamos agora criar uma chave para que seja possível acessar essa instância que acabamos de criar de fora do ambiente do SCP.

Vamos clicar no nome da instância. No meu caso é: ml_instance_bar8
Você será trazido para esta página acima. Clique na opção Service Keys no menu a esquerda
Clique em Create Service Key e um popup será aberto para que você informe o nome da chave do serviço
Chave criada com sucesso

Esta chave é extremamente importante, pois ela é a referência para a criação do token que utilizaremos para ter acesso externo a nossa instância. Além disso, ela nos fornece os endereços das APIs que utilizaremos daqui para frente.

Passo 9 — Essa chave também é possível acessar via CLI com o seguinte comando:

cf service-key <NOME DA INSTANCIA> <NOME DA CHAVE DO SERVIÇO>

Passo 10 — Com a nossa instância com serviços de machine learning funcionando, o que necessitamos é iniciar o treinamento do nosso modelo. Para o inicio dessa atividade, vamos precisar de: dados.

Para iniciar o carregamento de dados na nossa instância, necessitamos entrar no mesmo site onde baixamos a ferramenta CLI, mas dessa vez será para baixarmos um plugin que nos possibilitará ter maior controle sobre a instância de machine learning que acabamos de criar — tudo isso via terminal.

Apenas esclarecendo: o CLI que utilizamos consegue gerir recursos relacionados ao Cloud Foundry, e o que necessitamos agora é ir até uma camada mais abaixo, daí a necessidade deste plugin.

Vamos clicar em ML Foundation e escolher o nosso sistema operacional de preferência.

Após o download da aplicação, descompacte-a. Utilizando o terminal, navegue até a pasta descompactada e, então:

  • Linux/Mac

cf install-plugin -f sapmlcli

  • Windows

cf install-plugin -f sapmlcli.exe

[OFF-Topic]

Este plugin do CLI é uma extensão do plugin CF padrão. A SAP cuidou por inserir um comando chamado sapml para interagir facilmente com nossas instâncias e APIs do Machine Learning Foundation (MLF).

Caso você encontre algum problema com essa ferramenta, você pode utilizar uma outra:

[/OFF-Topic]

Passo 11— Com o plugin instalado, agora somos capazes de controlar a instância que criamos de machine learning a nível de sistema de arquivos. Assim, passaremos a utilizar, juntamente com o comando CF, o comando SAPML e, com isso, teremos acesso a recursos como:

cf sapml

Aqui estão todas as possibilidades de comandos quando utilizamos o comando SAPML

Porém, antes de qualquer coisa, vamos realizar algumas configurações.

Comecemos então com:

cf sapml config get

Você perceberá uma série de propriedades sem valores. Vamos trabalhar para configurá-las. Caso você já tenha usado antes, verifique se os valores apontam para os mesmo endereços previamente indicados na chave que geramos.

Neste exemplo, ao realizarmos o comando cf sapml config get, temos o valor da propriedade ml_foundation_service_name como ml-foundation. Conforme alertei anteriormente, o nome do serviço não é esse. Dessa forma, tive que fazer: cf sapml config set ml_foundation_service_name ml-foundation-beta-trial. Só com o correto valor dessa propriedade o passo seguinte funcionará.

Passo 12 — Vamos iniciar o Cloud File System. Execute o seguinte comando:

cf sapml fs init

Passo 13 — Podemos listar os diretórios disponíveis executando:

cf sapml fs list

Após este comando você poderá ter certeza se o plugin SAPML realmente está funcionando. Caso você obtenha sucesso, você não terá nenhum retorno ( já que ainda não carregamos nenhum arquivo na nossa instância).

Entretanto, caso você tenha o retorno abaixo:

Retorno de uma máquina utilizando o prompt command do Windows

Isso significa que você necessitará utilizar o Minio. — Vou passar maiores detalhes do uso do Minio quando realmente formos realizar o upload de dados para a instância do ML no SCP.

Passo 14 — Para realizar o upload do nosso Dataset em nossa instância, eu agilizei o trabalho e já criei um dataset pequeno. Apenas será necessário realizar o download do arquivo Logos.zip para, posteriormente, realizarmos upload em nossa instância. Segue o link:

Mas o que seria um Dataset mesmo? Esta nova palavra deverá fazer parte cada dia mais do nosso cotidiano. Dataset nada mais é do que uma coleção de dados que exige uma organização especial e que, no nosso caso, deve ser estruturado da seguinte forma — para quando o SCP iniciar o treinamento, conseguir realizar o passo a passo das validações do modelo:

Muito importante seguir a convenção de nomes: validation, training e test

Nessa estrutura temos os seguintes diretórios:

  • Training: Dentro desta pasta devem ficar as imagens que disponibilizaremos para o algoritmo de ML aprender qual é o logo do NodeJS e qual é o logo do SAPUI5/OpenUI5 para, então, ser capaz de gerar o modelo. A proporção das imagens que devem ser separadas para treino é muito importante. Eu costumo distribuir meu dataset com pelo menos 75% — 80% de todo dataset apenas para o treinamento. E o restante divididos nos demais diretórios Validation e Test (ex da distribuição nos diretórios: 80%–10%–10%);
  • Validation: Após o treinamento, o algoritmo utiliza as imagens disponibilizadas na pasta validation para fornecer uma avaliação imparcial de um ajuste de modelo no conjunto de dados de treinamento enquanto ajusta os hiperparâmetros do modelo. Assim, o modelo ocasionalmente tem acesso a esses dados, sendo importante salientar que, neste momento, não há aprendizado, durante a validação a ideia é que sejam redefinidos os hiperparâmetros.;
  • Test: Aqui encontramos um conjunto de exemplos usados apenas para avaliar o desempenho de um classificador totalmente treinado. No caso do MLP, usaríamos o teste para estimar a taxa de erro depois de escolhermos o modelo final.
Ilustração da divisão de um dataset

Um ponto muito importante que quero ressaltar é: este dataset que estou disponibilizando é muito pequeno, e ele seria inviável em um teste no mundo real. Optei por fazer algo menor, pois o meu foco é passar por todo o processo durante o treinamento de um serviço. Então, cuidado antes de sair dizendo por ai que entende de machine learning, pois só o processo de criar um dataset já é bastante complexo e exigiria diversos posts apenas sobre este tema.

Passo 15 —Agora que entendemos melhor o que é o dataset que acabamos de realizar o download, é hora de fazer seu upload na instância que criamos.

Para realizar o upload, navegue até o local onde está localizada a pasta descompactada Logos e, então, execute o seguinte comando (caso você não tenha tido problema com o SAPML):

cf sapml fs put <PASTA LOCAL> <PASTA DE DESTINO>

Upload da minha pasta Logos para dentro da instância. Mesmo que não exista a pasta Logos no servidor (como é o meu caso), ela será criada durante o processo de upload automaticamente

Caso você não tenha tido problema com o comandos acima, poderá ir direto para o Passo 16. Caso contrário, pode seguir a leitura pois irei mostrar como seguir o upload utilizando o Minio.

Erro apresentado ao tentar realizar o upload

Neste caso, você deverá utilizar o Minio. A configuração do Minio é dada pelo seguinte:

Primeiro, vá até o terminal vamos consultar novamente a service-key:

cf service-key <NOME DA INSTANCIA> <NOME DA CHAVE DO SERVIÇO>

Copie a propriedade URL

É a ultima propriedade

No Postman, vamos colar a URL copiada no passo anterior, complementando com os valores:

<URL> + /oauth/token?grant_type=client_credentials
Clicar na aba Authorizations e escolher a opção Basic Auth. Daí, preencha o usuário e a senha com as propriedades do SERVICE-KEY: <CLIENTID> e <CLIENTSECRET>

Consumindo o serviço pelo Postman, você deverá ter acesso a um access-token, como na imagem abaixo:

Neste ponto, na verdade, além do access_token vamos utilizar o token_type que é informado abaixo

Ainda no Postman, vamos agora consumir o seguinte serviço:

URL: POST> https://mlftrial-retrain-image-api.cfapps.eu10.hana.ondemand.com/api/v2/image/retraining/storage. Na aba Headers insira a propriedade Authorization e os valores <ACCESS_TYPE> (o ACESS_TYPE deve começar com letra maiúscula)<ACCESS_TOKEN> obtidos no serviço anterior

Este serviço irá nos retornar o <accessKey>, <secretKey> e <endpoint> para que sejamos capazes de configurar o Minio.

Utilizando o terminal, navegue até a pasta onde está o executável do Minio e execute o seguinte comando:

mc config host add saps3 https://<ENDPOINT> <ACCESSKEY> <SECRETKEY>

Após configurado, os comandos do Minio são:

  • Para listar todos os diretórios:

mc ls saps3

  • Para realizar upload:

mc cf --recursive <PASTA_LOCAL> <PASTA_DE_DESTINO>

Como um apoio extra deste post, o Lars Gregori utiliza o Minio para realizar upload.

Após o upload vamos iniciar três importantes passos: execução do Job que inicia o processamento de treinamento e irá gerar o nosso modelo; o Deploy do nosso modelo e o Consumo do nosso serviço.

Essa deverá ser sua cara quando descobrir que o plugin SAPML não funcionou, sabendo que os que usam MacOS ou Linux não tiveram problema algum

Passo 16 — A partir desse passo é possível realizar todo o procedimento de treinamento pelo próprio CLI através do comando jobs e job_submit. Entretanto, estou optando por fazer pelo modo que é levemente mais demorado apenas porque, com ele, vamos conhecer mais aspectos relacionados ao SCP e suas ferramentas. Além disso acredito que, para nós desenvolvedores, a utilização das APIs nos dará uma base melhor para entender todo o processo.

Como disse, este modo que vamos fazer é utilizando as APIs, e essas APIs nos foram informadas assim que conseguimos ter acesso à chave de acesso do serviço da nossa instância.

Aqui um exemplo de como acessar a service key acessando do SCP para termos acessos às APIs
Aqui novamente um exemplo de como acessar a service key acessando via CLI para termos acessos às APIs. — cf service-key <ID da INSTANCIA> <ID da CHAVE>

Como estamos prestes a iniciar o treinamento de um serviço relacionado a processamento em imagens, vamos acessar o link da propriedade:

IMAGE_RETRAIN_API_URL

Pegue o link que é informado junto da opção IMAGE_RETRAIN_API_URL e abra-o no seu navegador. Após acessar a página, você terá acesso a uma ferramenta chamada swagger.

Esta ferramenta é capaz de nos auxiliar no desenvolvimento em todo o ciclo de vida de uma API, desde o design e a documentação até o teste e a implantação. Hoje, iremos utilizá-la para alguns testes, mas principalmente para entender a documentação dos serviços que estamos prestes a consumir.

Usarei esta ferramenta no navegador Google Chrome.

Perceba que, ao acessar o link, a descrição é que estamos em uma API para treinar modelos que outras duas APIs são capazes de tomar como base, sendo elas: Image Classification e Feature Extraction.

Lembrando que a ideia aqui é criarmos um modelo customizado para reconhecer os logos do NodeJS e SAPUI5/OpenUI5, pois hoje não existe um serviço que seja capaz de realizar essa distinção. Então, após termos um modelo treinado, utilizaremos o serviço de Image Classification com o nosso modelo treinado como base.

Para o treinamento, é possível ver os serviços que utilizaremos:

No processo de treinamento as APIs mais importantes aqui serão: Jobs, Deployment e Models

Passo 17 — Antes de iniciarmos o processo de treinamento, vamos executar um passo que servirá para todos os demais, que é a geração do token para Autenticação nas APIs. Caso você tenha utilizado o Minio para upload do dataset , já terá feito boa parte desse processo.

Vamos novamente voltar a nossa Service-Key, e então copiar as propriedades:

clientid
clientsecret
url

Vamos ao Postman consumir o serviço de autenticação da seguinte maneira:

1. O serviço deve ser utilizar o método POST. 2. Pegue a URL que havia sido separada e então informe na barra de endereço com mais o seguinte final: /oauth/token?grant_type=client_credentials. 3. Vá na aba Authorization do Postman e opte pela opção de Basic Auth, e então no campo Username insira o <clientid> e no campo Password insira o <clientsecret> (ambos separados anteriormente).

Após a execução, deveremos ter um retorno 200 como a seguir:

O que usaremos neste momento será o access_token e o token_type, então já podemos deixar esses dois reservados em algum lugar para os próximos passos. Uma curiosidade: perceba que existe uma propriedade chamada expires_in. Isso significa que meu token deverá expirar em 43199 segundos, cerca de 12 horas. Sendo assim, é sempre bom ficar esperto com isso, pois pode ser preciso gerar outro.

Passo 18 — Vamos agora iniciar o treinamento do nosso modelo utilizando o serviço de Jobs. Como vocês já puderam perceber, essa ferramenta é muito similar a que utilizamos em posts passados para o consumo de serviço. Sendo assim, saiba que podemos utilizar, também, o Postman.

Clique para expandir no serviço Jobs o método Post e, em seguida, clique em Try it out

Após o clique, você poderá editar os valores da chave body, tendo acesso assim aos seguintes valores:

Estas opções nada mais são do que elementos que compõem a configuração do Job que estamos prestes a criar. Neste momento, vamos apenas nos preocupar com as propriedades:

  • jobName: Identificação que daremos ao nosso job;
  • dataset: Indicação de qual o nome do dataset que fizemos upload, o que no nosso caso será o Logos;
  • modelName: Identificação que daremos ao nosso modelo treinado.

Ficando assim:

Feito isso, preencha a chave Authorization conforme imagem abaixo:

token_type + access_token. Apenas uma observação (novamente): o token_type deve iniciar com letra maiúscula e estar separado com espaço do access_token.

Teremos o resultado a seguir:

Retornado o ID do Job que está sendo executado

Para acompanhar o status do Job (que inicialmente é Pendente), podemos utilizar no serviço Jobs o método GET para acompanhar o status do Job.

Este serviço nos retorna todos os Jobs e seus respectivos status. Caso você queira analisar um Job específico, o em outro serviço é possível passar o ID do Job na URL e, assim, verificar apenas o Job específico.

Confesso que não sou o maior apreciador da utilização do swagger, simplesmente por ser uma ferramenta que depende do navegador, o que nos deixa (ocasionalmente) sujeitos a problemas relacionado a sessão. Por isso, vou seguir os próximos exemplos utilizando o Postman.

Exemplo com o Postman, utilizando o serviço de Job método GET mas especificando o ID do Job na URL. Perceba que nosso estado é SUCESSO, o que significa que nosso modelo já foi treinado e está pronto para ser colocado no ar.

Uma curiosidade: vá ao seu terminal e acesse o diretório da sua instância como no exemplo abaixo:

Todo Job que você executar irá gerar um log dentro dessa pasta jobs/. Dessa forma, caso uma execução não termine em sucesso, será possível que você baixe o log para a sua máquina e analise o que pode ter ocorrido
cf sapml fs get <PASTA DO DESTINO> <PASTA LOCAL> — Utilizando o comando GET é possível fazer o download dos diretórios listados na nossa instância
Pastas que estavam dentro da jobs/ após download na minha máquina. Esse tipo de recurso é muito útil pois não é incomum ocorrerem problemas durante o treinamento de modelos. Dessa forma, passamos a ter acesso fácil aos arquivos de log do treinamento.

Passo 19 — Com nosso modelo treinado com sucesso, é chegado o momento de colocá-lo no ar. Para esta tarefa, iremos utilizar o serviço de deployment:

Precisamos apenas informar qual o nome do modelo, algo que fizemos no passo anterior, e então informar uma versão
É possível clicar em Executar utilizando o mesmo token gerado na etapa anterior, pegando a Request da URL gerada
No Postman, vamos fazer um POST, e na Headers vamos preencher da mesma forma que fizemos no serviço do Job: Authorization (token_type + access_token) e Content-type

Da mesma forma que no serviço de jobs, é possível consultar todos os deployments realizados (ou buscar por algum específico para poder analisar o status).

Passo 20 — Modelo treinado e no ar, agora é a hora de o testarmos. Como dito no início do post, treinamos um modelo para ser utilizado com os serviços de Image Classification ou Feature Extraction.

Vamos pegar o endereço do serviço de classificação na nossa Service Key como a seguir:

CF SERVICE-KEY <ID da INSTANCIA> <ID da Service Key> — IMAGE_CLASSIFICATION_URL

Acessando a URL do Image Classification temos o seguinte:

Aqui temos apenas dois serviços com método POST nessa API. O primeiro é um serviço pré-treinado semelhante ao que usamos no post passado, e a segunda opção é utilizando como base o modelo que acabamos de criar
Como documentado no swagger: 1. Método POST. 2. Complementamos a URL com o nome do modelo e sua versão. 3. Preenchemos o Headers com o Authorization (token_type + access_token) e o Content-Type (multipart/form-data)
No body vamos escolher a opção FORM-DATA e então carregar uma imagem.
Exemplo da imagem que estou carregando para ser classificada pelo serviço
Após a execução, temos um retorno 200. O resultado é a classificação, informando que a imagem que subimos possui um score de cerca de 86% de confiança de ser NodeJS e apenas 13% de ser algo relacionado a SAPUI5 ou OpenUI5

Integrando com uma aplicação SAPUI5

Ufa, sei que chegar aqui não foi nada simples! Mas agora falta pouquinho, então vamos lá.

Juro que essa também foi a minha cara quando cheguei aqui no post e ai lembrei que ainda teria a integração com a aplicação em SAPUI5

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-exemplo04.git

Após clonar o 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

Aqui você precisará ter o NodeJS instalado em sua máquina, ou simplesmente utilizar o Docker como já fizemos anteriormente

node index

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

Alterar URL e o substituir o Authorization informando o token_type e o access_token, exatamente como fizemos no Passo 20

Uma observação muito importante aqui é que quando você precisar desenvolver sua aplicação para valer, o valor informado aqui no Authorization expira a cada 12 horas, pois isto é um token de autorização. Sendo assim, é 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.

Entretanto, vimos hoje qual o serviço que realiza a geração desse token. Logo, um Ajax bobo resolve esse problema.

Nesse momento um ponto muito importante: quando escolhemos a imagem, a aplicação irá realizar uma chamada Ajax para a instância que subimos do nosso serviço. Como estamos realizando esta chamada de um domínio http://localhost:3000, teremos um problema de CORS. Isso é facilmente contornado utilizando uma extensão no seu navegador como a seguinte:

Não conhece sobre o assunto? Você pode entender muito melhor aqui:

Com a extensão de CORS ativa, o serviço deverá ser consumido sem maiores problemas.
E aqui, finalmente, o resultado. Temos uma precisão assumida pelo nosso modelo de que existe 85.1% de chance da imagem que subimos ser referente ao logo do NodeJS
No botão JSON é possível obter maiores detalhes do retorno do serviço (exatamente como havíamos visto utilizando o Postman)

Conclusão

Hoje vimos que não é necessário ser um expert para conseguir utilizar o treinamento de um algoritmo. Em apenas alguns passos, fomos capazes de realizar:

  • MLF;
  • Preparação e armazenamento do dataset para o treinamento;
  • Treinamento do modelo;
  • Deploy do modelo;
  • Executar o serviço de classificação.

Tudo isso seguindo os seguintes passos:

  • Login no SAP CF usando o CF CLI;
  • Deploy da aplicação usando o SAP Cloud Foundry;
  • Criação de uma Instância de Serviço e uma Chave de Serviço no Cockpit do SCP;
  • Carga do dataset para treinamento;
  • Treinamento do modelo;
  • Deploy do modelo treinado usando APIs;
  • Teste do modelo treinado usando o Postman;
  • Uso do modelo treinado para inferência (com o aplicativo SAPUI5 preparado).

Então, para que realmente todo este passo a passo fixe (e para que você entenda tudo o que aconteceu), aconselho que você melhore o modelo, aumentando, assim, a precisão do algoritmo.

A aplicação de técnicas como a que vimos aqui hoje são muito interessantes para cenários como:

  • Reconhecimento de produtos — Imagine a possibilidade de acelerar o processo junto ao consumidor ou no seu time com o reconhecimento de produtos baseado em fotos. Seja para a abertura de uma ordem de compra ou uma ordem de reparo sem a necessidade de preenchimento de documentos pelos colaboradores ou o cliente, isso pois uma vez identificado a peça ou o produto, uma aplicação é capaz de providenciar o preenchimento da ordem de forma automática;
  • Reconhecimento de equipamentos de segurança — Com uma imagem é possível indicar se um colaborador está (ou não) utilizando algum item obrigatório de segurança;
  • Varejo — Aqui as possibilidades são incríveis, pois imagine acompanhar em tempo real prateleiras — seja para organização ou para traçar perfis das pessoas que estão consumindo um produto e, até mesmo, identificação de filas;
  • Leitura de textos — OCR sem dúvida é um uso certo para diversos cenários, seja para extração de textos de documentos, etiquetas, traduções e etc…

É muito bom poder ser capaz de soltar um post desse tipo por semana, mas melhor ainda é ter amigos que te dão apoio e te ajudam. Nesta semana a aplicação foi feita pelo Victor Kawabata, que é a pessoa que mais trabalha nos bastidores aqui do Bar8 revisando todos os meus textos. Então, quero agradecer não apenas por esse post, mas por todos os outros em que ele me deu apoio, muito obrigado pela força Pacato!

Esse é o sentimento quando se tem amigos assim!

--

--

Editor for

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