SlideShare uma empresa Scribd logo
1 de 33
Construindo Máquinas que Veem:
Uma Introdução ao Mundo da Visão
Computacional
II Simpósio de Pesquisa e Desenvolvimento em Computação
11 e 12 de maio de 2016
MEng. Cristiano Rafael Steffens
Sobre mim:
• Mestre em Eng. de Computação – FURG
• Professor
• Bolsista DTI – CAPES
• Consultor na S-Project
• Áreas de interesse:
– Robótica para aplicações industriais
– Visão Computacional
– Sistemas de medição baseados em visão
– Aprendizagem de máquina
CristianoSteffens@furg.br
Cristiano@sproject.com.br
Agenda
• O que é a OpenCV?
• Como instalar?
• A linguagem Python
• Hello World
• O que podemos fazer com OpenCV?
O que é OpenCV?
• OpenCV (Open Source Computer Vision) é
uma biblioteca de programação com funções
de visão computacional de tempo real.
• Distribuída sob a licença BSD.
• Possui interfaces para C/C++, Python.
• Possui suporte para Windows, Linux Android e
Mac OS.
Como instalar a OpenCV?
• Software necessário:
– Python27
– numpy-1.8.2-win32-superpack-python2.7
– matplotlib-1.3.0.win32-py2.7
– OpenCv 3.1.0
• Passo a passo:
docs.opencv.org/3.1.0/d5/de5/tutorial_py_setup
_in_windows.html
Como instalar a OpenCV?
• Software necessário (parte 1):
– $ sudo apt-get install build-essential cmake git pkg-config
– $ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev
libpng12-dev
– $ sudo apt-get install libgtk2.0-dev
– $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-
dev libv4l-dev
– $ sudo apt-get install libatlas-base-dev gfortran
– $ wget https://bootstrap.pypa.io/get-pip.py
– $ sudo python get-pip.py
– $ sudo apt-get install python2.7-dev
– $ pip install numpy
Como instalar a OpenCV?
• Software necessário (parte 2):
– $ cd ~
– $ git clone https://github.com/Itseez/opencv.git
– $ cd opencv
– $ git checkout 3.1.0
– $ cd ~
– $ git clone https://github.com/Itseez/opencv_contrib.git
– $ cd opencv_contrib
– $ git checkout 3.1.0
Como instalar a OpenCV?
• Software necessário (parte 3):
– $ cd ~/opencv
– $ mkdir build
– $ cd build
– $ cmake -D CMAKE_BUILD_TYPE=RELEASE 
-D CMAKE_INSTALL_PREFIX=/usr/local 
-D INSTALL_C_EXAMPLES=OFF 
-D INSTALL_PYTHON_EXAMPLES=ON 
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules 
-D BUILD_EXAMPLES=ON ..
– $ make -j4
– $ sudo make install
– $ sudo ldconfig
Como instalar a OpenCV?
• Máquina virtual do ROS:
– Download em:
http://nootrix.com/2014/09/ros-indigo-virtual-machine/
– Se estiver utilizando Virtual Box precisa instalar o Extension
Pack para habilitar USB 2.0 *
– Para habilitar o uso da webcam do computador é necessário a
instalação do Cheese, GUVCView e os drivers da câmera.
– Mais informações podem ser encontradas em:
https://siddhantahuja.wordpress.com/2011/07/20/working-with-
ros-and-opencv-draft/
A linguagem Python
Python é uma linguagem de programação
poderosa e de fácil aprendizado. Possui
estruturas de dados de alto nível eficientes,
bem como adota uma abordagem simples e
efetiva para a programação orientada a
objetos. Sua sintaxe elegante e tipagem
dinâmica, além de sua natureza interpretada,
tornam Python ideal para scripting e para o
desenvolvimento rápido de aplicações em
diversas áreas e na maioria das plataformas.
A linguagem Python - Números
>>> 2+2
4
>>> # Isto é um comentário
... 2+2
4
>>> (50-5*6)/4
5
>>> # A divisão entre inteiros arredonda para baixo:
... 7/3
2
>>> 7/-3
-3
A linguagem Python - Números
>>> 7.0 / 2
3.5
>>> largura = 20
>>> algura = 5*9
>>> largura * altura
900
>>> # Zerar x, y, z
>>> x = y = z = 0
A linguagem Python - Strings
>>> 'spam eggs'
'spam eggs'
>>> 'doesn't'
"doesn't"
>>> "doesn't"
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> ""Yes," he said."
'"Yes," he said.'
>>> '"Isn't," she said.'
'"Isn't," she said.'
A linguagem Python - Strings
>>> palavra = 'Ajuda' + 'Z'
>>> palavra
'AjudaZ'
>>> '<' + palavra*5 + '>'
'<AjudaZAjudaZAjudaZAjudaZAjudaZ>‘
>>> palavra[4]
'a'
>>> palavra[0:2]
'Aj'
>>> palavra[2:4]
'ud‘
>>> 'x' + palavra[1:]
'xjudaZ‘
>>> len(palavra)
7
A linguagem Python - Listas
>>> a[0]
'spam'
>>> a[3]
1234
>>> a[-2]
100
>>> a[1:-1]
['eggs', 100]
>>> a[:2] + ['bacon', 2*2]
['spam', 'eggs', 'bacon', 4]
>>> 3*a[:3] + ['Boo!']
['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs',
100, 'Boo!']
A linguagem Python - Listas
>>> a
['spam', 'eggs', 100, 1234]
>>> a[2] = a[2] + 23
>>> a
['spam', 'eggs', 123, 1234]
>>> remover itens da lista
>>> a[0:2] = []
A linguagem Python - Repetição
a, b = 0, 1
>>> while b < 10:
print b
a, b = b, a+b
A linguagem Python - Decisão
>>> x = int(raw_input("Favor digitar um inteiro: "))
Favor digitar um inteiro: 42
>>> if x < 0:
x = 0
print 'Negativo alterado para zero'
elif x == 0:
print 'Zero'
elif x == 1:
print 'Unidade'
else:
print 'Mais'
A linguagem Python - For
>>> # Medir o tamanho de algumas strings:
>>> a = ['gato', 'janela', 'defenestrar']
>>> for x in a:
print x, len(x)
gato 4
janela 6
defenestrar 11
A linguagem Python - For
>>> for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print n, '=', x, '*', n/x
break
else: # laço terminou sem encontrar um fator
print n, 'é um número primo'
2 é um número primo
3 é um número primo
4 = 2 * 2
5 é um número primo
6 = 2 * 3
7 é um número primo
8 = 2 * 4
9 = 3 * 3
A linguagem Python - Funções
>>> def fib(n): # escrever série de Fibonacci
até n
"""Exibe série de Fibonacci até n"""
a, b = 0, 1
while a < n:
print a,
a, b = b, a+b
>>> # Agora invocamos a função que
acabamos de definir:
fib(2000)
A linguagem Python - Funções
>>> def fib2(n): # devolve a série de Fibonacci até n
"""Devolve uma lista a com série de Fibonacci
até n."""
resultado = []
a, b = 0, 1
while a < n:
resultado.append(a) # veja mais adiante
a, b = b, a+b
return resultado
>>> f100 = fib2(100) # executar
>>> f100 # exibir o resultado
Python - Numpy
NumPy é um pacote de Python que suporta
operações com vetores e matrizes e é
essencial para a computação científica com
Python.
É baseado em C, portanto tem um
desempenho superior se comparado às
operações com vetores originais do Python.
Python - Numpy
>>> import numpy as np
>>> a = np.array([0,1,2,3,4,5])
>>> type(a)
>>> a = np.array([[0,1,2,3], [4,5,6,7],
[8,9,10,11]])
>>> a.shape
(3,4)
Python - Numpy
>>> a[1,3] # acessa uma posição
>>> a[0,3:5] # pega parte da matriz
>>>a[:,2] #pega parte da matriz
>>> a.transpose() # matriz transposta
>>> np.sum(a) # soma dos elementos
>>> a.sum() #soma dos elementos
>>> np.amin(a) # menor valor
>>> a.argmin() # índice do menor valor
>>> np.amax(a) # maior valor
>>> a.flat[:] # array como vetor
Aplicações da OpenCV
• A biblioteca OpenCV é dividida em módulos
– core - define as principais estruturas de dados utilizadas pela biblioteca.
Ex.: Mat e Point.
– improc - Módulo de processamento de imagem que inclui filtros
lineares e não lineares além de transformações geométricas.
– highgui - Módulo com funções de interface como criação de janelas.
– objdetect - Módulo com funções de detecção de objetos. Ex: haar,
cascade classifiers.
– ml – Módulo com funções de Machine Learning. Ex: classificadores de
árvore, knn, redes neurais, svm e classificadores bayesianos.
– video – Módulo com funções de processamento de video. Ex:
KalmanFilter.
• A lista completa pode ser obtida em
http://docs.opencv.org/modules/refman.html
Importante!! Mat
Importante!! cv::Mat
# Operador de atribuição
a = b;
# Mostrar no console
print(a);
# Clonar uma matriz
b = np.copy(a);
# utilizar parte de uma matriz definindo uma região de interesse
b = a[0:100,0:100];
# Criando uma Mat
b = np.zeros((2,2,3), np.uint8);
b = np.ones((2,2,3), np.float32);
# Alterar uma posição (branco)
a[1,1] = 255;
# altera o canal de cor verde para o valor
a[1,1,2] = 255;
Olá turma!! 
# imports da opencv
import cv2
# lê a imagem para uma matriz
image = cv2.imread("unicruz.png");
# cria uma janela para mostrar a imagem
cv2.namedWindow("Tutorial OpenCv - Unicruz");
# mostra a imagem
cv2.imshow("Tutorial OpenCv - Unicruz", image);
# renderiza e aguarda entrada do teclado
cv2.waitKey()
#fecha todas as janelas
cv2.destroyAllWindows();
Olá mundo!! 
# imports da opencv
import cv2
# lê a imagem para uma matriz
image = cv2.imread("unicruz.png");
#converte para escala de cinza
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY);
# cria uma janela para mostrar a imagem
cv2.namedWindow("Tutorial OpenCv - Unicruz");
cv2.imshow("Tutorial OpenCv - Unicruz", gray_image);
# renderiza e aguarda entrada do teclado
cv2.waitKey()
cv2.destroyAllWindows();
Realçando uma imagem
image = cv2.imread("E:/trash/img.jpg");
if (image.size>0)):
# cria a versão suavizada
blured = cv2.blur(image, (5,5))
# adiciona ao original (unsharp filter)
sharp = cv2.addWeighted(image, 1.5, blured, 0,6);
# calcula a diferença entre as imagens
diference = cv2.absdiff(image, sharp);
# mostra a imagem
cv2.imshow("Original", image); cv2.imshow("Blured", blured);
cv2.imshow("Sharp", sharp); cv2.imshow("diference", diference);
# salva as imagens em arquivo
cv2.imwrite("sharp.png", sharp);
cv2.waitKey();
Encontrando Bordas
image = cv2.imread("unicruz.png");
gray_image = cv2.cvtColor(image,
cv2.COLOR_BGR2GRAY);
# Remove o ruído da imagem utilizando um filtro 3x3
gray_image = cv2.blur(gray_image, (5,5))
# Detector de bordas de Canny # origem, threshold baixo,
threshold alto;
edges = cv2.Canny(gray_image, 100, 200);
# mostra a saída
cv2.imshow("Bordas", edges); cv2.waitKey();
That’s it for today!
• CristianoSteffens@furg.br
• Cristiano@SProject.com.br

