Introdução à Visão Computacional: Uma abordagem prática com Python e OpenCV
()
Sobre este e-book
Neste livro, Felipe Barelli vem atender a essa demanda, dando o pontapé inicial para o profissional que deseja entrar, de forma prática e um pouco teórica, nos estudos sobre o desenvolvimento de sistemas baseados em Visão Computacional. Você vai aprender como programar computadores para enxergar o ambiente ao nosso redor e torná-los capazes de reconhecer e extrair informações de objetos, mesclando conhecimentos de matemática, fotografia e programação.
As versões utilizadas são: Python: versão 2.7.14 e OpenCV: 2.4.13
Relacionado a Introdução à Visão Computacional
Ebooks relacionados
Machine Learning: Introdução à classificação Nota: 0 de 5 estrelas0 notasBig Data: Técnicas e tecnologias para extração de valor dos dados Nota: 4 de 5 estrelas4/5Aprenda a programar com Python: Descomplicando o desenvolvimento de software Nota: 5 de 5 estrelas5/5Linguagens De Programação Em Inteligência Artificial Nota: 0 de 5 estrelas0 notasIntrodução à computação: Da lógica aos jogos com Ruby Nota: 0 de 5 estrelas0 notasDeixe seu código limpo e brilhante: Desmistificando Clean Code com Java e Python Nota: 0 de 5 estrelas0 notasAlgoritmos em Java: Busca, ordenação e análise Nota: 5 de 5 estrelas5/5Lógica de programação com Portugol: Mais de 80 exemplos, 55 exercícios com gabarito e vídeos complementares Nota: 0 de 5 estrelas0 notasPostgreSQL: Banco de dados para aplicações web modernas Nota: 5 de 5 estrelas5/5Inteligência Artificial como serviço: Uma introdução aos Serviços Cognitivos da Microsoft Azure Nota: 3 de 5 estrelas3/5Trilhas Python: Programação multiparadigma e desenvolvimento Web com Flask Nota: 5 de 5 estrelas5/5Estruturas de Dados: Domine as práticas essenciais em C, Java, C#, Python e JavaScript Nota: 0 de 5 estrelas0 notasJavascript Progressivo Nota: 0 de 5 estrelas0 notasIntrodução a Data Science: Algoritmos de Machine Learning e métodos de análise Nota: 0 de 5 estrelas0 notasProgramação Funcional: Uma introdução em Clojure Nota: 4 de 5 estrelas4/5Arquitetura de software distribuído: Boas práticas para um mundo de microsserviços Nota: 0 de 5 estrelas0 notasArquitetura de Nuvem - Amazon Web Services (AWS) Nota: 4 de 5 estrelas4/5Orientação a Objetos: Aprenda seus conceitos e suas aplicabilidades de forma efetiva Nota: 5 de 5 estrelas5/5Introdução à Web Semântica: A inteligência da informação Nota: 5 de 5 estrelas5/5Datas e horas: Conceitos fundamentais e as APIs do Java Nota: 5 de 5 estrelas5/5Manual de sobrevivência do novo programador: Dicas pragmáticas para sua evolução profissional Nota: 4 de 5 estrelas4/5Python: Escreva seus primeiros programas Nota: 4 de 5 estrelas4/5Desenvolvimento web com ASP.NET MVC Nota: 0 de 5 estrelas0 notasComputação em Nuvem Nota: 5 de 5 estrelas5/5NoSQL: Como armazenar os dados de uma aplicação moderna Nota: 0 de 5 estrelas0 notasPandas Python: Data Wrangling para Ciência de Dados Nota: 0 de 5 estrelas0 notasProgramação Paralela e Distribuída: com MPI, OpenMP e OpenACC para computação de alto desempenho Nota: 0 de 5 estrelas0 notas
Programação para você
Introdução a Data Science: Algoritmos de Machine Learning e métodos de análise Nota: 0 de 5 estrelas0 notasLógica de programação com Portugol: Mais de 80 exemplos, 55 exercícios com gabarito e vídeos complementares Nota: 0 de 5 estrelas0 notasOrientação a Objetos: Aprenda seus conceitos e suas aplicabilidades de forma efetiva Nota: 5 de 5 estrelas5/5Introdução à programação em C: Os primeiros passos de um desenvolvedor Nota: 4 de 5 estrelas4/5O universo da programação: Um guia de carreira em desenvolvimento de software Nota: 5 de 5 estrelas5/5Scrum 360: Um guia completo e prático de agilidade Nota: 5 de 5 estrelas5/5Python: Escreva seus primeiros programas Nota: 4 de 5 estrelas4/5Django de A a Z: Crie aplicações web rápidas, seguras e escaláveis com Python Nota: 0 de 5 estrelas0 notasHTML5 e CSS3: Domine a web do futuro Nota: 4 de 5 estrelas4/5Lógica de Programação: Crie seus primeiros programas usando Javascript e HTML Nota: 4 de 5 estrelas4/5Back-end Java: Microsserviços, Spring Boot e Kubernetes Nota: 0 de 5 estrelas0 notasO guia de Dart: Fundamentos, prática, conceitos avançados e tudo mais Nota: 4 de 5 estrelas4/5Arduino: Guia para colocar suas ideias em prática Nota: 5 de 5 estrelas5/5Chatbots para Telegram: Programe seus primeiros bots usando Python Nota: 0 de 5 estrelas0 notasReact Native: Desenvolvimento de aplicativos mobile com React Nota: 5 de 5 estrelas5/5Estruturas de Dados: Domine as práticas essenciais em C, Java, C#, Python e JavaScript Nota: 0 de 5 estrelas0 notasMySQL: Comece com o principal banco de dados open source do mercado Nota: 4 de 5 estrelas4/5Arquitetura de software distribuído: Boas práticas para um mundo de microsserviços Nota: 0 de 5 estrelas0 notasProgramação Funcional: Uma introdução em Clojure Nota: 4 de 5 estrelas4/5Cangaceiro JavaScript: Uma aventura no sertão da programação Nota: 3 de 5 estrelas3/5O Guia Definitivo para Geração de Renda com o ChatGPT para Empreendedores Nota: 0 de 5 estrelas0 notasDesbravando Java e Orientação a Objetos: Um guia para o iniciante da linguagem Nota: 5 de 5 estrelas5/5PostgreSQL: Banco de dados para aplicações web modernas Nota: 5 de 5 estrelas5/5Guia do mestre programador: Pensando como pirata, evoluindo como jedi Nota: 3 de 5 estrelas3/5Manual de sobrevivência do novo programador: Dicas pragmáticas para sua evolução profissional Nota: 4 de 5 estrelas4/5Certificação Linux Essentials Nota: 4 de 5 estrelas4/5Rust: Concorrência e alta performance com segurança Nota: 0 de 5 estrelas0 notasTrilhas Python: Programação multiparadigma e desenvolvimento Web com Flask Nota: 5 de 5 estrelas5/5
Avaliações de Introdução à Visão Computacional
0 avaliação0 avaliação
Pré-visualização do livro
Introdução à Visão Computacional - Felipe Barelli
Sumário
1. Introdução à Visão Computacional
2. Preparando o ambiente de estudo
3. Aquisição de imagem
4. Representação de cores no espaço
5. Pré-processamento
6. Aplicação de filtros
7. Realce de bordas
8. Operações morfológicas
9. Segmentação de objetos
10. Extração de características
11. Reconhecimento de Padrões
12. Classificador K-NN
13. Algoritmo Haar Cascade
14. Aplicações da Visão Computacional
15. Referências bibliográficas
Capítulo 1
Introdução à Visão Computacional
Programar computadores para enxergar o ambiente ao nosso redor e torná-los capazes de reconhecer e extrair informações de objetos podem parecer tarefas complexas que necessitam de fortes conhecimentos matemáticos e de programação. A verdade é que os sistemas de Visão Computacional estão cada vez mais presentes em nosso cotidiano, bem como mais fáceis de se trabalhar.
Hoje, existem diversas bibliotecas e linguagens de programação para desenvolvimento de softwares nessa área, todas elas abstraindo conceitos matemáticos e tornando seu uso mais fácil. Antes de detalhar essas novas tecnologias, é importante compreender o que é Visão Computacional e como é possível fazer um computador enxergar o que acontece próximo a ele.
No ano de 1982, Ballard e Brown, na obra Computer Vision, definiram Visão Computacional como a ciência que estuda e desenvolve tecnologias que permitem que máquinas enxerguem e extraiam características do meio, através de imagens capturadas por diferentes tipos de sensores e dispositivos. Essas informações extraídas permitem reconhecer, manipular e processar dados sobre os objetos que compõem a imagem capturada.
A figura a seguir ilustra alguns desses dispositivos frequentemente utilizados para aquisição de imagens. Observe que alguns deles, por exemplo, o aparelho de Raio-X e o de Ultrassom, são capazes de registrar imagens mesmo onde não há luz visível.
Dispositivos para aquisição de imagemFigura 1.1: Dispositivos para aquisição de imagem
Apesar de trabalhos como o de Ballard e Brown terem sido publicados nos anos 80, as primeiras menções sobre Visão Computacional ocorreram na década de 50. Já os primeiros trabalhos foram iniciados por volta de 20 anos depois.
Como muitas tecnologias existentes hoje, desde o início essa também procurou imitar a natureza humana. Naquela época, acreditava-se que logo seria possível representar em uma máquina o sentido da visão humana de forma completa. Com o passar dos anos, verificou-se uma grande dificuldade em desenvolver um modelo para essa representação, principalmente por falta de informações sobre como as imagens são interpretadas no cérebro humano.
Nos dias atuais, são realizadas diversas pesquisas a fim de entender o funcionamento desta parte do cérebro, justamente para aplicar as mesmas ideias no desenvolvimento tecnológico da Visão Computacional.
A Visão Computacional também pode ser vista como um complemento da visão biológica. Na biologia, a percepção visual de alguns seres vivos é estudada e representada em modelos que descrevem sua fisiologia. Já a Visão Computacional estuda e implementa sistemas capazes de enxergar por meio de processos artificiais, implementados por hardwares e softwares.
Além do campo da neurobiologia, que estuda os sistemas biológicos de visão, diversas outras ciências contribuem com os estudos sobre Visão Computacional. A Inteligência Artificial é uma das que frequentemente colaboram para esse desenvolvimento tecnológico, principalmente quando aplicada à área da robótica, que utiliza sistemas de Visão Computacional para fornecer ao robô informações sobre o ambiente.
O Processamento de Imagens e o Reconhecimento de Padrões são dois campos que também estão fortemente relacionados. Enquanto estudos sobre Processamento de Imagens apresentam técnicas para manipular informações representadas na imagem – por exemplo, realçar bordas e remover ruídos –, os estudos sobre Reconhecimento de Padrões são realizados a fim de identificar e classificar os objetos representados. A figura a seguir exemplifica outros campos de estudo que estão interligados com o de Visão Computacional.
Campos de estudo interligadosFigura 1.2: Campos de estudo interligados
Inúmeras tarefas que realizamos manualmente podem ser automatizadas por sistemas de Visão Computacional. Os sistemas de monitoramento por imagem, capazes de detectar pessoas em um ambiente, como os robôs industriais, preparados para montar automóveis, são exemplos comuns da aplicação da Visão Computacional em nosso cotidiano. Interessada no desenvolvimento de veículos autônomos, inteligentes para trafegar sem a intervenção humana, a indústria automotiva tem investido cada dia mais no desenvolvimento desse tipo de sistema.
A figura seguinte apresenta um desses veículos, equipado com um avançado sistema de Visão Computacional capaz de rastrear e detectar pessoas, placas, ruas e outros objetos.
Veículo autônomoFigura 1.3: Veículo autônomo
Assim como no campo industrial, os sistemas baseados em Visão Computacional também são bastante usados no campo da saúde. Essa tecnologia unificada a técnicas de aprendizado de máquina, que permitem ao computador aprender e aperfeiçoar seu desempenho em alguma tarefa, tem sido empregada para detectar anomalias em exames por imagem, como: tomografia computadorizada, ressonância magnética, ultrassom etc.
Desta forma, esses exames citados podem proporcionar precocemente o diagnóstico de doenças, contribuindo para evitar futuras complicações e garantir a qualidade de vida de muitos pacientes. A figura a seguir ilustra um deles. Observe como um tumor cerebral foi identificado por um sistema de Visão Computacional em uma imagem obtida por uma ressonância magnética.
Tumor cerebral segmentado (REDDY; SOLMAZ; YAN et al., 2012)Figura 1.4: Tumor cerebral segmentado (REDDY; SOLMAZ; YAN et al., 2012)
Mesmo empregados em diversas áreas, junto a outras diferentes tecnologias, os sistemas de Visão Computacional geralmente apresentam um fluxo em comum. A figura a seguir apresenta esse fluxo em um diagrama de blocos e, nos parágrafos seguintes, cada uma dessas etapas do diagrama será detalhada.
Fluxo de um sistema baseado em Visão ComputacionalFigura 1.5: Fluxo de um sistema baseado em Visão Computacional
Usualmente a primeira etapa de um sistema de Visão Computacional é a aquisição de imagem. Nela, sensores, como os apresentados na Figura Dispositivos para aquisição de imagem, são utilizados para obter e digitalizar a imagem com qual será trabalhada. A imagem digitalizada pode variar entre uma imagem bidimensional, tridimensional ou ainda uma sequência de imagens, como ocorre em vídeos.
Após a primeira etapa, que nos fornece como resultado uma imagem digitalizada, a segunda etapa consiste no pré-processamento dessa imagem. Para que possamos compreendê-la melhor, é essencial que o conceito de região ou objeto de interesse seja assimilado.
Regiões ou objetos de interesse
São as regiões ou elementos presentes na imagem que queremos identificar e obter informações. Imagine que estamos desenvolvimento um sistema para contar o número de fichas de poker em uma imagem, e essas fichas representam os nossos objetos, ou regiões de interesse.
Com os objetos de interesse definidos, algumas técnicas de pré-processamento para destacar bordas e formas geométricas e tratar ruídos são aplicadas na imagem para realçá-la, facilitando a obtenção de suas informações pelo sistema de Visão Computacional. A figura a seguir apresenta uma imagem antes e depois de ser submetida a procedimentos de pré-processamento. Considerando que as fichas de poker na fotografia esquerda são os nossos objetos de interesse e, após a etapa de pré-processamento, elas foram realçadas e o fundo, eliminado.
Etapa de pré-processamentoFigura 1.6: Etapa de pré-processamento
Na etapa seguinte, de segmentação, os objetos de interesse são segmentados da imagem original, em uma ou mais imagens, com o propósito de facilitar a extração de características desses objetos. Ainda tendo como base a fotografia à esquerda da figura anterior, suponha que estamos desenvolvendo um sistema para contar o número de fichas na cor vermelha.
Para isso, essa fotografia deverá ser submetida a outra técnica de pré-processamento, a fim de realçar somente essas fichas e possibilitar que estas sejam segmentadas em uma nova imagem. A figura a seguir ilustra esse procedimento de segmentação.
Processo de segmentaçãoFigura 1.7: Processo de segmentação
Com as regiões de interesse segmentadas, a penúltima etapa consiste na extração de características do objeto. Tendo as fichas de poker mais uma vez como exemplo, após a etapa de segmentação, duas características que poderiam ser extraídas são a área e o diâmetro de cada uma delas. Essas informações podem ser úteis para diferenciá-las de outros objetos circulares na cor vermelha, que poderiam também estar sobre a mesa.
Por fim, na última etapa, ocorre o processamento de alto nível, com o objetivo de reconhecer o objeto segmentado através de suas características e defini-lo em uma determinada classe. Duas classes para esse exemplo poderiam ser ficha de poker vermelha
e outro objeto circular vermelho
. Em outras palavras, esta é a etapa responsável por validar os resultados e definir se eles são satisfatórios ou não.
Agora que o conceito, as aplicações e o fluxo de um sistema de Visão Computacional foram apresentados, no decorrer da leitura deste livro, você aprenderá na prática como desenvolver sistemas como este. No capítulo seguinte, serão apresentadas as ferramentas utilizadas bem como a instalação de cada uma delas.
Capítulo 2
Preparando o ambiente de estudo
Depois de uma breve introdução sobre os sistemas de Visão Computacional, chegou a hora de preparar o ambiente de estudo. Seguindo minuciosamente todos os passos apresentados neste capítulo, você poderá colocar em prática todo o conhecimento que vai adquirir durante a leitura dos demais. Para o ambiente estudo ficar completo, será necessária a instalação de alguns softwares, mais especificamente o Python e algumas bibliotecas.
Python é uma linguagem de programação de alto nível, orientada a objeto, interpretada e fácil de trabalhar. Foi lançada em 1991 por Guido van Rossum e, atualmente, possui um modelo de desenvolvimento aberto, gerenciado pela Python Software Foundation, uma organização sem fins lucrativos. É uma linguagem que pode ser usada gratuitamente tanto para fins acadêmicos quanto comerciais.
Para que o seu computador seja capaz de executar programas escritos em Python, é necessário que uma versão do seu interpretador esteja instalada. Existem distribuições de sistemas operacionais Linux e macOS que possuem esse interpretador nativamente instalado, diferente dos sistemas operacionais Windows, que nem mesmo a versão mais recente (Windows 10) possui.
Para conferir se o sistema operacional que você utiliza contém alguma versão do Python instalada, digite o comando a seguir no terminal ou no prompt de comando:
$ python -V
A execução desse comando retornará a versão do Python instalada em seu computador; do contrário, uma mensagem de erro será exibida indicando que o comando não foi reconhecido. Caso o comando não seja reconhecido, você pode obter seu programa de instalação para Windows ou macOS no site oficial da linguagem Python (http://python.org).
Site oficial da linguagem PythonFigura 2.1: Site oficial da linguagem Python
Nesse site, duas versões diferentes do instalador estão disponíveis, uma para o Python versão 3.6 e outra para a 2.7. Para garantir a compatibilidade com as bibliotecas que serão utilizadas, bem como os códigos exemplificados neste livro, recomendo o download da versão 2.7. Na seção a seguir, será detalhado como realizar a instalação do Python no Windows e no macOS.
2.1 Instalação no Windows e Mac OS
O procedimento é o mesmo para Windows ou macOS. Após o download do instalador, basta executá-lo e seguir os passos apresentados pelo programa de instalação. Durante esse procedimento, a única configuração que você poderá realizar é a definição do diretório do sistema onde o Python será instalado.
A fim de garantir o sucesso da instalação de algumas bibliotecas que serão utilizadas, recomendo instalar o Python no diretório padrão, ou seja, o definido pelo programa de instalação. A figura seguinte apresenta duas telas referentes ao programa de instalação do Python para Windows.
Python para WindowsFigura 2.2: Python para Windows
Nos sistemas operacionais Windows, após concluir a instalação do Python, é necessário configurar as variáveis de ambiente. Essa configuração permite a execução de programas em Python a partir do prompt de comando, sem a necessidade de acessar o diretório onde estão localizados os arquivos executáveis do seu interpretador.
Para configurar as variáveis de ambiente, acesse o Painel de Controle do Windows e, depois, Sistema e Segurança > Sistema. Com o painel aberto, localize na lateral esquerda o botão Definições avançadas do sistema.
Clique nele para abrir a janela de Propriedades do sistema. Nela, clique no botão Variáveis do ambiente... para abrir a janela na qual será feita a configuração dessas variáveis. Na figura a seguir, a imagem à direita apresenta essa janela de configuração, com título Variáveis de Ambiente.
Variáveis de ambienteFigura 2.3: Variáveis de ambiente
Selecione o