Google Vision API

Continuando as postagens relacionadas a machine learning, agora vamos falar sobre a identificação de objetos em fotos. Para tal, vamos utilizar uma API do Google Cloud Plataform: a Cloud Vision API. Diferente do que acontece com o Microsoft Cognitive Services (MCS), onde temos APIs diferentes para cada tipo de objetivo, o Google agrupou tudo em uma única API, permitindo detectar faces (mas não identifica-los), descrever imagens e até mesmo dizer o local onde a foto foi tirada. Na postagem, vamos dar uma visão geral das principais funcionalidades da API.

Assim como acontece no MCS, para utilizar a API é necessário realizar um cadastro e obter uma chave de identificação. O próprio Google fornece um tutorial de como obter essa chave, que você pode encontrar nesse link. Uma desvantagem é que para obter a chave é necessário informar um cartão de crédito, mas não se preocupem, pois o uso dessa API é gratuito para pequenas quantidades de solicitações. Uma das vantagens desta API é que a foto não precisa estar hospedada em nenhum servidor para ser analisada, podendo ser enviada junto com o comando, e outra é que todas análises são solicitadas pelo mesmo comando, tendo que especificar somente qual tipo análise você quer através do parâmetro features. As opções são:

FACE_DETECTION: Para detectar face

LANDMARK_DETECTION: Para identificar estruturas naturais ou arquitetônicas populares

LOGO_DETECTION: Para identificar logos

LABEL_DETECTION: Para descrever elementos/objetos

TEXT_DETECTION: Para leitura de texto ( OCR)

SAFE_SEARCH_DETECTION: Para avaliar o conteúdo da foto (adulto, editado, medicinal e violência)

IMAGE_PROPERTIES: Propriedades da imagem (como cor dominante)

Como exemplo nesta postagem, utilizarei fotos tiradas por mim para garantir que são fotos desconhecidas para o Google. Utilizar a API com o R é bastante simples, e pode ser feito através do comando POST do pacote httr:

key <- "AIzayDbS4EcWFtyEILqcMZ0azY8WZlq7Bo" # Chave de acesso da API
library(httr) # Carrega o pacote httr

resultado <- httr::POST(url = sprintf("https://vision.googleapis.com/v1/images:annotate?key=%s", key),
  httr::content_type('text/csv'),
  body = list(requests = list(
   image = list(content = [imageToText](https://github.com/cloudyr/RoogleVision/blob/master/R/googleVision-LIB.R)('Foto Hamburger.jpg')),
   features = list(type = 'LABEL_DETECTION'))),
  encode = 'json')

O resultado da análise pode ser obtido através do comando content(resultado). Dependendo da análise solicitada, o resultado apresenta um score, que varia de 0 a 1 e que quanto mais próximo de 1, mais ‘certeza’ tem a API do resultado. Abaixo estão alguns exemplos das possibilidade de análises:

LABEL_DETECTION

LANDMARK_DETECTION

TEXT_DETECTION

Além dos dados mostrados, a API também retorna as mesmas informações palavra por palavra.

Conclusões

De modo geral, o resultado obtido foi satisfatório - a API conseguiu descrever bem as duas primeiras fotos e acertou o local das duas seguintes. O OCR deixou a desejar, principalmente na segunda foto testada. Os códigos utilizados podem ser encontrados no meu Github. Dúvidas? Sugestões? Deixe seu comentário!

Bruno Lucian
Bruno Lucian
Cientista de dados

Interesse em Modelagem preditiva, Visualização de dados e Inteligencia artificial

comments powered by Disqus