Mais conteúdo relacionado

Mais procurados

Tchelinux 2014 visão computacional
Tchelinux 2014 visão computacionalTchelinux 2014 visão computacional
Tchelinux 2014 visão computacionalfelipe_cr
 
Pós Ruy - 2 e 3 Camadas - Teste de componentes
Pós Ruy - 2 e 3 Camadas - Teste de componentesPós Ruy - 2 e 3 Camadas - Teste de componentes
Pós Ruy - 2 e 3 Camadas - Teste de componentesCleverson Sacramento
 
MSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browserMSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browserJP Clementi
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STLMarcos Castro
 
Invocação Remota de Procedimentos (RPC)
Invocação Remota de Procedimentos (RPC)Invocação Remota de Procedimentos (RPC)
Invocação Remota de Procedimentos (RPC)elliando dias
 
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exceptionLoiane Groner
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STLMarcos Castro
 
15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrerMichele Silva
 
Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowGuilherme Campos
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoRafael Jaques
 
Docker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHONDocker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHONIago Machado
 

Mais procurados (20)

Tchelinux 2014 visão computacional
Tchelinux 2014 visão computacionalTchelinux 2014 visão computacional
Tchelinux 2014 visão computacional
 
Mock Objects
Mock ObjectsMock Objects
Mock Objects
 
