Análise de imagem poderosa com o Google Cloud Vision e Python

Publicados: 2022-03-10
Resumo rápido ↬ As possibilidades de aplicação do serviço Google Cloud Vision são praticamente infinitas. Com a biblioteca Python disponível, ela certamente pode ajudá-lo a despertar um interesse mais profundo nas tecnologias de Machine Learning.

Recentemente, criei um aplicativo da web para gerenciar as despesas pessoais do usuário. Suas principais características são digitalizar recibos de compras e extrair dados para posterior processamento. A API do Google Vision acabou sendo uma ótima ferramenta para obter um texto de uma foto. Neste artigo, vou guiá-lo pelo processo de desenvolvimento com Python em um projeto de amostra.

Se você é um novato, não se preocupe. Você só precisará de um conhecimento muito básico dessa linguagem de programação - sem outras habilidades necessárias.

Vamos começar, vamos?

Nunca ouviu falar do Google Cloud Vision?

É uma API que permite aos desenvolvedores analisar o conteúdo de uma imagem por meio de dados extraídos. Para isso, o Google utiliza modelos de aprendizado de máquina treinados em um grande conjunto de dados de imagens. Tudo isso está disponível com uma única solicitação de API. O mecanismo por trás da API classifica imagens, detecta objetos, rostos de pessoas e reconhece palavras impressas nas imagens.

Para dar um exemplo, vamos trazer o popular Giphy. Eles adotaram a API para extrair dados de legendas de GIFs, o que resultou em uma melhora significativa na experiência do usuário. Outro exemplo é o realtor.com, que usa o OCR da API Vision para extrair texto de imagens de placas de Vende-se tiradas em um aplicativo móvel para fornecer mais detalhes sobre a propriedade.

Aprendizado de máquina em resumo

Vamos começar respondendo à pergunta que muitos de vocês provavelmente já ouviram antes – o que é o Machine Learning?

A ideia geral é desenvolver um modelo programável que encontre padrões nos dados fornecidos. Quanto maior a qualidade dos dados que você fornecer e quanto melhor for o design do modelo que você usar, o resultado mais inteligente será produzido. Com 'aprendizagem de máquina amigável' (como o Google chama seu Machine Learning por meio de serviços de API), você pode incorporar facilmente um pedaço de Inteligência Artificial em seus aplicativos.

Leitura recomendada : Introdução ao aprendizado de máquina

Mais depois do salto! Continue lendo abaixo ↓

Como começar a usar o Google Cloud

Vamos começar com o registro no Google Cloud. O Google exige autenticação, mas é simples e indolor — você só precisará armazenar um arquivo JSON que inclua a chave de API, que pode ser obtida diretamente do Google Cloud Platform.

Baixe o arquivo e adicione seu caminho às variáveis ​​de ambiente:

 export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/apikey.json

Como alternativa, no desenvolvimento, você pode se sustentar com o método from_serivce_account_json() , que descreverei mais adiante neste artigo. Para saber mais sobre autenticação, confira a documentação oficial do Cloud.

O Google fornece um pacote Python para lidar com a API. Vamos adicionar a versão mais recente do google-cloud-vision==0.33 ao seu aplicativo. Hora de codificar!

Como combinar o Google Cloud Vision com Python

Primeiramente, vamos importar classes da biblioteca.

 from google.cloud import vision from google.cloud.vision import types

Quando isso for resolvido, agora você precisará de uma instância de um cliente. Para fazer isso, você usará um recurso de reconhecimento de texto.

 client = vision.ImageAnnotatorClient()

Se você não armazenar suas credenciais em variáveis ​​de ambiente, nesta etapa você poderá adicioná-las diretamente ao cliente.

 client = vision.ImageAnnotatorClient.from_service_account_file( '/path/to/apikey.json' )

Supondo que você armazene imagens para serem processadas em uma pasta 'imagens' dentro do seu catálogo de projetos, vamos abrir uma delas.

Imagem do recibo que pode ser processado pelo Google Cloud Vision
Um exemplo de recibo simples que pode ser processado pelo Google Cloud Vision. (Visualização grande)
 image_to_open = 'images/receipt.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read()

