Neste Webinar será apresentado como é feito o desenvolvimento de uma aplicação de visão computacional para sistemas embarcados partindo do básico até a seleção da região de interesse de uma imagem para input de um sistema de Inteligência Artificial ou Machine Learning.
4. Visão Computacional
• Ciência e Tecnologia de como as máquinas “enxergam”
• Detecção
• Identificação
• Reconhecimento
• Inteligência Artificial e Aprendizagem de Máquina (ML)
• Aplicações
• Biometria: Reconhecimento de face, íris e digitais
• Trânsito: Reconhecimento de placas, vias e sinais de trânsito
• Indústria: Classificação de objetos e padrões (forma, tamanho, cor)
• Etc...
6. Processamento de Imagens
• Manipulação de dados mínimos da imagem (pixels)
• Conversão do espaço de cor
• Escalonamento e Rotação
• Recorte de áreas de interesse
• Ajuste de Contraste, Brilho e Equalização de Histograma
• Aplicações
• Segmentação de imagem baseada em cor, histograma, fundo, etc..
• Filtros baseados em morfologia matemática (erosão, dilatação, abertura e fechamento)
• Filtro de ruídos (passa alta e passa baixa = detecção de borda/suavização)
• Processamento de Imagem é um bloco essencial dentro da Visão Computacional como
um todo.
7. Processamento de Imagens
Conversão de espaço de cor
Filtro passa baixa / passa alta
Segmentação de regiões Morfologia Matemática – Dilatação e Erosão
8. Processamento de Imagens
Entrada
(base de dados ou
câmera)
Entrada
(base de dados ou
câmera)
Pré-processamento
(Processamento de
Imagem)
Pré-processamento
(Processamento de
Imagem)
Extração de
Características
(formas, contornos,
ROIs)
Extração de
Características
(formas, contornos,
ROIs)
Pós-Processamento
(interface de usuário
com informações
úteis da solução)
Pós-Processamento
(interface de usuário
com informações
úteis da solução)
Solução do Problema
(detecção,
reconhecimento,
classificação, etc..)
Solução do Problema
(detecção,
reconhecimento,
classificação, etc..)
9. Biblioteca para Visão Computacional
Existe alguma ferramenta ou biblioteca realmente boa para trabalhar com visão
computacional e processamento de imagens ?
• SIM !!! OpenCV ! E muitas outras, mas OpenCV (Open Computer Vision Library) é a mais
usada atualmente.
• Gratuita tanto para uso educacional quanto comercial (exceto para alguns modelos de dados
já treinados por terceiros, nesse caso, licenças especiais são necessárias para uso comercial)
• OpenCV é multiplataforma, o que significa que o mesmo código pode ser compilado sem
alterações para Desktop: Windows, Linux, macOS, FreeBSD, NetBSD, OpenBSD, e
Embarcados: Linux, Android, iOS, Maemo, Blackberry 10.
10. Principais características da OpenCV
• Código Aberto sob a licença BSD (gratuita tanto para uso acadêmico e comercial)
• Linguagens de programação suportadas: C/C++, Python and Java
• Eficiência Computacional e com forte foco em aplicações RT.
• Escrita em C/C++ otimizado e com vantagem do use de processamento multi‐core se habilitado (Multi
Threading – TBB)
• Aceleração de Hardware (OpenCL, OpenVX)
• Grande suporte pela comunidade (47+K users)
11. Estrutura da OpenCV (Módulos Principais)
• cv – Funcionalidade básica
• imgproc – Processamento de Imagens
• videoio – Mídia I/O
• Highgui – Interface de usuário de alto nível (display output, keyboard/mouse input, etc..)
• features2D – framework para extração de características 2D
• Objdetect – Detecção de objeto
• ml – Machine Learning
14. i.MX6Q: Aceleração de HW em CV
• Aceleração com GPU utilizando OpenCL (Open Compute Language) e
OpenVX
• OpenCL 2.0 (Full Profile) é necessária para aceleração interna da OpenCV (pode
haver problemas de performance devido a otimizações específicas de hardware).
Não disponível no i.MX6Q
• OpenCL 1.x (Embedded Profile): é recomendado que você crie seus próprios kernels
de OpenCL otimizados para processar os buffers da OpenCV, dessa forma extraindo o
máximo de eficiência e performance
15. i.MX6Q – Suporte de OpenCL
• Open Computing Language (OpenCL) é um framework para escrita de programas que
executam em de plataformas heterogêneas, consistindo de CPUs, GPUs, DSPs, FPGs e
outros processadores
• OpenCL inclui uma linguagem baseada em C99 para escrita de Kernels (funções que
rodam no dispositivo com OpenCL), e APIs para definicões e controle das plataformas.
• OpenCL provê computação paralela baseada em paralelismo de processamento de
dados e tarefas.
• OpenCL é um padrão aberto mantido pelo consórcio de tecnologia sem fins lucrativos
Khronos Group, que já foi adotada pela Apple, Intel, Qualcomm, Advanced Micro
Devices (AMD), Nvidia, Altera, Samsung, Vivante e ARM Holdings.
19. Demo – Rastreamento de objetos utilizando
CAMshift
Filtro Gaussiano
Se habilitado
Captura de
Imagem pela
Câmera
Inicialização da
porta Serial
Inicializacão das
variáveis do
CAMShift
Janela de
rastreamento
ajustada ?
Saída para o
display
Imagem para
debug (overlay)
Controle do
motor
STOP - RUN
Calcular o
CAMShift
Calcular o centro
da imagem e do
centro do objeto
Atualizar as
variáveis de
controle