Frameworks para C 3º DeSif
Frameworks para C 3º DeSifFrameworks para C 3º DeSif
Frameworks para C 3º DeSif
 
Pós Ruy - 2 e 3 Camadas - Teste de componentes
Pós Ruy - 2 e 3 Camadas - Teste de componentesPós Ruy - 2 e 3 Camadas - Teste de componentes
Pós Ruy - 2 e 3 Camadas - Teste de componentes
 
MSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browserMSDN Webcast - Melhores práticas cross browser
MSDN Webcast - Melhores práticas cross browser
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
Invocação Remota de Procedimentos (RPC)
Invocação Remota de Procedimentos (RPC)Invocação Remota de Procedimentos (RPC)
Invocação Remota de Procedimentos (RPC)
 
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 
15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer
 
Testes em go
Testes em goTestes em go
Testes em go
 
PHP-CLI em 7 passos
PHP-CLI em 7 passosPHP-CLI em 7 passos
PHP-CLI em 7 passos
 
Guia Rápido TI-84
Guia Rápido TI-84Guia Rápido TI-84
Guia Rápido TI-84
 
Introdução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlowIntrodução a Machine Learning e TensorFlow
Introdução a Machine Learning e TensorFlow
 
JavaFX SestInfo 2010
JavaFX SestInfo 2010JavaFX SestInfo 2010
JavaFX SestInfo 2010
 