O próximo passo é criar um objeto Vision, que permitirá enviar uma solicitação para prosseguir com o reconhecimento de texto.

 image = vision.types.Image(content=content) text_response = client.text_detection(image=image)

A resposta consiste em palavras detectadas armazenadas como chaves de descrição, sua localização na imagem e uma previsão de idioma. Por exemplo, vamos dar uma olhada na primeira palavra:

 [ ... description: "SHOPPING" bounding_poly { vertices { x: 1327 y: 1513 } vertices { x: 1789 y: 1345 } vertices { x: 1821 y: 1432 } vertices { x: 1359 y: 1600 } } ... ]

Como você pode ver, para filtrar apenas texto, você precisa obter uma descrição “em todos os elementos”. Felizmente, com a ajuda vem a poderosa compreensão de lista do Python.

 texts = [text.description for text in text_response.text_annotations] ['SHOPPING STORE\nREG 12-21\n03:22 PM\nCLERK 2\n618\n1 MISC\n1 STUFF\n$0.49\n$7.99\n$8.48\n$0.74\nSUBTOTAL\nTAX\nTOTAL\nCASH\n6\n$9. 22\n$10.00\nCHANGE\n$0.78\nNO REFUNDS\nNO EXCHANGES\nNO RETURNS\n', 'SHOPPING', 'STORE', 'REG', '12-21', '03:22', 'PM', 'CLERK', '2', '618', '1', 'MISC', '1', 'STUFF', '$0.49', '$7.99', '$8.48', '$0.74', 'SUBTOTAL', 'TAX', 'TOTAL', 'CASH', '6', '$9.', '22', '$10.00', 'CHANGE', '$0.78', 'NO', 'REFUNDS', 'NO', 'EXCHANGES', 'NO', 'RETURNS']

Se você olhar com atenção, poderá notar que o primeiro elemento da lista contém todo o texto detectado na imagem armazenada como uma string, enquanto os demais são palavras separadas. Vamos imprimir.

 print(texts[0]) SHOPPING STORE REG 12-21 03:22 PM CLERK 2 618 1 MISC 1 STUFF $0.49 $7.99 $8.48 $0.74 SUBTOTAL TAX TOTAL CASH 6 $9. 22 $10.00 CHANGE $0.78 NO REFUNDS NO EXCHANGES NO RETURNS

Bem preciso, certo? E obviamente bastante útil, então vamos jogar mais.

O que você pode obter do Google Cloud Vision?

Como mencionei acima, o Google Cloud Vision não se trata apenas de reconhecer texto, mas também permite descobrir rostos, pontos de referência, propriedades de imagem e conexões da Web. Com isso em mente, vamos descobrir o que ele pode dizer sobre as associações da imagem na web.

 web_response = client.web_detection(image=image)

Ok Google, você realmente sabe o que é mostrado na imagem que recebeu?

 web_content = web_response.web_detection web_content.best_guess_labels >>> [label: "Receipt"]

Bom trabalho, Google! É um recibo mesmo. Mas vamos fazer um pouco mais de exercício – você consegue ver mais alguma coisa? Que tal mais previsões expressas em porcentagem?

 predictions = [ (entity.description, '{:.2%}'.format(entity.score))) for entity in web_content.web_entities ] >>> [('Receipt', '70.26%'), ('Product design', '64.24%'), ('Money', '56.54%'), ('Shopping', '55.86%'), ('Design', '54.62%'), ('Brand', '54.01%'), ('Font', '53.20%'), ('Product', '51.55%'), ('Image', '38.82%')]

Muitos insights valiosos, muito bem, meu amigo todo-poderoso! Você também pode descobrir de onde vem a imagem e se ela tem cópias?

 web_content.full_matching_images >>> [ url: "https://www.rcapitalassociates.com/wp-content/uploads/2018/03/receipts.jpg", url:"https://media.istockphoto.com/photos/shopping-receipt-picture-id901964616?k=6&m=901964616&s=612x612&w=0&h=RmFpYy9uDazil1H9aXkkrAOlCb0lQ-bHaFpdpl76o9A=", url: "https://www.pakstat.com.au/site/assets/files/1172/shutterstock_573065707.500x500.jpg" ]

