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('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!

Nenhum comentário:

Postar um comentário