Guia Rápido Voyage 200
Guia Rápido Voyage 200Guia Rápido Voyage 200
Guia Rápido Voyage 200
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
 
Docker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHONDocker API Client with PHP and PYTHON
Docker API Client with PHP and PYTHON
 
Guia Rápido TI-NSpire
Guia Rápido TI-NSpireGuia Rápido TI-NSpire
Guia Rápido TI-NSpire
 

Destaque

Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...
Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...
Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...Richiely Paiva
 
Engenharia de software
Engenharia de softwareEngenharia de software
Engenharia de softwareTiago Pinhão
 
Paradigmas De Engenharia De Software
Paradigmas De Engenharia De SoftwareParadigmas De Engenharia De Software
Paradigmas De Engenharia De SoftwareRobson Silva Espig
 
Spiral model presentation
Spiral model presentationSpiral model presentation
Spiral model presentationSayedFarhan110
 

Destaque (6)

Modelos de processos de software
Modelos de processos de softwareModelos de processos de software
Modelos de processos de software
 
Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...
Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...
Sistema de Reconhecimento de Placas de Carro (Brasil) - Visão Computacional/O...
 
Engenharia de software
Engenharia de softwareEngenharia de software
Engenharia de software
 
OpenCV Introduction
OpenCV IntroductionOpenCV Introduction
OpenCV Introduction
 
Paradigmas De Engenharia De Software
Paradigmas De Engenharia De SoftwareParadigmas De Engenharia De Software
Paradigmas De Engenharia De Software
 
Spiral model presentation
Spiral model presentationSpiral model presentation
Spiral model presentation
 

Semelhante a Simpósio Unicruz: OpenCV + Python (parte 1)

Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoMario Chaves
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com pythonUFPA
 
Primeiros passos com Openstack
Primeiros passos com OpenstackPrimeiros passos com Openstack
Primeiros passos com OpenstackDalton Valadares
 
Principais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoPrincipais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoIntel Software Brasil
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Pythonrodrigopex
 
Iniciando em Python
Iniciando em PythonIniciando em Python
Iniciando em PythonRober Guerra
 
Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Mauro Baraldi
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9Nando Vieira
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaÁlvaro Justen
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECLW3P Projetos Web
 
Supervisão e Monitorização
Supervisão e MonitorizaçãoSupervisão e Monitorização
Supervisão e MonitorizaçãoSAPO Sessions
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Michael Castillo Granados
 
Minicurso-Python-01.pptx
Minicurso-Python-01.pptxMinicurso-Python-01.pptx
Minicurso-Python-01.pptxPapirusDig
 
Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Intel Software Brasil
 
Zabbix monitorando o zimbra collaboration 8.8 (1)
Zabbix   monitorando o zimbra collaboration 8.8 (1)Zabbix   monitorando o zimbra collaboration 8.8 (1)
Zabbix monitorando o zimbra collaboration 8.8 (1)PAULO R. DEOLINDO JUNIOR
 

Semelhante a Simpósio Unicruz: OpenCV + Python (parte 1) (20)

Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em django
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com python
 
Primeiros passos com Openstack
Primeiros passos com OpenstackPrimeiros passos com Openstack
Primeiros passos com Openstack
 
Principais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoPrincipais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorização
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Iniciando em Python
Iniciando em PythonIniciando em Python
Iniciando em Python
 
Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8Como medir a sua aplicação - Python Brasil 8
Como medir a sua aplicação - Python Brasil 8
 
Pythonbrasil8
Pythonbrasil8Pythonbrasil8
Pythonbrasil8
 
(2013-05-03) AudioLazy - Slides
(2013-05-03) AudioLazy - Slides(2013-05-03) AudioLazy - Slides
(2013-05-03) AudioLazy - Slides
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Introdução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtivaIntrodução a linguagem Python: simples e produtiva
Introdução a linguagem Python: simples e produtiva
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
 
Supervisão e Monitorização
Supervisão e MonitorizaçãoSupervisão e Monitorização
Supervisão e Monitorização
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
Python 08
Python 08Python 08
Python 08
 
Minicurso-Python-01.pptx
Minicurso-Python-01.pptxMinicurso-Python-01.pptx
Minicurso-Python-01.pptx
 
Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013
 
Zabbix monitorando o zimbra collaboration 8.8 (1)
Zabbix   monitorando o zimbra collaboration 8.8 (1)Zabbix   monitorando o zimbra collaboration 8.8 (1)
Zabbix monitorando o zimbra collaboration 8.8 (1)
 

Mais de Cristiano Rafael Steffens

CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and videoCONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and videoCristiano Rafael Steffens
 