Estou impressionado. Obrigado, Google! Mas um não é suficiente, você pode me dar três exemplos de imagens semelhantes?

 web_content.visually_similar_images[:3] >>>[ url: "https://thumbs.dreamstime.com/z/shopping-receipt-paper-sales-isolated-white-background-85651861.jpg", url: "https://thumbs.dreamstime.com/b/grocery-receipt-23403878.jpg", url:"https://image.shutterstock.com/image-photo/closeup-grocery-shopping-receipt-260nw-95237158.jpg" ]

Doce! Bem feito.

Existe realmente uma inteligência artificial no Google Cloud Vision?

Como você pode ver na imagem abaixo, lidar com recibos pode ser um pouco emocional.

Homem gritando e parecendo estressado enquanto segura um recibo longo
Um exemplo de estresse que você pode experimentar ao receber um recibo. (Visualização grande)

Vamos dar uma olhada no que a API Vision pode dizer sobre esta foto.

 image_to_open = 'images/face.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read() image = vision.types.Image(content=content) face_response = client.face_detection(image=image) face_content = face_response.face_annotations face_content[0].detection_confidence >>> 0.5153166651725769

Nada mal, o algoritmo tem mais de 50% de certeza de que há um rosto na imagem. Mas você pode aprender alguma coisa sobre as emoções por trás disso?

 face_content[0] >>> [ ... joy_likelihood: VERY_UNLIKELY sorrow_likelihood: VERY_UNLIKELY anger_likelihood: UNLIKELY surprise_likelihood: POSSIBLE under_exposed_likelihood: VERY_UNLIKELY blurred_likelihood: VERY_UNLIKELY headwear_likelihood: VERY_UNLIKELY ... ]

Surpreendentemente, com um simples comando, você pode verificar a probabilidade de algumas emoções básicas, bem como chapéus ou propriedades da foto.

Quando se trata da detecção de rostos, preciso direcionar sua atenção para alguns dos possíveis problemas que você pode encontrar. Você precisa se lembrar de que está entregando uma foto para uma máquina e, embora a API do Google utilize modelos treinados em grandes conjuntos de dados, é possível que ela retorne alguns resultados inesperados e enganosos. Online, você pode encontrar fotos que mostram como a inteligência artificial pode ser facilmente enganada quando se trata de análise de imagens. Alguns deles podem ser engraçados, mas há uma linha tênue entre erros inocentes e ofensivos, especialmente quando um erro diz respeito a um rosto humano.

Sem dúvida, o Google Cloud Vision é uma ferramenta robusta. Além disso, é divertido trabalhar com ele. A arquitetura REST da API e o pacote Python amplamente disponível o tornam ainda mais acessível para todos, independentemente de quão avançado você seja no desenvolvimento do Python. Imagine o quão significativamente você pode melhorar seu aplicativo utilizando seus recursos!

Leitura recomendada : Aplicações de aprendizado de máquina para designers

Como você pode ampliar seu conhecimento sobre o Google Cloud Vision

O escopo de possibilidades de aplicação do serviço Google Cloud Vision é praticamente infinito. Com a biblioteca Python disponível, você pode utilizá-la em qualquer projeto baseado na linguagem, seja uma aplicação web ou um projeto científico. Certamente pode ajudá-lo a despertar um interesse mais profundo nas tecnologias de Machine Learning.

A documentação do Google fornece algumas ótimas ideias sobre como aplicar os recursos da API Vision na prática, além de oferecer a possibilidade de aprender mais sobre o Machine Learning. Eu recomendo especialmente verificar o guia sobre como criar um aplicativo de pesquisa avançada de imagens.

Pode-se dizer que o que você viu neste artigo é como mágica. Afinal, quem imaginaria que uma API simples e de fácil acesso é apoiada por uma ferramenta científica tão poderosa? Tudo o que resta a fazer é escrever algumas linhas de código, descontrair sua imaginação e experimentar o potencial ilimitado da análise de imagens.