Você está na página 1de 7

Sistema inteligente de classificação de geometrias

Pedro H. C. Pennachi1 , Flavio A. da Silva1 , Willian Cortez1


1
Universidade Federal do ABC (UFABC)
CEP 09210-580 – Santo André – SP – Brasil
pedro.pennachi@aluno.ufabc.edu.br

1. Introdução
O projeto consiste em utilizar a linguagem Python para treinar um sistema inteligente,
com o intuito dele reconhecer e classificar corretamente uma forma geométrica, para pos-
teriormente ser utilizado em uma integração com um braço robótico.

2. Dataset
Para a realização desse projeto, foi utilizado um dataset, disponibilizado no Kaggle [3],
contendo 16.000 imagens de formas geométricas das seguintes classes: quadrado, cı́rculo,
triangulo e estrela. O conjunto de imagens de estrelas foi descartado, visto que em nossa
aplicação final, dificilmente encontrará recipientes com o formato estrelar.
O dataset é dividido igualmente entre os conjuntos, quadrado: 3765; triângulos:
3720; cı́rculos: 3720. Totalizando, 11.205 imagens que estão aptas para o sistema. Es-
sas imagens estão no formato PNG e possuem dimensões de 200x200. As geometrias
encontradas na figura 1 são exemplos do que é encontrado no dataset.

Figura 1. Figuras do dataset


3. Metodologia
O primeiro passo consiste em importar as bibliotecas necessárias, cujas são:
• Open CV [1]
• Glob [2]
• NumPy [6]
• Matplotlib → Pyplot [4]
• Sklearn: [5]
– Decomposition → PCA
– Model Selection → train test split
– Discriminant Analysis → Linear Discriminant Analysis
– SVM → LinearSVC
– Neural Network → MLPClassifier
– Metrics → Accuracy Score, Confusion Matrix
Em seguida foram declarados dois vetores, que tem como função carregar as
informações provenientes do dataset - (X data e Y data), e uma variável para contar quan-
tas imagens estão sendo carregadas - (qtd imagem). O carregamento das imagens para
cada um dos conjuntos é feito utilizando o opencv [1].
Devido ao tamanho das imagens, foi necessário fazer um reshape a cada imagem
ser carregada, passando do tamanho de 200x200 para um tamanho de 28x28, esse proce-
dimento também foi realizado com um comando da biblioteca do opencv[1]. Para poder
utilizar as métricas de análise, tem-se que converter os vetores contendo o dataset[3], para
numpy[6].
Em seguida, faz a declaração de um vetor chamado eficiência, que guardará os
valores de acurácia para cada um dos classificadores utilizados[5], ou seja, ele serve para
descobrir-se o número de componentes que maximizará a aplicação. Foi realizado um
novo reshape do vetor numpy[6], no qual possui três dimensões, para um novo vetor com
duas dimensões.
Após isso, o programa entra em um laço, com o valor máximo de duzentos, com o
objetivo de garantir que o número de componentes para a maximização seja encontrado,
e nesse laço o programa realiza o processo do PCA, que é a redução de dimensionali-
dade. Em sequência é realizada a divisão entre a base de dados e base de teste, com o
comando train test split, que utiliza como parâmetro o resultado obtido no PCA. Enfim,
o programa está apto para rodar qualquer um dos classificadores disponı́veis, nesse pro-
jeto, utilizando os classificadores LDA[5], SVM[5] e ANN[5], que irá retornar valores
de acurácia máxima, minı́ma, média e informar o número de componentes para onde foi
obtida essa maximização e também irá plotar um gráfico da acurácia x número de com-
ponentes.
Após a obtenção do número máximo de componentes, foi criado um novo clas-
sificador otimizado para os três classificadores previamente utilizados, e obtém-se como
retorno um valor de acurácia e também a matriz de confusão, que permite ver os acertos
e os erros do classificador.
Por fim, é realizado um teste nos três classificadores ótimos, que consiste em
pegar uma imagem - (figura 2), e realizar o procedimento para ver se o resultado obtido é
consistente com a realidade, ou seja, se os valores de acurácia estão realmente condizentes
com a realidade.
Figura 2. Figuras do test

4. Resultados
4.1. Classificador LDA
Os resultados obtidos para o classificador LDA foram os seguintes:
• Acurácia máxima: 0.998
• Acurácia mı́nima: 0.817
• Acurácia Média: 0.987
• Número de componentes: 151

Figura 3. Acurácia x Número de Componentes

• Acurácia após a maximização: 0.992

 
915 21 0
M atrizConf usão =  0 937 0 


0 0 929
4.2. Classificador SVM
Os resultados obtidos para o classificador SVM foram os seguintes:
• Acurácia máxima: 0.996
• Acurácia mı́nima: 0.488
• Acurácia Média: 0.978
• Número de componentes: 97

Figura 4. Acurácia x Número de Componentes

• Acurácia após a maximização: 0.994


 
933 12 1
M atrizConf usão =  5 883 0 
 

0 0 968
4.3. Classificador ANN
Os resultados obtidos para o classificador ANN foram os seguintes:
• Acurácia máxima: 1.000
• Acurácia mı́nima: 0.769
• Acurácia Média: 0.994
• Número de componentes: 7

Figura 5. Acurácia x Número de Componentes

• Acurácia após a maximização: 0.999


 
902 1 0
M atrizConf usão =  2 940 0 
 

0 0 957
Por fim, temos a comparação entre os classificadores, que através do gráfico da
figura 6, no qual mostra o quão eficiente é o método utilizando ANN, obtendo um ótimo
resultado com poucos componentes, e que linearmente, os outros métodos vão decaindo
tanto em acurácia e número de componentes.

Figura 6. Comparação entre os classificadores

5. Conclusão
Podemos ver pelos resultados obtidos, que todos os classificadores tiveram um desempe-
nho excepcional, sendo o ANN o melhor deles, com um resultado de acurácia máxima
de aproximadamente 0.999. Isso se deve pelo fato de ser uma rede neural que a cada
novo dado, o sistema é alimentado, e aprende. Pode ser ver a eficiência do ANN pelo
número de componentes necessários para chegar a acurácia máxima. Enquanto que os ou-
tros dois classificadores demoraram quase 100 componentes, o ANN chegou em 7 itens.
No entanto, o reconhecimento de geometrias possui uma limitação, em que consiste na
apresentação da geometria, ela deve ser toda escura semelhante ao dataset.
Referências
[1] O. CV. Open cv. https://opencv.org/. Acesso em : 8 Dez 2018.
[2] Glob. Glob. https://docs.python.org/2/library/glob.html.
Acesso em : 8 Dez 2018.
[3] KAGGLE. Four shapes. https://www.kaggle.com/smeschke/
four-shapes. Acesso em : 8 Dez 2018.
[4] matplotlib. matplotlib. https://matplotlib.org/. Acesso em : 8 Dez 2018.
[5] msklearn. msklearn. https://scikit-learn.org/stable/. Acesso em : 8
Dez 2018.
[6] Numpy. Numpy. http://www.numpy.org/. Acesso em : 8 Dez 2018.