Inteligencia Artificial

Como fazer predição de imagens com Keras e OpenCV

Fiz diversos testes com o dataset CIFAR-10. Não consegui ótimos resultados, mas consegui acurácia de 70% nas classes de meio de transporte; as demais estão bem precárias, vou fazer mais alguns testes e, se melhorar, coloco outro artigo. Nesse artigo vou compartilhar como fazer predição de imagens com Keras e OpenCV utilizando imagens que baixei através do Google Images.

Classificação de imagens com CIFAR-10

É bem interessante fazer o treinamento, cheguei a um resultado superior a 80% em um dos treinamentos, mas conforme varia (para cima ou para baixo) as predições falham em lugares diferentes; imagens que outrora foram reconhecidas adequadamente, deixam de ser reconhecidas. Por essa razão optei por utilizar um treinamento que fiz com margem de acurácia inferior, mas eficiente para as classes de meios de transporte, batendo  mesmo nos 70%. Claro, utilizei algumas imagens ruins em meio às óbvias e, na classificação de imagens boas, deve chegar a 100% de assertividade.

Se não leu minhas anotações sobre meu aprendizado e aprimoramento, sugiro que comece a partir da configuração do ambiente, descrito nesse artigo.

Por que Keras?

Poderia ter utilizado outra API, mas por acaso escolhi o Keras e acabei gostando bastante. O bom em utilizar algo assim é que além de facilitar a composição dos perceptrons, fica fácil mudar o backend, caso seja necessário migrar para outra plataforma. Antes de experimentar outras opções, vou dedicar por alguns meses um pouco do meu tempo ao aprendizado de deep learning, utilizando o Keras para minhas redes neurais.

Como fazer predição de imagens com Keras e OpenCV?

Essa foi uma dúvida que tive desde o começo. Realmente, não encontrei nada de exemplo, mas acredito que isso aconteceu porque procurei por predição em redes neurais, o que é algo bem isolado. É como pesquisar por “como definir chave primária em banco de dados MySQL”. O banco é uma coisa, o sistema que o utilizará é outra. Da mesma forma a rede neural; não importa a integração que for feita, ela tem um propósito independente da interface que a consultará.

Seu ambiente já está preparado para uma rede neural?

Se você ainda não configurou o ambiente, siga para esse artigo. Reproduzir esse tutorial será algo bem divertido!

Poderia ser uma infelicidade, mas graças a Deus meu sistema deu problema e tive que formatar e reconfigurar tudo. Daí tive a oportunidade de corrigir problemas residuais, além de aumentar minha compreensão no processo de configuração do ambiente. Dessa vez não utilizei docker nem virtualenv, queria ter o quanto antes meu ambiente de estudos de volta.

Por que OpenCV?

Daria para ler a imagem sem utilizar OpenCV. Aliás, assim eu estava fazendo; passava a imagem como argumento do script e fazia um loop no shell, mais ou menos assim:

Testei cada categoria de forma independente justamente buscando pela acurácia de cada uma. Para ver a imagem relacionada, coloquei nesse loop a execução do visualizador de imagens que corresponde ao mime-type da extensão (xdg-open abre automaticamente) e fiz um delay de 5 segundos entre cada execução da rede neural. Mas ai tinha outro problema; não conseguia perceber o quão rápido era o processo entre cada imagem, da abertura até a predição. Daí entrou o OpenCV.

Código completo

O código que utilizei para fazer predição de imagens com Keras e OpenCV é este abaixo. Ainda tem mais coisas a adicionar e outras a modificar, mas já está bom para a brincadeira inicial.

Modo de uso

Crie um diretório com imagens misturadas, pertencentes (ou não) às classes do CIFAR-10. Se desejar, crie diretórios com as classes separadas e faça a predição por classe. Para fazer predição de imagens com Keras e OpenCV utilizando esse script, basta chamar o python seguido do programa e passando o nome do diretório como parâmetro:

Essa linha acima fará apenas a predição do diretório contendo as imagens de avião. As imagens podem ter qualquer nome, isso não importa. Prefira utilizar imagens com extensão .jpg para evitar quaisquer problemas.

Se o script for executado sem parâmetros, um novo treinamento será iniciado. Se esquecer de passar o parâmetro, não se preocupe, pode interromper com Ctrl+C ou com sua IDE de desenvolvimento, porque o model só seria sobrescrito ao final do treinamento.

predição de imagens com Keras e OpenCV

Vídeo

Prometi em um dos artigos anteriores que mostraria a predição de imagens com Keras e OpenCV utilizando o dataset CIFAR-10, mas achei melhor esperar até esse momento, com um programa visualmente mais agradável. O vídeo deverá estar pronto algumas horas após a publicação desse artigo, vale a pena conferir. Faço alguns comentários a respeito das predições no vídeo. Visite (e se inscreva no canal) DobitAoByteBrasil no Youtube. Aproveite para clicar no sininho para receber notificações, assim quando o vídeo estiver publicado, você ficará sabendo logo. não deixe de ver o vídeo, uma parte decepciona e outra, surpreende.

Espero que se divirta como eu estou me divertindo. Até a próxima!

Primeira execução?

Se ainda não teve contato com CIFAR-10, o programa irá baixar o dataset automaticamente. Se quiser saber mais do dataset, visite o site oficial. A compilação levará um tempo, mas em uma próxima execução os pesos serão carregados do computador, pois estou salvando o treinamento ao final da execução do model.