Site icon Embarcados – Sua fonte de informações sobre Sistemas Embarcados

Reconhecimento de imagens com IBM Bluemix Visual Recognition

O IBM Bluemix, plataforma de computação em nuvem da IBM, possui um aplicativo chamado Visual Recognition, ou reconhecimento visual, traduzido para português, capaz de reconhecer padrões em imagens. Vamos mostrar neste texto como é simples utilizar o IBM Bluemix via terminal, no linux, para reconhecer padrões em uma imagem, reconhecer pessoas, incluindo seu gênero e idade aproximada, além de detectar palavras em imagens.

Como criar o Aplicativo Visual Recognition no IBM Bluemix

Logado no IBM Bluemix, crie um novo app.

Na barra de procura, procure pelo aplicativo visual recognition.

Selecione o App. Na página relativa ao Visual Recognition, abaixo da precificação, clique em Create.

Clique em Service Credentials. Essa informação será necessária para que possamos acessar o app Visual Recognition via API externa.

Na minha conta havia três credenciais. Selecionei uma deles e verifiquei as informações clicando como o indicado na figura abaixo.

Copie a informação API-KEY. Vamos utiliza-la para o Visual Recognition.

Reconhecimento de Imagens  – Classificação de imagens

Vamos utilizar a imagem abaixo para demonstrar o que a API de Visual Recognition é capaz de reconhecer. Essa imagem pode ser encontrada aqui.

No terminal, no linux, digitei os seguintes comandos:

api_key=e47fc469cac3360c1a9bd52xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
image_url=http://r.ddmcdn.com/s_f/o_1/APL/uploads/2015/07/cecil-AP463227356214-1000x400.jpg
curl -X GET "https://gateway-a.watsonplatform.net/visual-recognition/api/v3/classify?api_key=${api_key}&version=2016-05-20&url=${image_url}"

A api_key que utilizei não foi informada acima por completo porque com essa informação os leitores desse site poderiam utilizar a minha conta do Bluemix e isso não seria legal.

Veja a resposta desse comando:

{
    "custom_classes": 0,
    "images": [
        {
            "classifiers": [
                {
                    "classes": [
                        {
                            "class": "lion",
                            "score": 0.927,
                            "type_hierarchy": "/animal/mammal/carnivore/feline/big cat/lion"
                        },
                        {
                            "class": "big cat",
                            "score": 0.94
                        },
                        {
                            "class": "feline",
                            "score": 0.943
                        },
                        {
                            "class": "carnivore",
                            "score": 0.945
                        },
                        {
                            "class": "mammal",
                            "score": 0.952
                        },
                        {
                            "class": "animal",
                            "score": 0.968
                        },
                        {
                            "class": "predator",
                            "score": 0.53,
                            "type_hierarchy": "/animal/predator"
                        },
                        {
                            "class": "light brown color",
                            "score": 0.844
                        },
                        {
                            "class": "pale yellow color",
                            "score": 0.729
                        }
                    ],
                    "classifier_id": "default",
                    "name": "default"
                }
            ],
            "resolved_url": "http://r.ddmcdn.com/s_f/o_1/APL/uploads/2015/07/cecil-AP463227356214-1000x400.jpg",
            "source_url": "http://r.ddmcdn.com/s_f/o_1/APL/uploads/2015/07/cecil-AP463227356214-1000x400.jpg"
        }
    ],
    "images_processed": 1
}


Traduzindo as informações:

1 imagem foi processada.

92,7% de certeza que é um leão.
94,0% de certeza que é um grande gato
94,3% de certeza que é um felino
94,5% de certeza que é um carnivoro
95,2% de certeza que é um mamifero
96,8% de certeza que é um animal
53,0% de certeza que é um predador
84,4% de certeza que tem uma cor marrom clara
72,9% de certeza que tem uma cor amarela clara

Reconhecimento de imagens – Detecção de faces

Utilizamos a imagem do ex-presidente dos Estados Unidos, Barack Obama disponível neste link para testar a detecção de faces.

Utilizamos os seguintes comandos:

api_key=e47fc469cac3360c1a9bd52xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
image_url=http://hypescience.com/wp-content/uploads/2016/07/obama.jpg
curl -X GET "https://gateway-a.watsonplatform.net/visual-recognition/api/v3/detect_faces?api_key=${api_key}&version=2016-05-20&url=${image_url}" 

