Buscar

Matéria Visão Computacional 6

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1
37
1
Leonardo Gomes
Visão Computacional
Aula 6
37
2
Conversa Inicial
37
3
Detecção e descrição de pontos 
característicos
Comparação de pontos característicos
Reconhecimento de caracteres
Rastreio de objeto
Classe para rastreio de objeto
Aula 
37
4
Detecção e descrição de pontos 
característicos
37
5
SIFT
Lowe, 1999
Sucessivos filtros gaussianos
SURF
Bay et al., 2006
Semelhante ao SIFT
Menos pontos característicos
Matrizes Hessianas
Detecção e descrição de pontos 
característicos
37
6
ORB
Rublee et al., 2011
Combina estratégias de outros algoritmos
Desempenho superior ao SIFT e SURF
Detecção e descrição de pontos 
característicos
1 2
3 4
5 6
2
37
7
-pip uninstall opencv-python
-pip install opencv-contrib-python
Instalação
37
8
Objeto gerenciador do algoritmo:
sift = cv2.SIFT_create()
surf = cv2.SURF_create()
orb = cv2.ORB_create()
OpenCV
37
9
kpSift,descritor= sift.detectAndCompute(img, None)
kpSurf,descritor= surf.detectAndCompute(img, None)
kpOrb,descritor= orb.detectAndCompute(img, None)
Detectar pontos chave
37
10
img = cv2.drawKeypoints(img, kp, None)
cv2.imshow("Image", img)
Apresentar pontos na imagem
37
11
Pontos na imagem - SIFT
Figuras 1 e 2 – Aplicação de SIFT
Jacob Fryxlius/
Amazon
37
12
Comparação de pontos característicos
7 8
9 10
11 12
3
37
13
Principais uso:
Detectar objeto em imagens
Principal estratégia:
Força Bruta
BFMatcher
fb=cv2.BFMatcher(cv2.NORM_HAMMING,
crossCheck=True)
combinacoes = fb.match(des1, des2)
Comparação de pontos característicos
37
14
combinacoes=sorted(combinacoes,key=
lambda x: x.distance)
resultado = cv2.drawMatches(img1, kp1, img2, kp2,
combinacoes[:10], None, flags=2)
Ordenação e Apresentação
37
15
Resultado
Gomes, 2021 Figura 3
37
16
Resultado
Gomes, 2021 Figura 4
37
17
Reconhecimento de caracteres
37
18
Optical Character Recognition
Reconhecimento automático de caracteres
Aplicações:
Digitalização de documentos
Tradutor automático
Busca de placa de carros
OCR
13 14
15 16
17 18
4
37
19
Diversas soluções
Mais popular hoje:
Tesseract – Google
https://github.com/tesseract-ocr/tesseract
Deep Learning
Código Aberto
Tesseract
37
20
Instalar o Tesseract
Software em si
github
Depois, instalar o pytesseract
Ponte que liga o software com o Python
pip install pytesseract
Instalação
37
21
import pytesseract
from PIL import Image
pytesseract.pytesseract.tesseract_cmd=
r'D:\Tesseract‐OCR\tesseract.exe'
img = Image.open("fpessoa.png")
texto=
pytesseract.image_to_string(img,lang="por")
print(texto)
Código
37
22
Resultado
Gomes, 2021 Figura 5 e 6 - OCR
37
23
Rastreio de objeto
37
24
Rastreio em vídeo
Diversas aplicações:
Contagem de veículo
Pessoas em um câmera de segurança
Opencv não apresenta uma função pronta
Mas apresenta diversas ferramentas
Rastreio de objetos
19 20
21 22
23 24
5
37
25
rastreador = Rastreador()
cap = cv2.VideoCapture("rua.mp4")
detector = cv2.createBackgroundSubtractorMOG2(
history=100, varThreshold=40)
Código
37
26
while True:
ret, frame = cap.read()
altura, largura, _ = frame.shape
roi = frame[812: 918, 702: 870]
mascara = detector.apply(roi)
_, mascara = cv2.threshold(mascara, 254, 
255, cv2.THRESH_BINARY)
Código
37
27
contornos, _ = cv2.findContours(mascara,
cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
detectados = []
for cnt in contornos:
area = cv2.contourArea(cnt)
if area > 400:
x, y, w, h = cv2.boundingRect(cnt)
detectados.append([x, y, w, h])
Código
37
28
ids_caixas = rastreador.atualizar(detectados)
for id_caixa in ids_caixas:
x, y, w, h, id = id_caixa
cv2.putText(roi, str(id), (x, y ‐
15),cv2.FONT_HERSHEY_PLAIN, 2, (255, 0, 0), 2)
cv2.rectangle(roi, (x, y), (x + w, y + h), (0, 
255, 0), 3)
Código
37
29
cv2.imshow("roi", roi)
cv2.imshow("Frame", frame)
cv2.imshow("Mask", mascara)
key = cv2.waitKey(30)
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
Código
37
30
Classe para rastreio de objeto
25 26
27 28
29 30
6
37
31
Não é absolutamente necessário
Ajuda a organizar a separar o código por suas 
funções
Classe para rastreio
37
32
import math
class Rastreador:
def __init__(self):
self.pontos_centrais = {}
self.contador_id = 0
Código
37
33
def atualizar(self, retangulos):
bbs_ids = []
for rect in retangulos:
x, y, w, h = rect
cx = (x + x + w) // 2
cy = (y + y + h) // 2
Código
37
34
mesmo_objeto = False
for id, pt in self.pontos_centrais.items():
dist = math.hypot(cx ‐ pt[0], cy ‐ pt[1])
if dist < 25:
self.pontos_centrais[id] = (cx, cy)
print(self.pontos_centrais)
bbs_ids.append([x, y, w, h, id])
mesmo_objeto = True
break
Código
37
35
if mesmo_objeto is False:
self.pontos_centrais[self.contador_id] = (cx, cy)
bbs_ids.append([x, y, w, h, self.contador_id])
self.contador_id += 1
Código
37
36
novos_pontos_centrais = {}
for bb_id in bbs_ids:
_, _, _, _, identificador = bb_id
centro = self.pontos_centrais[identificador]
novos_pontos_centrais[identificador] =
centro
self.pontos_centrais =
novos_pontos_centrais.copy()
return bbs_ids
Código
31 32
33 34
35 36
7
37
37
Resultado
Gomes, 2021 Figura 7 – Rastreio de objeto
37
38
37 38

Outros materiais