A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...Cristiano Rafael Steffens
 
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGESA CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGESCristiano Rafael Steffens
 
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...Cristiano Rafael Steffens
 
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...Cristiano Rafael Steffens
 
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...Cristiano Rafael Steffens
 
FPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automatedFPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automatedCristiano Rafael Steffens
 
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire DetectionLars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire DetectionCristiano Rafael Steffens
 
ICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section PresentationICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section PresentationCristiano Rafael Steffens
 
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...Cristiano Rafael Steffens
 
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...Cristiano Rafael Steffens
 
Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...Cristiano Rafael Steffens
 
An Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire DetectionAn Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire DetectionCristiano Rafael Steffens
 
Um Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em VídeoUm Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em VídeoCristiano Rafael Steffens
 
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)Cristiano Rafael Steffens
 

Mais de Cristiano Rafael Steffens (20)

CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and videoCONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
CONVOLUTIONAL NEURAL NETWORKS: The workhorse of image and video
 
A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...A pipelined approach to deal with image distortion in computer vision - BRACI...
A pipelined approach to deal with image distortion in computer vision - BRACI...
 
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGESA CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
A CNN BASED MODEL TO RESTORE ILL EXPOSED IMAGES
 
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
Can Exposure, Noise and Compression affect Image Recognition? An Assessment o...
 
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
MODELAGEM DAS DINÂMICAS DA FORMAÇÃO DA GOTA E TRANSFERÊNCIA DE MASSA EM PROCE...
 
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
UMA ABORDAGEM COMPARATIVA ENTRE MICROCONTROLADORES: ARDUINO MEGA X ARDUINO DU...
 
FPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automatedFPGA-based sensor integration and communication protocols for automated
FPGA-based sensor integration and communication protocols for automated
 
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire DetectionLars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
Lars 2016 A Texture Driven Approach for Visible Spectrum Fire Detection
 
Php Math and arrays
Php Math and arraysPhp Math and arrays
Php Math and arrays
 
ICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section PresentationICRA 2016 - Interactive section Presentation
ICRA 2016 - Interactive section Presentation
 
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
Vision-Based System for Welding Groove Measurements for Robotic Welding Appli...
 
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
Welding Groove Mapping: Image Acquisition and Processing on Shiny Surfaces - ...
 
Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...Automated control module based on VBM for shipyard welding applications: Stud...
Automated control module based on VBM for shipyard welding applications: Stud...
 
An Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire DetectionAn Unconstrained Dataset for Non-stationary Video Based Fire Detection
An Unconstrained Dataset for Non-stationary Video Based Fire Detection
 
Um Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em VídeoUm Sistema De Detecção De Fogo Baseado Em Vídeo
Um Sistema De Detecção De Fogo Baseado Em Vídeo
 
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
Um sistema de detecção de chamas utilizando RF e SVM (Short Version)
 
G xserver curso-actualizgxxev1
G xserver curso-actualizgxxev1G xserver curso-actualizgxxev1
G xserver curso-actualizgxxev1
 
20 pratico cursogxxbr
20 pratico cursogxxbr20 pratico cursogxxbr
20 pratico cursogxxbr
 
18 indice cursogxx
18 indice cursogxx18 indice cursogxx
18 indice cursogxx
 
17 kb versoes-curso-gxxbr
17 kb versoes-curso-gxxbr17 kb versoes-curso-gxxbr
17 kb versoes-curso-gxxbr
 