A resposta para esses comandos foi o seguinte:

{
    "images": [
        {
            "faces": [
                {
                    "age": {
                        "max": 54,
                        "min": 45,
                        "score": 0.401471
                    },
                    "face_location": {
                        "height": 398,
                        "left": 429,
                        "top": 97,
                        "width": 320
                    },
                    "gender": {
                        "gender": "MALE",
                        "score": 0.99593
                    },
                    "identity": {
                        "name": "Barack Obama",
                        "score": 0.989013,
                        "type_hierarchy": "/people/politicians/democrats/barack obama"
                    }
                }
            ],
            "resolved_url": "http://hypescience.com/wp-content/uploads/2016/07/obama.jpg",
            "source_url": "http://hypescience.com/wp-content/uploads/2016/07/obama.jpg"
        }
    ],
    "images_processed": 1
}


Traduzindo as informações:

40,1% de chance de:
Idade máxima 54 anos
Idade minima 45 anos

99,5% de chances de ser homem
98,9% de chances ser Barack Obama”

Reconhecimento de Imagens – Reconhecimento de texto

Vamos agora mostrar como reconhecer textos em uma imagem. Escolhemos para esse teste a seguinte imagem:

Utilizando os comandos a seguir conseguiremos identificar as palavras presentes na imagem.

image_url=https://i.ytimg.com/vi/yL2GRQDR1cQ/hqdefault.jpg
api_key=e47fc469cac3360c1a9bd521700xxxxxxxxxxx
curl -X GET "https://gateway-a.watsonplatform.net/visual-recognition/api/v3/recognize_text?api_key=${api_key}&version=2016-05-20&url=${image_url}"

Veja o resultado:

{
    "images": [
        {
            "resolved_url": "https://i.ytimg.com/vi/yL2GRQDR1cQ/hqdefault.jpg",
            "source_url": "https://i.ytimg.com/vi/yL2GRQDR1cQ/hqdefault.jpg",
            "text": "and the pain will\nmake\nmake\nyou crazy",
            "words": [
                {
                    "line_number": 0,
                    "location": {
                        "height": 52,
                        "left": 43,
                        "top": 61,
                        "width": 108
                    },
                    "score": 0.7036,
                    "word": "and"
                },
                {
                    "line_number": 0,
                    "location": {
                        "height": 38,
                        "left": 166,
                        "top": 71,
                        "width": 75
                    },
                    "score": 0.8429,
                    "word": "the"
                },
                {
                    "line_number": 0,
                    "location": {
                        "height": 56,
                        "left": 252,
                        "top": 72,
                        "width": 108
                    },
                    "score": 0.5662,
                    "word": "pain"
                },
                {
                    "line_number": 0,
                    "location": {
                        "height": 47,
                        "left": 371,
                        "top": 60,
                        "width": 72
                    },
                    "score": 0.5917,
                    "word": "will"
                },
                {
                    "line_number": 1,
                    "location": {
                        "height": 49,
                        "left": 32,
                        "top": 142,
                        "width": 127
                    },
                    "score": 0.5842,
                    "word": "make"
                },
                {
                    "line_number": 2,
                    "location": {
                        "height": 25,
                        "left": 41,
                        "top": 164,
                        "width": 116
                    },
                    "score": 0.5735,
                    "word": "make"
                },
                {
                    "line_number": 3,
                    "location": {
                        "height": 43,
                        "left": 170,
                        "top": 163,
                        "width": 92
                    },
                    "score": 0.6467,
                    "word": "you"
                },
                {
                    "line_number": 3,
                    "location": {
                        "height": 43,
                        "left": 284,
                        "top": 163,
                        "width": 153
                    },
                    "score": 0.5631,
                    "word": "crazy"
                }
            ]
        }
    ],
    "images_processed": 1
}


Foi localizada cada uma das palavras da frase a seguir, presente na imagem: and the pain will make you crazy. Cada uma das palavras foi detectada em um ponto da imagem, detectada nessa busca feita pelo comando e cada uma delas também foi detectada com determinada porcentagem de acerto.

Resumo – Reconhecimento de Imagens

Não é incrível e simples o que fizemos? Explore esse módulo do Bluemix e ache mais informações no seguinte link. Já testou esse módulo? Deixe seu comentário abaixo.

Esse texto teve a colaboração de Jorge Guzman e é resultado de trabalhos realizados no LHC Laboratório Hacker de Campinas.