Baixe o app para aproveitar ainda mais
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
Compartilhar