Simpósio Unicruz: OpenCV + Python (parte 1)

  • 1. Construindo Máquinas que Veem: Uma Introdução ao Mundo da Visão Computacional II Simpósio de Pesquisa e Desenvolvimento em Computação 11 e 12 de maio de 2016 MEng. Cristiano Rafael Steffens
  • 2. Sobre mim: • Mestre em Eng. de Computação – FURG • Professor • Bolsista DTI – CAPES • Consultor na S-Project • Áreas de interesse: – Robótica para aplicações industriais – Visão Computacional – Sistemas de medição baseados em visão – Aprendizagem de máquina CristianoSteffens@furg.br Cristiano@sproject.com.br
  • 3. Agenda • O que é a OpenCV? • Como instalar? • A linguagem Python • Hello World • O que podemos fazer com OpenCV?
  • 4. O que é OpenCV? • OpenCV (Open Source Computer Vision) é uma biblioteca de programação com funções de visão computacional de tempo real. • Distribuída sob a licença BSD. • Possui interfaces para C/C++, Python. • Possui suporte para Windows, Linux Android e Mac OS.
  • 5. Como instalar a OpenCV? • Software necessário: – Python27 – numpy-1.8.2-win32-superpack-python2.7 – matplotlib-1.3.0.win32-py2.7 – OpenCv 3.1.0 • Passo a passo: docs.opencv.org/3.1.0/d5/de5/tutorial_py_setup _in_windows.html
  • 6. Como instalar a OpenCV? • Software necessário (parte 1): – $ sudo apt-get install build-essential cmake git pkg-config – $ sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev – $ sudo apt-get install libgtk2.0-dev – $ sudo apt-get install libavcodec-dev libavformat-dev libswscale- dev libv4l-dev – $ sudo apt-get install libatlas-base-dev gfortran – $ wget https://bootstrap.pypa.io/get-pip.py – $ sudo python get-pip.py – $ sudo apt-get install python2.7-dev – $ pip install numpy
  • 7. Como instalar a OpenCV? • Software necessário (parte 2): – $ cd ~ – $ git clone https://github.com/Itseez/opencv.git – $ cd opencv – $ git checkout 3.1.0 – $ cd ~ – $ git clone https://github.com/Itseez/opencv_contrib.git – $ cd opencv_contrib – $ git checkout 3.1.0
  • 8. Como instalar a OpenCV? • Software necessário (parte 3): – $ cd ~/opencv – $ mkdir build – $ cd build – $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_C_EXAMPLES=OFF -D INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules -D BUILD_EXAMPLES=ON .. – $ make -j4 – $ sudo make install – $ sudo ldconfig
  • 9. Como instalar a OpenCV? • Máquina virtual do ROS: – Download em: http://nootrix.com/2014/09/ros-indigo-virtual-machine/ – Se estiver utilizando Virtual Box precisa instalar o Extension Pack para habilitar USB 2.0 * – Para habilitar o uso da webcam do computador é necessário a instalação do Cheese, GUVCView e os drivers da câmera. – Mais informações podem ser encontradas em: https://siddhantahuja.wordpress.com/2011/07/20/working-with- ros-and-opencv-draft/
  • 10. A linguagem Python Python é uma linguagem de programação poderosa e de fácil aprendizado. Possui estruturas de dados de alto nível eficientes, bem como adota uma abordagem simples e efetiva para a programação orientada a objetos. Sua sintaxe elegante e tipagem dinâmica, além de sua natureza interpretada, tornam Python ideal para scripting e para o desenvolvimento rápido de aplicações em diversas áreas e na maioria das plataformas.
  • 11. A linguagem Python - Números >>> 2+2 4 >>> # Isto é um comentário ... 2+2 4 >>> (50-5*6)/4 5 >>> # A divisão entre inteiros arredonda para baixo: ... 7/3 2 >>> 7/-3 -3
  • 12. A linguagem Python - Números >>> 7.0 / 2 3.5 >>> largura = 20 >>> algura = 5*9 >>> largura * altura 900 >>> # Zerar x, y, z >>> x = y = z = 0
  • 13. A linguagem Python - Strings >>> 'spam eggs' 'spam eggs' >>> 'doesn't' "doesn't" >>> "doesn't" "doesn't" >>> '"Yes," he said.' '"Yes," he said.' >>> ""Yes," he said." '"Yes," he said.' >>> '"Isn't," she said.' '"Isn't," she said.'
  • 14. A linguagem Python - Strings >>> palavra = 'Ajuda' + 'Z' >>> palavra 'AjudaZ' >>> '<' + palavra*5 + '>' '<AjudaZAjudaZAjudaZAjudaZAjudaZ>‘ >>> palavra[4] 'a' >>> palavra[0:2] 'Aj' >>> palavra[2:4] 'ud‘ >>> 'x' + palavra[1:] 'xjudaZ‘ >>> len(palavra) 7
  • 15. A linguagem Python - Listas >>> a[0] 'spam' >>> a[3] 1234 >>> a[-2] 100 >>> a[1:-1] ['eggs', 100] >>> a[:2] + ['bacon', 2*2] ['spam', 'eggs', 'bacon', 4] >>> 3*a[:3] + ['Boo!'] ['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boo!']
  • 16. A linguagem Python - Listas >>> a ['spam', 'eggs', 100, 1234] >>> a[2] = a[2] + 23 >>> a ['spam', 'eggs', 123, 1234] >>> remover itens da lista >>> a[0:2] = []
  • 17. A linguagem Python - Repetição a, b = 0, 1 >>> while b < 10: print b a, b = b, a+b
  • 18. A linguagem Python - Decisão >>> x = int(raw_input("Favor digitar um inteiro: ")) Favor digitar um inteiro: 42 >>> if x < 0: x = 0 print 'Negativo alterado para zero' elif x == 0: print 'Zero' elif x == 1: print 'Unidade' else: print 'Mais'
  • 19. A linguagem Python - For >>> # Medir o tamanho de algumas strings: >>> a = ['gato', 'janela', 'defenestrar'] >>> for x in a: print x, len(x) gato 4 janela 6 defenestrar 11
  • 20. A linguagem Python - For >>> for n in range(2, 10): for x in range(2, n): if n % x == 0: print n, '=', x, '*', n/x break else: # laço terminou sem encontrar um fator print n, 'é um número primo' 2 é um número primo 3 é um número primo 4 = 2 * 2 5 é um número primo 6 = 2 * 3 7 é um número primo 8 = 2 * 4 9 = 3 * 3
  • 21. A linguagem Python - Funções >>> def fib(n): # escrever série de Fibonacci até n """Exibe série de Fibonacci até n""" a, b = 0, 1 while a < n: print a, a, b = b, a+b >>> # Agora invocamos a função que acabamos de definir: fib(2000)
  • 22. A linguagem Python - Funções >>> def fib2(n): # devolve a série de Fibonacci até n """Devolve uma lista a com série de Fibonacci até n.""" resultado = [] a, b = 0, 1 while a < n: resultado.append(a) # veja mais adiante a, b = b, a+b return resultado >>> f100 = fib2(100) # executar >>> f100 # exibir o resultado
  • 23. Python - Numpy NumPy é um pacote de Python que suporta operações com vetores e matrizes e é essencial para a computação científica com Python. É baseado em C, portanto tem um desempenho superior se comparado às operações com vetores originais do Python.
  • 24. Python - Numpy >>> import numpy as np >>> a = np.array([0,1,2,3,4,5]) >>> type(a) >>> a = np.array([[0,1,2,3], [4,5,6,7], [8,9,10,11]]) >>> a.shape (3,4)
  • 25. Python - Numpy >>> a[1,3] # acessa uma posição >>> a[0,3:5] # pega parte da matriz >>>a[:,2] #pega parte da matriz >>> a.transpose() # matriz transposta >>> np.sum(a) # soma dos elementos >>> a.sum() #soma dos elementos >>> np.amin(a) # menor valor >>> a.argmin() # índice do menor valor >>> np.amax(a) # maior valor >>> a.flat[:] # array como vetor
  • 26. Aplicações da OpenCV • A biblioteca OpenCV é dividida em módulos – core - define as principais estruturas de dados utilizadas pela biblioteca. Ex.: Mat e Point. – improc - Módulo de processamento de imagem que inclui filtros lineares e não lineares além de transformações geométricas. – highgui - Módulo com funções de interface como criação de janelas. – objdetect - Módulo com funções de detecção de objetos. Ex: haar, cascade classifiers. – ml – Módulo com funções de Machine Learning. Ex: classificadores de árvore, knn, redes neurais, svm e classificadores bayesianos. – video – Módulo com funções de processamento de video. Ex: KalmanFilter. • A lista completa pode ser obtida em http://docs.opencv.org/modules/refman.html
  • 28. Importante!! cv::Mat # Operador de atribuição a = b; # Mostrar no console print(a); # Clonar uma matriz b = np.copy(a); # utilizar parte de uma matriz definindo uma região de interesse b = a[0:100,0:100]; # Criando uma Mat b = np.zeros((2,2,3), np.uint8); b = np.ones((2,2,3), np.float32); # Alterar uma posição (branco) a[1,1] = 255; # altera o canal de cor verde para o valor a[1,1,2] = 255;
  • 29. Olá turma!!  # imports da opencv import cv2 # lê a imagem para uma matriz image = cv2.imread("unicruz.png"); # cria uma janela para mostrar a imagem cv2.namedWindow("Tutorial OpenCv - Unicruz"); # mostra a imagem cv2.imshow("Tutorial OpenCv - Unicruz", image); # renderiza e aguarda entrada do teclado cv2.waitKey() #fecha todas as janelas cv2.destroyAllWindows();
  • 30. Olá mundo!!  # imports da opencv import cv2 # lê a imagem para uma matriz image = cv2.imread("unicruz.png"); #converte para escala de cinza gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY); # cria uma janela para mostrar a imagem cv2.namedWindow("Tutorial OpenCv - Unicruz"); cv2.imshow("Tutorial OpenCv - Unicruz", gray_image); # renderiza e aguarda entrada do teclado cv2.waitKey() cv2.destroyAllWindows();
  • 31. Realçando uma imagem image = cv2.imread("E:/trash/img.jpg"); if (image.size>0)): # cria a versão suavizada blured = cv2.blur(image, (5,5)) # adiciona ao original (unsharp filter) sharp = cv2.addWeighted(image, 1.5, blured, 0,6); # calcula a diferença entre as imagens diference = cv2.absdiff(image, sharp); # mostra a imagem cv2.imshow("Original", image); cv2.imshow("Blured", blured); cv2.imshow("Sharp", sharp); cv2.imshow("diference", diference); # salva as imagens em arquivo cv2.imwrite("sharp.png", sharp); cv2.waitKey();
  • 32. Encontrando Bordas image = cv2.imread("unicruz.png"); gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY); # Remove o ruído da imagem utilizando um filtro 3x3 gray_image = cv2.blur(gray_image, (5,5)) # Detector de bordas de Canny # origem, threshold baixo, threshold alto; edges = cv2.Canny(gray_image, 100, 200); # mostra a saída cv2.imshow("Bordas", edges); cv2.waitKey();
  • 33. That’s it for today! • CristianoSteffens@furg.br • Cristiano@SProject.com.br

