Índice:

Projetos básicos do OpenCV: 5 etapas
Projetos básicos do OpenCV: 5 etapas

Vídeo: Projetos básicos do OpenCV: 5 etapas

Vídeo: Projetos básicos do OpenCV: 5 etapas
Vídeo: Como dar seus primeiros passos com OPENCV em Python 2024, Julho
Anonim
Projetos Básicos OpenCV
Projetos Básicos OpenCV

Neste projeto, exploramos algumas funcionalidades básicas do OpenCV por meio de 4 projetos simples envolvendo uma transmissão de vídeo ao vivo. São eles: reconhecimento facial, remoção de fundo, renderização visual especial de bordas e aplicação de um efeito de desfoque à transmissão de vídeo ao vivo. Meu principal objetivo ao tentar esses projetos foi simplesmente molhar os pés com a interface OpenCV, já que pretendo me aprofundar no campo da visão computacional

Suprimentos

  • Computador executando Python
  • Biblioteca CV aberta, biblioteca Numpy, biblioteca tkinter, biblioteca sys
  • Câmera para conectar ao computador (se o computador ainda não tiver uma)
  • Arquivo python do programa (incluído neste instrutível)
  • arquivo xml haarcascade (incluído neste instrutível)

Etapa 1: Função FaceDetect

Função FaceDetect
Função FaceDetect
Função FaceDetect
Função FaceDetect

Esta função mostra o vídeo da sua câmera com quadrados verdes em todos os rostos que ela captar. No código, usamos a função cv2. VideoCapture () para armazenar o vídeo que estamos capturando em um objeto chamado "capture". O CAPTURE_INDEX é um número definido pelo seu computador que corresponde ao índice da sua câmera na lista de entrada de vídeo do computador. Se você não tiver uma câmera externa conectada ao computador, 0 ou 1 deve funcionar.

O objeto face_cascade é inicializado usando a função cascadeClassifier e o arquivo "haarcascade_frontalface_default.xml" encontrado no github OpenCV. Usamos este objeto para armazenar os rostos detectados na lista "rostos" como uma entrada de tupla de quatro vias segurando as faces x, coordenada y, largura e altura. Em seguida, desenhamos um retângulo que envolve perfeitamente o rosto usando a função cv2.rectangle

A partir deste vídeo, o OpenCV captura muitas imagens em nosso loop while usando capture.read () e armazena a imagem em um quadro que chamamos de "img". Cada imagem é então interpretada e modificada como desejamos. Para faceDetect, tornamos a imagem cinza usando a função cvtColor que converte qualquer imagem fornecida no primeiro parâmetro para um tipo particular de cor de imagem especificada no segundo parâmetro. A lista de valores aceitáveis para o segundo parâmetro pode ser encontrada online. Em seguida, exibimos a imagem em uma janela chamada "Detectando o rosto" usando a função imshow () que usa uma string para o nome da janela e o quadro da imagem a ser exibido.

Finalmente, esperamos que o usuário insira a tecla q usando a função cv2.waitKey (). A máscara 0xFF é usada como uma convenção para computadores de 64 bits. Depois que o usuário finaliza o fluxo de vídeo, a função faceDetect libera o objeto de captura e, em seguida, destrói todas as outras janelas abertas na interface OpenCV. Todas as outras funções seguem uma estrutura de design semelhante.

Etapa 2: Função BackgroundRemove

Função BackgroundRemove
Função BackgroundRemove
Função BackgroundRemove
Função BackgroundRemove

Esta função tenta remover a parte do fundo do nosso vídeo e deixar apenas a imagem do primeiro plano. Pode não funcionar em algumas câmeras, pois elas utilizam uma funcionalidade de ajuste de iluminação que é ativada quando diferentes objetos / focos entram no quadro. Se a função backgroundRemove não funcionar, não se preocupe - pode ser apenas a sua câmera!

Para usar esta função, afaste-se do quadro da câmera e pressione a tecla "d" para capturar a imagem de fundo. É importante que não haja objetos em movimento no plano de fundo que você deseja capturar. Então, podemos voltar para o enquadramento da câmera. Se a função funcionou, o usuário só deve se ver no stream de vídeo da função. Qualquer ruído / manchas pretas na imagem do primeiro plano pode ser resultado do ajuste de iluminação da câmera. Para capturar outro plano de fundo, pressione a tecla "r" para reinicializar e, em seguida, pressione "d" novamente.

Algumas dicas importantes para esta função é o uso do booleano "flag" que é levantado no instante em que o usuário pressiona o botão d. Isso captura o fundo e nos permite removê-lo do vídeo transmitido pela função. Nosso objetivo é armazenar a imagem de fundo em ref_img para que possamos distingui-la da imagem de primeiro plano, que captura qualquer objeto em movimento. Usamos a função cv2.subtract () para subtrair a imagem do primeiro plano da imagem de fundo e vice-versa, e então cancelar quaisquer diferenças minúsculas nas duas imagens imediatamente após. O fundo está escurecido.

O fgmask é feito usando a diferença entre essas duas imagens e então aplicado ao fluxo de vídeo das funções usando a função OpenCV cv2.bitwise_and ().

Etapa 3: Função VideoEdges

Função VideoEdges
Função VideoEdges
Função VideoEdges
Função VideoEdges

Esta função retorna nosso stream de vídeo ao vivo, mas as bordas detectáveis são renderizadas em branco, enquanto todo o resto fica escuro. O que distingue esta função das outras funções é a conversão do nosso vídeo original do formato RBG para HSV, que significa matiz, saturação e variação - um método diferente de processamento de luz e cor de um vídeo. Com este método, podemos distinguir mais facilmente os contornos no vídeo, aplicando um filtro (red_low a red_high).

O Canny Edge Detection é usado para detectar as bordas de uma imagem. Ele aceita uma imagem em escala de cinza como entrada e usa um algoritmo de estágios múltiplos.

Etapa 4: Função VideoBlur

Função VideoBlur
Função VideoBlur
Função VideoBlur
Função VideoBlur

Esta função é usada para adicionar um efeito de desfoque ao nosso stream de vídeo. A função simples chama a função GaussianBlur cv2 em nosso quadro. Mais informações sobre a função gaussianBlur podem ser encontradas aqui:

opencv-python-tutroals.readthedocs.io/en/l…

Etapa 5: melhorias

A função mais sensível neste projeto é a função de remoção de fundo, pois requer o uso de uma câmera que não possui funcionalidade de ajuste de iluminação. Pode haver um conjunto melhor de funções na biblioteca OpenCV que pode levar em conta esse ajuste de iluminação e remover suavemente o fundo (semelhante a uma tela verde).

Também podemos utilizar outras funções de detecção de rosto que podem produzir objetos com mais funcionalidade além de apenas retornar as coordenadas (x, y). Talvez um programa de reconhecimento facial com a capacidade de lembrar rostos não fosse muito difícil de implementar.

A função de desfoque pode ser mais customizada por meio do controle intuitivo pelo usuário. Por exemplo, o usuário pode querer ajustar a intensidade do efeito de desfoque ou selecionar uma área específica dentro do quadro para desfocar.

Recomendado: