Reconhecimento de Placas de Sinalização Via Processamento Digital de Imagem e Aprendizado de Máquina
- Aluno: Mathias Silva da Rosa
- Orientador: Diego da Silva de Medeiros
Revisão bibliográfica
Sistemas diversos
Mammeri - Traffic Signs Localisation and Recognition Using A Client-Server Architecture
- Usa um sistema centralizado, semelhante ao GPS
Trabalhos em português/Trabalhos brasileiros
Rodrigues - Localização e Reconhecimento de Placas de Sinalização Utilizando um Mecanismo de Atenção Visual e Redes Neurais Artificiais
Anotações do trabalho | ||||||
---|---|---|---|---|---|---|
O trabalho proposto apresenta uma arquitetura híbrida, que é formada por um mecanismo de atenção visual e uma rede neural, para localizar e reconhecer placas de sinalização. Sendo assim, esta arquitetura é divida em dois módulo: Um módulo para detecção e um para o reconhecimento. A figura 1 abaixo apresenta o fluxograma desta arquitetura.
|
Poffo - Visual Autonomy - Protótipo para reconhecimento de placas de trânsito
Anotações do trabalho |
---|
Silva - Uma Metodologia para Detectar e Reconhecer Placas de Sinalização de Trânsito
Anotações do trabalho |
---|
Gomes - Embedded real-time speed limit sign recognition using image processing and machine learning techniques
Anotações do trabalho | ||||
---|---|---|---|---|
O seguinte trabalho propõe a detecção e reconhecimento, em tempo real, de placas de sinalização de velocidade através de uma aplicação android utilizando técnicas de processamento de imagem para as etapas de detecção e reconhecimento. Para a etapa de detecção foi utilizado uma cascata de classificadores boosted baseados em características Haar-like.
|
Via processamento de imagens
Gao - Traffic signs recognition based on PCA-SIFT
- Traz um apanhado geral sobre vários tipos de técnicas. Usa pré-processamento, SIFT (Scale-Invariant Feature Transform e SVM(Support Vector Machine)
Anotações do artigo | ||||||||
---|---|---|---|---|---|---|---|---|
O seguinte trabalho propõe um sistema de detecção e reconhecimento de placas de sinalização de trânsito, dando foco na extração das características das regiões de interesse, especialmente na otimização desta etapa utilizando o algoritmo Scale-Invariant Feature Transform (SIFT) em conjunto com o procedimento de análise de componentes principais (Principal Component Analysis - PCA). Na etapa de classificação é utilizada a técnica de Máquinas de Vetores de Suporte (SVM).
|
Wahyono - A comparative study of classification methods for traffic signs recognition
- Compara diversos métodos: Redes Neurais artificiais (ANN), Vizinhos k-Próximos (kNN), SVM, Random Forest (RF) e HOG (Histogram of Oriented Gradients)
Anotações do artigo | ||||||||
---|---|---|---|---|---|---|---|---|
A proposta do trabalho é apresentar um sistema para detecção e reconhecimento para placas de sinalização de trânsito dando foco na comparação entre as principais técnicas de classificação utilizadas nos trabalhos anteriores. O sistema é particionado em três principais estágios: segmentação da região de interesse utilizando características de cor (saturação e matiz), análise do formato da placa (círculo, retângulo ou triângulo) e classificação através de diversas técnicas. Rede neural artificial (ANN), K-Vizinhos Mais Próximos (K-Nearest Neighbor - KNN), Máquina de vetores de suporte (Support Vectores Machine - SVM) e Random Forest (RF).
|
Jang - Data debiased traffic sign recognition using MSERs and CNN
- Usa componentes de cor
Anotações do artigo | ||
---|---|---|
O seguinte trabalho propõe um algo para detecção e reconhecimento de placas de sinalização que é apresentado pelo diagrama da figura 1 abaixo: Durante a etapa de detecção, as imagens contendo possíveis placas de sinalização são preprocessadas descantando as regiões que possuem cores vermelhas e azuis, que são características das placas. Após o preprocessamento, as regiões que possuem as placas são segmentadas através da técnica denominada Maximally Stable Extremal Regions(MSER) em conjunto com filtros de imagem. Na etapa de detecção do formato da placa (triangular, circular e retangular), é utilizado o classificador Bayesian treinado com as características
|
Romdhane - An improved traffic signs recognition and tracking method for driver assistance system
- Usa segmentação via cor e HOG (Histogram of Oriented Gradients)
Anotações do artigo | ||||||
---|---|---|---|---|---|---|
Este trabalho propõe um algoritmo para detecção e reconhecimento de placas de sinalização de trânsito dividido principalmente em quatro etapas: segmentação da imagem para detectar a região da placa utilizando técnicas baseadas em cor, descrição utilizando descritores HOG, classificação utilizando SVM e o rastreamento da placa baseado no fluxo óptico. A figura 1 apresenta o fluxo do algoritmo proposto.
|
Romdhane - Combined 2d/3d traffic signs recognition and distance estimation
- Usa uma estrutura parecida, porém acrescenta o SVM
Anotações do artigo |
---|
Inclua aqui suas anotações |
Feng - Ground traffic signs recognition based on Zernike moments and SVM
- Usa os Momentos de Zernike e SVM
Anotações do artigo |
---|
Inclua aqui suas anotações |
Elotmani - A light traffic signs recognition system
- Usa detecção de cores e Projeção de Perfil
Anotações do artigo |
---|
Inclua aqui suas anotações |
Wang - Traffic-signs recognition system based on multi-features
- Usa um método de segmentação FCM (Fuzzy c-Means) e classificação CBIR (Content-Based Image Retrieval)
Anotações do artigo |
---|
Inclua aqui suas anotações |
Mariut - Detection and recognition of traffic signs using Gabor filters
- Usa espaço de cores HSV (matiz, saturação e valor), classificação por correlação e reconhecimento via distância euclidiana e filtro de Gabor
Anotações do artigo | ||||||||
---|---|---|---|---|---|---|---|---|
O objetivo do presente trabalho é apresentar um novo algoritmo para detecção, classificação e reconhecimento de placas de sinalização baseado no sistema de cores HSV(Hue, Saturation, Value) para a etapa de detecção e na correlação com um banco de placas existente para a etapa de classificação. Seguindo as etapas mencionadas, um vetor de características é formado através de filtros de Gabor que facilita o reconhecimento das placas usando a distância mínima, da qual é baseado na distância Euclidiana entre os vetores de características. A figura 1 abaixo apresenta o fluxograma do algoritmo dividido em três subsistemas: detecção, classificação e reconhecimento.
|
Chen - A Robust Traffic Sign Recognition System for Intelligent Vehicles
- Classificação via Filtro Vetorial Simples, Transformada Hough e Curve Fitting, e classificação via Momentos Pseudo-Zernike
Anotações do artigo | ||||
---|---|---|---|---|
O presente trabalho propõe o desenvolvimento de um sistema de reconhecimento de placas de sinalização de trânsito baseado no uso das propriedades de cor e forma na etapa de detecção, no uso dos momentos Pseudo-Zernike para a etapa de classificação e, por fim, no uso de Máquinas de Vetores de Suporte(SVM) para o reconhecimento final das placas. O algoritmo proposto foi aplicado em 26 classes de placas de sinalização do sistema de sinalização de trânsito chinês, como é apresentado pela figura 1 abaixo:
|
Lin - A Traffic Sign Recognition Method Based on Deep Visual Feature
- Filtro Bilateral, Detector de Bordas Canny, Rede Neural Convolucional(CNN) e Máquina de Vetores de Suporte (SVM)
Anotações do artigo |
---|
Greenhalgh - Real-Time Detection and Recognition of Road Traffic Signs
- Maximally Stable Extremal Regions (MSER), Histograma de Gradientes Orientados (HOG) e Cascata de SVMs.
Anotações do artigo |
---|
Análise dos Trabalhos
Trabalho | Ano | Extração da Região de Interesse | Classificação | Reconhecimento |
---|---|---|---|---|
Gao | 2014 | N/A | Scale-Invariant Feature Transform (SIFT)+ Análise dos Componentes Principais (PCA) | Máquina de Vetores de Suporte(SVM) |
Wahyono | 2014 | Segmentação das Cores (Binarização de Matiz e Saturação) + Classificação da Forma(Centroid-Based Graph) | Histograma de Gradientes Orientados(HOG) |
Rede Neural Artificial(ANN) K-Vizinhos mais Próximos Máquina de Vetores de Suporte(SVM) Random Forest(RF) |
Jang | 2016 | Normalização das Cores Vermelhas e Azul + Maximally stable extremal regions (MSER) | Bayesian com vetor Distance to Border(DtB) | Rede Neural Convolucional |
Mariut | 2011 | Plano HSV + Binarização de Matiz e Saturação + Size Filter | Correlação com Banco de Imagens | Banco de Filtros de Gabor + Banco de Imagens |
Chen | 2011 | Filtro Simples de Vetores(Segmentação de Cores) |
Transformada de Hough Interpolação Bicúbica Pseudo-Momentos de Zernike | Máquina de Vetores de Suporte(SVM) |
Lin | 2016 | Filtro Bilateral + Detector de Bordas Canny | Rede Neural Convolucional(CNN) | Máquina de Vetores de Suporte(SVM) |
Greenhalgh | 2012 | Maximally Stable Extremal Regions (MSER) | Histograma de Gradientes Orientados (HOG) | Cascata de SVMs |
Legenda:
Complexidade Baixa
Complexidade Média
Complexidade Alta
Trabalho | Extração da Região de Interesse | Classificação | Reconhecimento |
---|---|---|---|
1 | Maximally Stable Extremal Regions (MSER) | Rede Neural Convolucional(CNN) | Cascata de Máquina de Vetores de Suporte(SVM) |
2 | Pirâmide Gaussiana + Transformada Hough | Histograma de Gradientes Orientados(HOG) | Rede Neural Convolucional |
3 | Plano HSV + Binarização | Histograma de Gradientes Orientados(HOG) | Cascata de Máquina de Vetores de Suporte(SVM) |
Estudo das Técnicas
Histograma de Gradientes Orientados (HOG)
Conceitos | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Para o total entendimento do HOG é necessário introduzir alguns conceitos importantes, como os descritos abaixo:
|
Matlab |
---|
Objetivo: extrair o histrograma de gradientes orientados de uma imagem e estudar o procedimento. x = imread('imagem1.jpeg'); figure(1); imshow(x); %% Binarização da imagem x = x(:,:,1) >= 175; figure(2); imshow(x); %% Extração HOG's [featureVector,hogVisualization] = extractHOGFeatures(x); figure(3); subplot(1,2,1); imshow(x); subplot(1,2,2); plot(hogVisualization); |
Máquina de Vetores de Suporte (SVM)
A Máquina de Vetores de Suporte (do inglês, Support Vector Machine) é um método de aprendizado supervisionado de máquina para classificação de padrões baseada na teoria de aprendizado estatístico criada por (Vapnik, 1998). As SVM's se tornaram famosas nas últimas décadas por possuírem performance comparável e muitas vezes superior às obtidas por outros algoritmos de aprendizagem como as Redes Neurais Artificiais (RNA's), sendo utilizado em diversas aplicações do mundo real, como categorização de texto, reconhecimento de escrita, classificação de imagens, análise de biosequências, etc [7].
Para o total entendimento deste método é importante conhecer os principais conceitos relacionados à SVM, como aprendizado supervisionado e não-supervisionado, hiperplano, vetores de suporte, etc; e que serão apresentados a seguir.
Aprendizado de Máquina |
---|
Aprendizado de Máquina é um área da IA (Inteligência Artificial) que busca o desenvolvimento de técnicas computacionais que realizam o aprendizado bem como a concepção de sistemas capazes de adquirir conhecimento de forma automática. Um sistema deste tipo é um programa computacional que toma decisões baseado e experiências acumuladas através da resolução bem sucedida de problemas anteriores. Cada sistema deste tipo é diferenciado através de suas características como linguagem de descrição, modo, paradigma e forma de aprendizado utilizado [8]. |
Aprendizado Supervisionado e Não-Supervisionado |
---|
Vetores de Suporte |
---|
OpenCV
OpenCV é um biblioteca implementada para aplicações no campo de Aprendizado de Máquina e Visão Computacional. Desenvolvida seguindo o modelo de software livre (BSD licensed), o OpenCV provê 25000 algoritmos otimizados, dos quais incluem um amplo conjunto de classes e algoritmos capazes de reconhecer faces, identificar objetos, classificar ações em um vídeo, localizar movimentos, etc. OpenCV é utilizada extensivamente por empresas e instituições de pesquisa como Google, Yahoo, Microsoft, Intel, IBM, dos quais também participaram do desenvolvimento desta biblioteca. Uma das características essenciais é o suporte às linguagens C++, C, Python, Java e Matlab, além de possuir combatibilidade com sistemas Windows, Linux, Android e Mac OS[9].
Instalação |
---|
Os passos seguintes para a instalação do OpenCV 3.0 foram realizados no sistemas operacional Ubunto 14.04 e utilizando a Python 3.4+. Todos os passos foram feitos baseados em[10] Passo 1 - Instalação dos Pré-requisitos Baixar informações e atualizar pacotes já instalados $ sudo apt-get update $ sudo apt-get upgrade Instalação de ferramentas de compilação do OpenCV 3.0 $ sudo apt-get install build-essential cmake git pkg-config Instalação de bibliotecas e pacotes para leitura de imagens $ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev Instalação de bibliotecas e pacotes para leitura de vídeos $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev Instalação do GTK para uso das interfaces de usuário do OpenCV $ sudo apt-get install libgtk2.0-dev Instalação de pacotes utilizados para otimizar funções dentro do OpenCV sudo apt-get install libatlas-base-dev gfortran Passo 2 - Configurando Pyhton (Parte 1) Instalação do pip, um gerenciador de pacotes para o Python. Note que é necessário o python3 instalado corretamente no sistema. Caso você não forneça o python3, o pip será instalado para o Python 2.7, do qual não é a nossa intenção. $ wget https://bootstrap.pypa.io/get-pip.py $ sudo python3 get-pip.py Para o desenvolvimento em Python é uma boa prática trabalhar em um ambiente de desenvolvimento virtual. Para isso, utilizaremos os pacotes virtualenv e virtualenvwrapper que permitem criar um ambiente totalmente separado e independente. Utiize o pip3 para a instalação destes pacotes: $ sudo pip3 install virtualenv virtualenvwrapper Configurando os caminhos para nosso ambiente virtual. Dentro da pasta $HOME, edite o arquivo .bashrc, adicionando as seguintes linhas: export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 export WORKON_HOME=$HOME/.virtualenvs Atualizando o bashrc $ source /usr/local/bin/virtualenvwrapper.sh $ source ~/.bashrc Criação do ambiente virtual. Para os próximos passos é importante que se esteja nesse ambiente virtual. $ mkvirtualenv cv Passo 2 - Configurando Pyhton (Parte 2) Instalação dos cabeçalhos e arquivos de desenvolvimento para o Python 3.4+ $ sudo apt-get install python3.4-dev O OpenCV representa as imagens através do NumPy. Instalação do NumPy no ambiente virtual cv. $ pip install numpy Passo 3 - Compilação e Instalação do OpenCV 3.0 Download dos arquivos $ cd ~ $ git clone https://github.com/Itseez/opencv.git $ cd opencv $ git checkout 3.0.0 $ cd ~ $ git clone https://github.com/Itseez/opencv_contrib.git $ cd opencv_contrib $ git checkout 3.0.0 Obs: A versão dos arquivos 3.0.0 pode ser alterada para a última para as mais recentes [11]. É importante que as versões do opencv e do opencvcontrib sejam as mesmas. Compilação $ cd ~/opencv $ mkdir build $ cd build $ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D BUILD_EXAMPLES=ON \ -D INSTALL_C_EXAMPLES=OFF \ -D BUILD_opencv_xfeatures2d=OFF .. $ make -j4 Obs: onde 4 é o número de cores disponíveis em seu processador. Instalação do OpenCV $ sudo make install $ sudo ldconfig Passo 4 - Links para OpenCV 3.0 Caso tenha alcançado esta etapa sem erros, o OpenCV 3.0 deve estar instalado em /usr/local/lib/python3.4/site-packages/. Entretanto, para realizar o seu uso dentro de nosso ambiente virtual, é necessário criar um link para o OpenCV. Para isso execute: $ cd ~/.virtualenvs/cv/lib/python3.4/site-packages/ $ ln -s /usr/local/lib/python3.4/site-packages/cv2.cpython-34m.so cv2.so Passo 5 - Teste O OpenCV foi instalado com sucesso! Para confirmar se a instalação está funcionando realize os seguintes passos: $ source /usr/local/bin/virtualenvwrapper.sh $ workon cv $ python >>> import cv2 >>> cv2.__version__ A resposta do último comando deve retornar a versão da biblioteca OpenCV que instalamos neste tutorial, conforme imagem abaixo: |
Referências
- ↑ 1,0 1,1 COUTINHO, D.P.; MARROQUIM R. SIFT - Scale Invariant Feature Transform. LCG Computer Graphics Lab, Universidade Federal do Rio de Janeiro, 2013
- ↑ 2,0 2,1 2,2 BELO, F. A. Desenvolvimento de Algoritmos de Exploração e Mapeamento Visual para Robôs Móveis de Baixo Custo. Diss. PUC-Rio, 2006.
- ↑ VARELLA, C. A. Análise de componentes principais. Universidade Federal Rural do Rio de Janeiro, Seropédica, 2008
- ↑ 4,0 4,1 4,2 4,3 GONZALEZ, Rafael C.; WOODS, Richard C. Processamento digital de imagens, Tradução: Cristina Yamagami e Leonardo Piamonte. 3ª Edição. São Paulo: Pearson. 2010
- ↑ 5,0 5,1 5,2 MARQUES, Ogé F.; VIEIRA Hugo.Processamento Digital de Imagens. Rio de Janeiro: Brasport. 1999
- ↑ GONZALEZ, Rafael C.; WOODS, Richard E.; EDDINS, Steven L.Digital image processing using MATLAB. 2º Edition. India: McGraw. 2010.
- ↑ LORENA, Ana Carolina; CARVALHO, André. Uma introdução às support vector machines. Revista de Informática Teórica e Aplicada, 2007, 14.2: 43-67.
- ↑ MONARD, Maria Carolina; BARANAUSKAS, José Augusto. Conceitos sobre aprendizado de máquina. Sistemas Inteligentes-Fundamentos e Aplicações, 2003, 1.1.
- ↑ OpenCV. Disponível em [1]. Acessado em 16 de Agosto de 2017
- ↑ ROSEBROCK, Adrian. Install OpenCV 3.0 and Python 3.4+ on Ubuntu. Pyimagesearch. 2015. Disponível em [2]. Acessado em 16 de Agosto de 2017.