Leitores como você ajudam a apoiar o MUO. Quando você faz uma compra usando links em nosso site, podemos ganhar uma comissão de afiliado. Consulte Mais informação.

Você pode usar o desfoque facial para ocultar o rosto de uma pessoa, em um vídeo ou imagem, por vários motivos. Questões de privacidade e segurança são as mais predominantes. A maioria das plataformas de compartilhamento de vídeo e software de edição de vídeo possui a funcionalidade de desfoque facial integrada.

Você pode criar seu próprio programa de desfoque facial do zero usando Python e as bibliotecas OpenCV e NumPy.

Configurando seu ambiente

Para prosseguir com este artigo, você precisa estar familiarizado com o noções básicas de Python e ter uma compreensão básica de usando a biblioteca NumPy.

Abra qualquer IDE Python com o qual você se sinta confortável. Crie um ambiente virtual no qual você instalará as bibliotecas necessárias. Crie um novo arquivo Python. Navegue até o terminal e execute o seguinte comando para instalar as bibliotecas necessárias. Passe as bibliotecas como uma lista delimitada por espaço.

instagram viewer
pip instalar OpenCV-python NumPy

Você usará o OpenCV para obter e pré-processar a entrada de vídeo e o NumPy para trabalhar com matrizes.

Depois de instalar as bibliotecas, aguarde o IDE atualizar os esqueletos do projeto. Quando a atualização estiver concluída e o ambiente estiver pronto, você estará livre para começar a codificar.

O código-fonte completo está disponível em um Repositório GitHub.

Importando as bibliotecas necessárias

Comece importando as bibliotecas OpenCV e NumPy. Isso permitirá que você chame e use quaisquer funções que eles suportem. Importar OpenCV-python como cv2.

importar cv2
importar entorpecido como np

Os módulos OpenCV-python usam o nome cv2 como uma convenção estabelecida pela comunidade OpenCV. OpenCV-python é um wrapper Python da biblioteca OpenCV que é escrita em C++.

Tomando sua opinião

Crie uma variável e inicialize o Captura de vídeo objeto. Passe zero como argumento se quiser usar a câmera principal do computador como fonte de entrada. Para usar uma câmera externa conectada ao seu computador, passe uma. Para executar o desfoque facial em um vídeo pré-gravado, passe o caminho do vídeo. Para usar uma câmera remota, passe a URL da câmera contendo seu endereço IP e número da porta.

cap = cv2.VideoCapture(0)

Para realizar o desfoque facial na entrada, você precisará de três funções:

  • Uma função que irá pré-processar a entrada.
  • Uma função que irá desfocar o rosto na entrada.
  • Uma função principal que controlará o fluxo do programa e exibirá a saída.

Pré-processamento da entrada de vídeo

Crie uma função de pré-processamento de entrada que receberá cada quadro do vídeo de entrada como sua entrada. Inicialize a classe CascadeClassifier que você usará para detecção facial. Redimensione o quadro para 640 por 640 pixels. Converta o quadro redimensionado em escala de cinza para facilitar o processamento e, finalmente, detecte os rostos na entrada e vincule-os com retângulos.

defimage_preprocess(quadro):
face_detector = cv2.CascadeClassifier (cv2.data.haarcascades
+ 'haarcascade_frontalface_default.xml')

resized_image = cv2.resize (quadro, (640, 640))

gray_image = cv2.cvtColor (resized_image,
cv2.COLOR_BGR2GRAY)

face_rects = face_detector.detectMultiScale(
gray_image, 1.04, 5, minSize=(20, 20))

retornar resized_image, face_rects

Esta função retorna uma tupla contendo a imagem redimensionada e uma lista de retângulos que representam as faces detectadas.

Desfocando o rosto

Crie uma função de desfoque que irá desfocar os rostos em sua entrada. A função usa o quadro redimensionado e a lista de retângulos delimitando as faces retornadas pela função de pré-processamento como entrada. Faz um loop sobre cada retângulo de face. Calcula o centro de cada retângulo e o raio do círculo desfocado. Cria uma imagem preta com as mesmas dimensões do quadro redimensionado inicializando todos os pixels em zero. Desenha um círculo branco na imagem preta cujo centro está no retângulo da face usando o raio calculado. Por fim, desfoca a imagem no círculo branco.

defface_blur(resized_frame, face_rects):
para (x, y, w, h) em face_rects:
# Especificando o centro e o raio
# do círculo de desfoque
centro_x = x + w // 3
centro_y = y + h // 3
raio = h // 1

# criando uma imagem preta com similar
# dimensões como o quadro
máscara = np.zeros((resized_frame.shape[:3]), np.uint8)

# desenha um círculo branco na região da face da moldura
cv2.circle (mask, (center_x, center_y), radius,
(255, 255, 255), -1)

# desfocando todo o quadro
blurred_image = cv2.medianBlur (resized_frame, 99)

# reconstruindo o quadro:
# - os pixels do quadro desfocado se máscara > 0
# - caso contrário, pegue os pixels do quadro original
resized_frame = np.where (máscara > 0, imagem_desfocada,
quadro_redimensionado)

retornar quadro_redimensionado

A função usa o NumPy onde() função para reconstruir o quadro durante o desfoque.

Controlando o fluxo do seu programa

Crie uma função principal que atuará como o ponto de entrada do seu programa. Ele então controlará o fluxo do programa. A função iniciará um loop infinito para capturar continuamente os quadros da entrada de vídeo. Chame o método read do objeto cap para ler um quadro da câmera.

A função então passará o quadro para a função de pré-processamento e passará os valores de retorno para outra função, face_blur, para obter uma imagem borrada. Em seguida, ele redimensiona o quadro retornado pela função de desfoque e exibe a saída.

defprincipal():
enquantoVerdadeiro:
sucesso, frame = cap.read()
resized_input, face_rects = image_preprocess (quadro)
blurred_image = face_blur (resized_input, face_rects)

# Exibindo a imagem desfocada
cv2.imshow("imagem borrada", cv2.resize (blurred_image, (500, 500)))

se cv2.waitKey(1) == ordem("q"):
quebrar

A função também encerra a exibição de saída quando o usuário pressiona a tecla q.

Executando o programa

Assegure-se de que a função principal seja executada primeiro ao executar o script. Essa condição será falsa se você importar o script como um módulo em outro programa.

se __nome__ == "__principal__":
principal()

Isso permite que você use o script como um módulo ou execute-o como um programa autônomo. Quando o programa for executado, você deverá ver uma saída semelhante a esta:

O rosto está borrado e irreconhecível.

Aplicações do mundo real de desfoque facial

Você pode aplicar desfoque facial em vários tipos de aplicativos para proteger a privacidade das pessoas. Os serviços de visualização de rua e mapeamento usam desfoque para desfocar os rostos das pessoas nas imagens que capturam. A aplicação da lei usa o desfoque facial para proteger a identidade das testemunhas.

Muitas plataformas de compartilhamento de vídeo também integraram um recurso de desfoque facial para seus usuários. A comparação do uso do desfoque facial nessas áreas ajudará você a observar como outras plataformas integram a tecnologia.