Índice:
- Etapa 1: Instale o Anaconda
- Etapa 2: Baixe o Pacote de CV Aberto
- Etapa 3: Definir Variáveis Ambientais
- Etapa 4: teste para confirmar
- Etapa 5: crie um código para detecção de rosto
- Etapa 6: criar código para criar conjunto de dados
- Etapa 7: Crie um código para treinar o reconhecedor
- Etapa 8: Crie um código para reconhecer os rostos e o resultado
Vídeo: Detecção de rosto + reconhecimento: 8 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
Este é um exemplo simples de detecção e reconhecimento de rosto com OpenCV de uma câmera. NOTA: FIZ ESTE PROJETO PARA CONCURSO DE SENSORES E USEI A CÂMERA COMO SENSOR PARA RASTREAR E RECONHECER FACES. Portanto, nosso objetivo, nesta sessão, 1. Instale o Anaconda 2. Baixe o Open CV Package 3. Defina as variáveis ambientais 4. Teste para confirmar 5 Faça o código para detecção de rosto 6. Faça o código para criar um conjunto de dados 7. Faça o código para treinar o reconhecedor 8. Faça o código para reconhecer os rostos e o resultado.
Etapa 1: Instale o Anaconda
O Anaconda é essencialmente um IDE Python bem embalado que vem com toneladas de pacotes úteis, como NumPy, Pandas, Notebook IPython, etc. Parece ser recomendado em qualquer lugar na comunidade científica. Verifique o Anaconda para instalá-lo.
Etapa 2: Baixe o Pacote de CV Aberto
Em primeiro lugar, vá para o site oficial do OpenCV para baixar o pacote OpenCV completo. Escolha uma versão de sua preferência (2.x ou 3.x). Estou usando Python 2.xe OpenCV 2.x - principalmente porque é assim que os tutoriais OpenCV-Python são configurados / baseados.
No meu caso, extraí o pacote (essencialmente uma pasta) direto para minha unidade F. (F: / opencv).
Etapa 3: Definir Variáveis Ambientais
Copie e cole o arquivo cv2.pyd
O diretório Anaconda Site-packages (por exemplo, F: / Arquivos de programas / Anaconda2 / Lib / site-packages no meu caso) contém os pacotes Python que você pode importar. Nosso objetivo é copiar e colar o arquivo cv2.pyd neste diretório (para que possamos usar a importação cv2 em nossos códigos Python).
Para fazer isso, copie o arquivo cv2.pyd…
A partir deste diretório OpenCV (a parte inicial pode ser um pouco diferente em sua máquina):
# Máquina Python 2.7 e 64 bits: F: / opencv / build / python / 2.7 / x64 # Máquina Python 2.7 e 32 bits: F: / opencv / build / python / 2.7 / x84
Para este diretório Anaconda (a parte inicial pode ser um pouco diferente em sua máquina):
F: / Arquivos de programas / Anaconda2 / Lib / site-packages
Depois de realizar esta etapa, agora seremos capazes de usar import cv2 no código Python. MAS, ainda precisamos trabalhar um pouco mais para que o FFMPEG (codec de vídeo) funcione (para nos permitir fazer coisas como processar vídeos).
Clique com o botão direito em "Meu Computador" (ou "Este PC" no Windows 8.1) -> clique com o botão esquerdo em Propriedades -> clique com o botão esquerdo na guia "Avançado" -> clique com o botão esquerdo no botão "Variáveis de Ambiente …". Adicione uma nova Variável de Usuário para apontar para o OpenCV (x86 para sistema de 32 bits ou x64 para sistema de 64 bits). Estou atualmente em uma máquina de 64 bits.
32-bitOPENCV_DIRC: / opencv / build / x86 / vc12
64 bitsOPENCV_DIRC: / opencv / build / x64 / vc12
Anexe% OPENCV_DIR% / bin à variável de usuário PATH.
Por exemplo, minha variável de usuário PATH se parece com isto …
Antes:
F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts
Depois de:
F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;% OPENCV_DIR% / bin
É isso que terminamos! O FFMPEG está pronto para ser usado!
Etapa 4: teste para confirmar
Precisamos testar se agora podemos fazer isso no Anaconda (via Spyder IDE):
- Importar pacote OpenCV
- Use o utilitário FFMPEG (para ler / gravar / processar vídeos)
Teste 1: podemos importar OpenCV?
Para confirmar que o Anaconda agora é capaz de importar o pacote OpenCV-Python (ou seja, cv2), emita-os no console IPython:
import cv2
imprimir cv2._ version_
Se o pacote cv2 for importado ok sem erros, e a versão cv2 for impressa, então estamos todos bem!
Teste 2: podemos usar o codec FFMPEG?
Coloque uma amostra
input_video.mp4
arquivo de vídeo em um diretório. Queremos testar se podemos:
- leia este arquivo de vídeo.mp4 e
- escrever um novo arquivo de vídeo (pode ser.avi ou.mp4 etc.)
Para fazer isso, precisamos ter um código Python de teste, chame-o de test.py. Coloque-o no mesmo diretório da amostra
input_video.mp4
Arquivo.
Isso é o que
test.py
pode ser parecido com (Observação: muito obrigado às sugestões de Pete e Warren no campo de comentários - substituí meu código de teste original pelo dele - teste você mesmo e nos informe se funciona melhor):
import cv2
cap = cv2. VideoCapture ("input_video.mp4") imprimir cap.isOpened () # True = ler o vídeo com sucesso. Falso - falha ao ler o vídeo. fourcc = cv2. VideoWriter_fourcc (* 'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = gravar vídeo com sucesso. Falso - falha ao gravar o vídeo. cap.release () out.release ()
Este teste é MUITO IMPORTANTE. Se você gostaria de processar arquivos de vídeo, você precisa garantir que o Anaconda / Spyder IDE pode usar o FFMPEG (codec de vídeo). Levei dias para fazê-lo funcionar. Mas espero que demore muito menos tempo!:) Nota: mais uma dica muito importante ao usar o IDE Anaconda Spyder. Certifique-se de verificar o diretório de trabalho atual (CWD) !!!
Etapa 5: crie um código para detecção de rosto
Meta
Nesta sessão,
- Veremos os fundamentos da detecção de rosto usando Classificadores Cascade baseados em recursos Haar
- Vamos estender o mesmo para detecção de olhos, etc.
Detecção de cascata Haar em OpenCV
Aqui vamos lidar com a detecção. O OpenCV já contém muitos classificadores pré-treinados para rosto, olhos, sorriso, etc. Esses arquivos XML são armazenados em opencv / data / haarcascades / pasta. Vamos criar um detector de rosto e olho com OpenCV. Primeiro, precisamos carregar os classificadores XML necessários. Em seguida, carregue nossa imagem de entrada (ou vídeo) em modo de escala de cinza OU podemos usar a câmera (para detecção de rosto em tempo real)
importar numpy como np
import cv2 face_cascade = cv2. CascadeClassifier ('F: / Arquivos de programas / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F: / Arquivos de programas / opencv / sources / data / haarcascades /.xml ') cap = cv2. VideoCapture (0) enquanto 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (cinza, 1.5, 5) para (x, y, w, h) nas faces: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) roi_gray = cinza [y: y + h, x: x + w] roi_color = img [y: y + h, x: x + w] eyes = eye_cascade.detectMultiScale (roi_gray) for (ex, ey, ew, eh) nos olhos: cv2.rectangle (roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) print "found" + str (len (faces)) + "face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()
Etapa 6: criar código para criar conjunto de dados
Estamos fazendo reconhecimento facial, então você precisará de algumas imagens de rosto! Você pode criar seu próprio conjunto de dados ou começar com um dos bancos de dados faciais disponíveis. Http://face-rec.org/databases/ oferece uma visão geral atualizada. Três bancos de dados interessantes são (partes da descrição são citadas em
- AT&T Facedatabase
- Yale Facedatabase A
- Extended Yale Facedatabase B
AQUI estou usando meu próprio conjunto de dados … com a ajuda do código que é fornecido abaixo:
importar numpy como np
import cv2 face_cascade = cv2. CascadeClassifier ('F: / Arquivos de programas / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('inserir id do usuário') sampleN = 0; enquanto 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (grey, 1.3, 5) for (x, y, w, h) em faces: sampleN = amostraN + 1; cv2.imwrite ("F: / Arquivos de programas / projetos / face_rec / facesData / Usuário." + str (id) + "." + str (sampleN) + ".jpg", cinza [y: y + h, x: x + w]) cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1) se amostraN> 20: break cap.release () cv2.destroyAllWindows ()
Etapa 7: Crie um código para treinar o reconhecedor
Crie a função para preparar o conjunto de treinamento
Agora, vamos definir uma função
getImagesWithID (caminho)
que leva o caminho absoluto para o banco de dados de imagem como argumento de entrada e retorna a tupla de 2 listas, uma contendo as faces detectadas e a outra contendo o rótulo correspondente para aquela face. Por exemplo, se o i-ésimo índice na lista de faces representa o quinto indivíduo no banco de dados, então a i-ésima localização na lista de rótulos tem valor igual a 5.
Agora converta as faces do conjunto de dados (que é criado na etapa 6) em arquivo.yml com a ajuda do código que é fornecido abaixo:
importar os
import numpy as np import cv2 from PIL import Image # Para o reconhecimento facial, iremos o LBPH Face Recognizer reconhecizer = cv2.createLBPHFaceRecognizer (); path = "F: / Arquivos de programas / projects / face_rec / facesData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) for f em os.listdir (path)] # print image_path #getImagesWithID (path) faces = IDs = para imagePath em imagePaths: # Leia a imagem e converta para tons de cinza facesImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # Obtenha o rótulo da imagem ID = int (os.path.split (imagePath) [- 1].split (".") [1]) # Detecte o rosto na imagem faces.append (faceNP) IDs.append (ID) cv2.imshow ("Adicionando faces para treinamento", faceNP) cv2.waitKey (10) return np.array (IDs), faces Ids, faces = getImagesWithID (path) reconhecizer.train (faces, Ids) reconhecizer.save ("F: / Arquivos de programas / projects / face_rec / faceREC / trainingdata.yml") cv2.destroyAllWindows ()
usando este código, todos os conjuntos de dados de face convertidos em um único arquivo.yml…..a localização do caminho é ("F: / Arquivos de programas / projects / face_rec / faceREC / trainingdata.yml")
Etapa 8: Crie um código para reconhecer os rostos e o resultado
Guyzz esta é a etapa final na qual podemos criar o código para reconhecer os rostos com a ajuda de sua webcam NESTA ETAPA EXISTEM DUAS OPERAÇÕES QUE VÃO REALIZAR…. 1. capturando o vídeo da cam 2. compare-o com o seu arquivo.yml
importar numpy como npimport cv2 face_cascade = cv2. CascadeClassifier ('F: / Arquivos de programas / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecognizer (); rec.load ("F: / Arquivos de programas / projects / face_rec / faceREC / trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) enquanto 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (grey, 1.5, 5) para (x, y, w, h) nas faces: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) id, conf = rec.predict (cinza [y: y + h, x: x + w]) if (id == 2): id = "alok" if id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" if id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y + h), fonte, 255) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): break cap.release ()
cv2.destroyAllWindows ()
e finalmente o resultado vai chegar bem na sua frente …… você também pode baixar o arquivo zip abaixo do link: Clique aqui para baixar os códigos Então, neste instrutível realizamos a tarefa de detecção + reconhecimento facial usando OpenCV…..se você assim instrutível … por favor, inscreva-se e vote em mim … obrigado amigos:)
Recomendado:
Reconhecimento de imagem com placas K210 e Arduino IDE / Micropython: 6 etapas (com imagens)
Reconhecimento de imagem com placas K210 e Arduino IDE / Micropython: Eu já escrevi um artigo sobre como executar demos OpenMV no Sipeed Maix Bit e também fiz um vídeo de demonstração de detecção de objetos com esta placa. Uma das muitas perguntas que as pessoas fizeram é - como posso reconhecer um objeto que a rede neural não é tr
Detecção, treinamento e reconhecimento de rosto Opencv: 3 etapas
Detecção, treinamento e reconhecimento de rosto Opencv: OpenCV é uma biblioteca de visão de computador de código aberto muito popular para executar tarefas básicas de processamento de imagem, como desfoque, mistura de imagem, aprimoramento de imagem, bem como qualidade de vídeo, limite etc. Além de processamento de imagem, Prova
Reconhecimento de estrelas usando visão computacional (OpenCV): 11 etapas (com imagens)
Reconhecimento de estrelas usando visão computacional (OpenCV): Este instrutível irá descrever como criar um programa de visão computacional para identificar automaticamente padrões de estrelas em uma imagem. O método usa a biblioteca OpenCV (Open-Source Computer Vision) para criar um conjunto de cascatas HAAR treinadas que podem ser
Espelho mágico inteligente flutuante do laptop antigo com reconhecimento de voz Alexa: 6 etapas (com imagens)
Espelho mágico inteligente flutuante de laptop antigo com reconhecimento de voz Alexa: inscreva-se no meu curso 'Eletrônica resumida' aqui: https://www.udemy.com/electronics-in-a-nutshell/?couponCode=TINKERSPARK Confira também meu canal do youtube aqui para mais projetos e tutoriais de eletrônica: https://www.youtube.com/channel/UCelOO
Robô guia com recurso de reconhecimento de voz: 7 etapas (com imagens)
Robô-guia com recurso de reconhecimento de voz: O robô-guia é um robô móvel que fizemos para guiar os visitantes a vários departamentos em nosso campus universitário. Fizemos isso para falar algumas declarações predefinidas e avançar e retroceder de acordo com a voz de entrada. Em nossa faculdade, temos t