Notas do Editor

  1. Construindo Máquinas que Veem: Uma Introdução ao Mundo da Visão Computacional O Processamento de Imagens se apresenta como uma ferramenta de manipulação de dados em imagens tornando-as apropriadas para algoritmos de visão computacional ou para o observador humano. Variação de brilho e contraste, equalização de histograma, remoção de ruído e nitidez são apenas algumas das técnicas que podem ser utilizadas. A visão computacional transcende estas técnicas, utilizando algoritmos especialmente projetados e aprendizagem de máquina para transformar dados de imagens e vídeos em informações relevantes. Nesta oficina exploram-se as principais características de imagens digitais, sua aquisição, representação no computador e como elas podem ser manipuladas. Os principais conceitos, as técnicas e algoritmos mais difundidos e sua implementação na biblioteca OpenCv são revisadas. Em seguida, faz se o desenvolvimento de algoritmos de visão computacional, incluindo técnicas OCR (Optical Character Recognition), detecção e reconhecimento de faces. 
  2. Atua junto ao NAUTEC - Grupo de Automação e Robótica Inteligentes - do Centro de Ciências Computacionais na Universidade Federal do Rio Grande - FURG. É Bolsista de Desenvolvimento Tecnológico Industrial C - CNPq. Atua na análise e desenvolvimento de soluções em visão computacional e aprendizagem de máquina para problemas não resovidos em robótica industrial. Tem conhecimento em linguagens e ferramentas para desenvolvimento Web e C++. Desenvolveu sistemas embarcados em hardware e software. Publicações recentes incluem conferências como ICRA (CC-A1) - International Conference in Robotics and Automation, VISAPP (CC-B3) - International Conference on Computer Vision Theory and Applications, IWS (CC-B4) - Iberchip Workshop, LARS (CC-B4) - Latin American Robotics Symposium e SBAI (CC-B4) - Simpósio Brasileiro de Automação Inteligente. É membro do comitê revisor do SYROCO (CC-B3) - IFAC Symposium on Robot Control, ICCEEg-FURG (CC-C) - Revista Jr de Iniciação Científica em Ciências Exatas e Engenharia e avaliador do Simpósio de Pesquisa e Desenvolvimento em Computação da Universidade de Cruz Alta - UNICRUZ. Atua como professor do magistério superior substituto junto à FURG desde 2015 lecionando nas disciplinas de Sistemas para Internet, Sistemas Operacionais, Algoritmos Computacionais, Tópicos Especiais em Sistemas de Informação e Atividades de Integração Curricular. Leciona nos nos cursos de Engenharia de Computação, Sistemas de Informação, Engenharia de Automação e Engenharia Civil Costeira e Portuária. Tradutor Coursera Tutor Bliive
  3. http://www.pyimagesearch.com/2015/06/22/install-opencv-3-0-and-python-2-7-on-ubuntu/
  4. Diferentemente de C, strings em Python não podem ser alteradas. Tentar atribuir valor a uma posição (índice ou fatia) dentro de uma string resulta em erro!!
  5. Python inclui diversas estruturas de dados compostas, usadas para agrupar outros valores. A mais versátil é list (lista), que pode ser escrita como uma lista de valores (itens) separados por vírgula, entre colchetes. Os valores contidos na lista não precisam ser todos do mesmo tipo. Da mesma forma que índices de string, índices de lista começam em 0, listas também podem ser concatenadas, fatiadas e multiplicadas.
  6. Diferentemente de strings, que são imutáveis, é possível alterar elementos individuais de uma lista:
  7. Diferentemente de strings, que são imutáveis, é possível alterar elementos individuais de uma lista:
  8. Diferentemente de strings, que são imutáveis, é possível alterar elementos individuais de uma lista:
  9. Diferentemente de strings, que são imutáveis, é possível alterar elementos individuais de uma lista:
  10. Diferentemente de strings, que são imutáveis, é possível alterar elementos individuais de uma lista:
  11. Diferentemente de strings, que são imutáveis, é possível alterar elementos individuais de uma lista:
  12. http://turing.com.br/pydoc/2.7/tutorial/controlflow.html
  13. http://turing.com.br/pydoc/2.7/tutorial/controlflow.html
  14. http://turing.com.br/pydoc/2.7/tutorial/controlflow.html
  15. http://www.pythonize.org/blog/tutorial-basico-numpy/