A detecção de gênero das imagens faciais é uma das muitas aplicações fascinantes da visão computacional. Neste projeto, combinamos o OpenCV para a localização de confronto e a API Roboflow para classificação de gênero, fazendo um dispositivo que identifica rostos, verifica -os e prevê seu gênero. Utilizamos o Python, principalmente no Google Colab, para digitar e executar este código. Esse direto fornece um passo a passo fácil de seguir do código, esclarecendo cada etapa para que você possa entender e aplicá-lo aos seus empreendimentos.
Este artigo foi publicado como parte do blogathon. ÍNDICE TABELA
A etapa principal é conseqüência das bibliotecas vitais. Estamos utilizando o OpenCV para preparação de imagens, Numpy para lidar com clusters e Matplotlib para visualizar o que vem. Também enviamos uma imagem que continha rostos que queríamos analisar.
No Google Colab, o File.upload () trabalha capacita os clientes a transferir registros, como imagens, de suas máquinas de vizinhança para o ambiente Colab. Após o upload, a imagem é guardada em uma referência de palavra chamada transferida, onde as chaves se comparam aos nomes dos registros. A for loop é então usado para extrair o caminho do arquivo para processamento adicional. Para lidar com tarefas de processamento de imagens, o OpenCV é empregado para detectar rostos e desenhar caixas delimitadoras ao seu redor. Ao mesmo tempo, o matplotlib é utilizado para visualizar os resultados, incluindo a exibição da imagem e os rostos cortados.
from google.colab import files import cv2 import numpy as np from matplotlib import pyplot as plt from inference_sdk import InferenceHTTPClient # Upload image uploaded = files.upload() # Load the image for filename in uploaded.keys(): img_path = filename
Em seguida, empilhamos a demonstração de cascata de Haar da OpenCV, que é pré-treinada para identificar faces. Este modelo digitaliza a imagem para padrões semelhantes a rostos humanos e devolve suas coordenadas.
geralmente é uma estratégia predominante para detecção de objetos. Ele identifica bordas, texturas e padrões associados ao objeto (neste caso, faces). O OpenCV fornece um modelo de detecção de rosto pré-treinado, que é carregado usando `cascadeclassifier.`
# Load the Haar Cascade model for face detection face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades 'haarcascade_frontalface_default.xml')
empilhamos a imagem transferida e alteramos -a para escala de cinza, pois isso faz a diferença em fazer avanços na exatidão da localização. Posteriormente, usamos o detector de rosto para encontrar rostos na imagem.
# Load the image and convert to grayscale img = cv2.imread(img_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Detect faces in the image faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
A inferênciaHttpClient simplifica a interação com os modelos pré-treinados do Roboflow, configurando um cliente com a tecla Roboflow API URL e API. Essa configuração permite que as solicitações sejam enviadas para o modelo de detecção de gênero hospedado no Roboflow. A chave da API serve como um identificador exclusivo para autenticação, permitindo acesso seguro e utilização da API do Roboflow.
# Initialize InferenceHTTPClient for gender detection CLIENT = InferenceHTTPClient( api_url="https://detect.roboflow.com", api_key="USE_YOUR_API" )Etapa 5: Processando cada face detectada
Largamos por cada face detectada, desenhamos um retângulo ao seu redor e cortamos a imagem da face para um processamento adicional. Cada imagem de face cortada é temporariamente salva e enviada para a API Roboflow, onde o modelo de detecção de gênero-qiyyyg/2 é usado para prever o gênero.
O modelo de detecção de gênero-qiyyyg/2 é um modelo de aprendizado profundo pré-treinado otimizado para classificar o gênero como homem ou mulher com base em recursos faciais. Ele fornece previsões com uma pontuação de confiança, indicando o quão certo é o modelo sobre a classificação. O modelo é treinado em um conjunto de dados robusto, permitindo que ele faça previsões precisas em uma ampla gama de imagens faciais. Essas previsões são retornadas pela API e usadas para rotular cada face com o nível de gênero e confiança identificado.
Para cada face reconhecida, o sistema desenha uma caixa delimitadora usando cv2.rectangle () para destacar visualmente a face na imagem. Em seguida, ele colhe a região da face usando o fatiamento (face_img = img [y: y h, x: x w]), isolando -o para processamento adicional. Depois de salvar temporariamente a face cortada, o sistema o envia para o modelo Roboflow via client.infer (), que retorna a previsão de gênero junto com uma pontuação de confiança. O sistema adiciona esses resultados como etiquetas de texto acima de cada face usando cv2.putText (), fornecendo uma sobreposição clara e informativa.
Etapa 6: exibindo os resultados
# Initialize face count face_count = 0 # List to store cropped face images with labels cropped_faces = [] # Process each detected face for (x, y, w, h) in faces: face_count = 1 # Draw rectangles around the detected faces cv2.rectangle(img, (x, y), (x w, y h), (255, 0, 0), 2) # Extract the face region face_img = img[y:y h, x:x w] # Save the face image temporarily face_img_path = 'temp_face.jpg' cv2.imwrite(face_img_path, face_img) # Detect gender using the InferenceHTTPClient result = CLIENT.infer(face_img_path, model_) if 'predictions' in result and result['predictions']: prediction = result['predictions'][0] gender = prediction['class'] confidence = prediction['confidence'] # Label the rectangle with the gender and confidence label = f'{gender} ({confidence:.2f})' cv2.putText(img, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 0, 0), 2) # Add the cropped face with label to the list cropped_faces.append((face_img, label))
# Converta a imagem de BGR para RGB para exibição img_rgb = cv2.cvtcolor (img, cv2.color_bgr2rgb) # Exiba a imagem com rostos detectados e etiquetas de gênero plt.figure (figSize = (10, 10))) plt.imshow (img_rgb) plt.axis ('off') plt.title (f "faces detectadas: {face_count}") plt.show () # Exiba cada rosto cortado com seu rótulo horizontalmente Fig, eixos = plt.sublots (1, face_count, figSize = (15, 5)) para i, (face_img, rótulo) em enumerado (cortada_faces): FACE_RGB = CV2.CVTCOLOR (FACE_IMG, CV2.COLOR_BGR2RGB) eixos [i] .imshow (face_rgb) eixos [i] .xis ('off') eixos [i] .set_title (etiqueta) plt.show ()
Conversão de imagem:
Como o OpenCV usa o formato BGR por padrão, convertemos a imagem em RGB usando CV2.CVTCOLOR () para exibição de cores correta em matplotlib.# Initialize InferenceHTTPClient for gender detection CLIENT = InferenceHTTPClient( api_url="https://detect.roboflow.com", api_key="USE_YOUR_API" )
Conclusão
key tkeaways
combinando dispositivos como Roboflow para dedução da AI, OpenCV para preparação de imagens e Matplotlib para visualização, o empreendimento combina efetivamente inovações diferentes para realizar seus objetivos.
Q1. Qual é o objetivo do projeto?
a. O projeto utilizou o modelo de detecção de gênero do Roboflow para inferência de IA, OpenCV para processamento de imagens e matplotlib para visualização. Também usou o Python para scripts e manuseio de dados.
Q3. Como o modelo de detecção de gênero funciona?a. O modelo analisa imagens para detectar faces e depois classifica cada face detectada como homem ou mulher com base nos algoritmos de AI treinados. Ele gera pontuações de confiança para as previsões.
Q4. quão precisa é a detecção de gênero? O modelo demonstra alta precisão com pontuações de confiança indicando previsões confiáveis. Por exemplo, as pontuações de confiança nos resultados foram acima de 80%, mostrando um desempenho forte. Q5.Que tipo de imagens o modelo pode processar?
A mídia mostrada neste artigo não é de propriedade da Analytics Vidhya e é usada a critério do autor.Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3