Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Rastreamento facial usando Arduino

Componentes e suprimentos

Arduino UNO
× 1
web cam
× 1
Micro servos
× 2
Pan-Tilt
× 1
Breadboard (genérico)
× 1

Aplicativos e serviços online

Python 2.7
OpenCV

Sobre este projeto


Em um tutorial anterior, compartilhei como você pode se comunicar entre o Arduino e o Python usando o módulo 'pyserial' e controlar um LED. Se você ainda não viu, confira aqui:COMUNICAÇÃO ENTRE ARDUINO E PYTHON!

E como você pode detectar a cor de um objeto e rastreá-lo na tela, verifique aqui:DETECÇÃO DE COR USANDO OPENCV E PYTHON.

Neste tutorial, mostrarei como rastrear faces usando Arduino e Python e fazer a câmera seguir o rosto. Isso pode parecer difícil, mas acredite em mim, não é. Tudo que você precisa é um conhecimento básico de Arduino e Python.

Então vamos começar...





Etapa 1:Coisas de que você vai precisar


Os requisitos são mínimos. Aqui, forneci uma lista de partes de tudo que você precisa:

Requisitos de hardware:
  • Arduino UNO (você pode usar outras placas)
  • Web Cam (Mini Web Cam)
  • Servos x 2 (estarei usando micro servos, mas você pode usar Servos padrão)
  • Breadboard (para prototipagem)
  • Kit Servo Pan Tilt (você pode construir um se quiser)

Requisitos de software:
  • Python 2.7 (deve ser instalado, o sistema operacional Linux geralmente o tem pré-instalado)
  • OpenCV (você pode baixá-lo separadamente ou instalar usando 'pip install' explicado mais adiante)
  • pyserial (pode ser instalado com pip)
  • entorpecido.
  • Haarcascade.

Depois que tudo estiver reunido, podemos prosseguir para a Etapa de Instalação ...





Etapa 2:Configurando o ambiente Python


Instalando Python:

Portanto, primeiro precisamos do Python 2.7 instalado e funcionando. Para fazer isso, primeiro baixe e instale o python 2.7.14. Para verificar se ele está instalado corretamente, vá para: Pesquisa do Windows>> Digite "IDLE">> Pressione Enter. Um Python Shell deve aparecer.

OU

Na pesquisa, digite 'CMD' e pressione Enter para abrir o Prompt de Comando. No CMD, digite >> python e pressione Enter, A interface Python deve ser exibida.

Se você vir um erro no CMD, não entre em pânico, você provavelmente precisará definir a variável de ambiente. Você pode seguir este tutorial Aqui para configurar a variável de ambiente.

Instalação de 'pyserial', 'OpenCV "e" numpy "em Python:

Para instalar esses módulos, usaremos o pip install,

Primeiro abra o CMD e digite os seguintes códigos:-
 > pip install serial 
> pip install opencv-python
> pip install numpy

esses comandos irão instalar os módulos necessários. Agora podemos passar para a parte de codificação ...





Etapa 3:Script Python


Antes de começar a escrever o código, a primeira coisa a fazer é criar uma nova pasta, pois todo o código precisa ser armazenado na mesma pasta. Portanto, crie uma nova pasta com o nome que desejar. e baixe o 'Haarcascade' abaixo e cole na pasta.

Agora abra o bloco de notas e escreva o script abaixo, salve-o como 'face.py' na mesma pasta do haarcascade. (Você pode baixar o código que forneci no arquivo abaixo):
  #importar todos os módulos necessários 
importar numpy como np
importar serial
importar tempo
importar sys
importar cv2
#Setup Caminho de comunicação para o arduino (no lugar de 'COM5' coloque a porta à qual seu arduino está conectado)
arduino =serial.Serial ('COM5', 9600)
time.sleep (2)
print ("Conectado ao arduino ...")
#importando o Haarcascade para detecção de rosto
face_cascade =cv2.CascadeClassifier ('haarcascade_frontalface_default.xml')
#Para capturar o fluxo de vídeo de webcam.
cap =cv2.VideoCapture (0)
#Leia a imagem capturada, converta-a para imagem cinza e encontre rostos
enquanto 1:
ret, img =cap.read ()
cv2.resizeWindow ('img', 500.500)
cv2.line (img, (500.250), (0,250), (0,255,0), 1)
cv2.line ( img, (250,0), (250.500), (0,255,0), 1)
cv2.circle (img, (250, 250), 5, (255, 255, 255), -1)
cinza =cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
faces =face_cascade.detectMultiScale (cinza, 1.3)
#detectar o rosto e faça um retângulo ao redor dele.
para (x, y, w, h) nas faces:
cv2.rectangle (img, (x, y), (x + w, y + h), ( 0,255,0), 5)
roi_gray =cinza [y:y + h, x:x + w]
roi_color =img [y:y + h, x:x + w]
arr ={y:y + h, x:x + w}
imprimir (arr)

imprimir ('X:' + str (x))
imprimir ( 'Y:' + str (y))
print ('x + w:' + str (x + w))
print ('y + h:' + str (y + h))
# Centro de roi (retângulo)
xx =int (x + (x + h)) / 2
yy =int (y + (y + w)) / 2
imprimir (xx)
print (yy)
center =(xx, yy)
# enviando dados para o arduino
print ("Center of Rectangle is:", center)
dados ="X {0:d} Y {1:d} Z" .format (xx, yy)
print ("output ='" + data + "'")
arduino.write ( dados)
#Exibe o fluxo.
cv2.imshow ('img', img)
#Pressione 'Esc' para encerrar a execução
k =cv2.waitKey (30) &0xff
se k ==27:
quebrar

Depois de fazer isso, prossiga para escrever o código para o Arduino ...
haarcascade_frontalface_default.xml face.py





Etapa 4:Código Arduino


Depois que o script python estiver pronto, precisamos do esboço do arduino para controlar o servo. Consulte o código abaixo, cole-o no Arduino IDE e salve-o como 'servo.ino' na mesma pasta que face.py e haarcascade. carregue o código e passe para a próxima etapa para fazer as conexões.

(Arquivo para download fornecido abaixo.)
  #include  
Servo servoVer; // Servo vertical
Servo servoHor; // Servo horizontal
int x;
int y;
int prevX;
int prevY;
configuração vazia ()
{
Serial .begin (9600);
servoVer.attach (5); // Anexe o servo vertical ao pino 5
servoHor.attach (6); // Anexe o servo horizontal ao pino 6
servoVer.write (90);
servoHor.write (90);
}
void Pos ()
{
if (prevX! =x || prevY! =y)
{
int servoX =map (x, 600, 0, 70, 179);
int servoY =map (y , 450, 0, 179, 95);
servoX =min (servoX, 179);
servoX =max (servoX, 70);
servoY =min (servoY, 179);
servoY =max (servoY, 95);

servoHor.write (servoX);
servoVer.write (servoY);
}
}
void loop ()
{
if (Serial.available ()> 0)
{
if (Serial.read () =='X')
{
x =Serial.parseInt ();
if (Serial.read () =='Y')
{
y =Serial.parseInt ();
Pos ();
}
}
while (Serial.available ()> 0)
{
Serial.read ();
}
}
}
servo.ino





Etapa 5:Mecanismo de Pan-Tilt:-


Usei um kit já disponível para o Pan-Tilt. Se quiser, pode fazer você mesmo usando madeira / plástico ou até mesmo imprimir em 3D.

O que usei é muito barato e muito fácil de montar. No entanto, se quiser instruções sobre como fazer isso, você pode encontrá-las aqui.





Etapa 6:Fazendo conexões


O circuito é muito simples. Basta conectar dois servos ao Arduino.
  • Vertical para pino 5
  • horizontal para pino 6
  • Potência para + 5V
  • Terra para GND

Verifique o diagrama do circuito para referência.





Etapa 7:Teste

  • Depois que tudo é feito, a última coisa a fazer é testar se funciona. Para testar primeiro, certifique-se de que os servos estão conectados corretamente ao arduino e que o sketch foi carregado.
  • Após o upload do esboço, certifique-se de fechar o IDE para que a porta esteja livre para se conectar ao python.
  • Agora abra 'face.py' com Python IDLE e pressione 'F5' para executar o código. A conexão com o arduino levará alguns segundos e você deverá ver uma janela transmitindo a webcam. Agora o código detectará seu rosto e os servos o rastrearão.
  • O servo deve se mover conforme você move o objeto. Agora, basta conectar a câmera aos servos para que ela se mova junto com os servos.

Espero que você goste. e aprender algo novo.

Obrigada!

Código

  • servo.ino
  • Snippet de código # 2
  • Snippet de código # 3
servo.ino Arduino
Erro ao abrir o arquivo.
Snippet de código # 2 Texto simples
 #importar todos os módulos necessáriosimportar numpy como npimport serialimport timeimport sysimport cv2 # Configurar caminho de comunicação para arduino (no lugar de 'COM5' coloque a porta à qual seu arduino está conectado) arduino =serial.Serial ('COM5', 9600 ) time.sleep (2) print ("Conectado ao arduino ...") # importando o Haarcascade para detecção de rostoface_cascade =cv2.CascadeClassifier ('haarcascade_frontalface_default.xml') # Para capturar o fluxo de vídeo de webcam.cap =cv2.VideoCapture (0) #Leia a imagem capturada, converta-a para imagem cinza e encontre faces enquanto 1:ret, img =cap.read () cv2.resizeWindow ('img', 500.500) cv2.line (img, (500.250), (0,250 ), (0,255,0), 1) cv2.line (img, (250,0), (250.500), (0,255,0), 1) cv2.circle (img, (250, 250), 5, (255 , 255, 255), -1) cinza =cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) faces =face_cascade.detectMultiScale (cinza, 1.3) #detecte a face e faça um retângulo ao redor dela. para (x, y, w, h) nas faces:cv2.rectangle (img, (x, y), (x + w, y + h), (0,255,0), 5) roi_gray =cinza [y:y + h, x:x + w] cor_roi =img [y:y + h, x:x + w] arr ={y:y + h, x:x + w} print (arr) print ('X:' + str (x)) print ('Y:' + str (y)) print ('x + w:' + str (x + w)) print ('y + h:' + str (y + h)) # Centro de roi (Retângulo) xx =int (x + (x + h)) / 2 yy =int (y + (y + w)) / 2 imprimir (xx) imprimir (yy) centro =(xx, yy) # envio dados para arduino print ("Centro do retângulo é:", centro) data ="X {0:d} Y {1:d} Z" .format (xx, yy) print ("output ='" + data + "' ") arduino.write (data) #Exibe o stream. cv2.imshow ('img', img) #Hit 'Esc' para encerrar a execução k =cv2.waitKey (30) &0xff if k ==27:break 
Snippet de código # 3 Texto simples
 #include  Servo servoVer; // ServoServo vertical servoHor; // Servoint horizontal x; int y; int prevX; int prevY; void setup () {Serial.begin (9600); servoVer.attach (5); // Anexe o servo vertical ao pino 5 servoHor.attach (6); // Anexe o servo horizontal ao pino 6 servoVer.write (90); servoHor.write (90);} void Pos () {if (prevX! =x || prevY! =y) {int servoX =map (x, 600, 0, 70, 179); int servoY =map (y, 450, 0, 179, 95); servoX =min (servoX, 179); servoX =max (servoX, 70); servoY =min (servoY, 179); servoY =max (servoY, 95); servoHor.write (servoX); servoVer.write (servoY); }} void loop () {if (Serial.available ()> 0) {if (Serial.read () =='X') {x =Serial.parseInt (); if (Serial.read () =='Y') {y =Serial.parseInt (); Pos (); }} while (Serial.available ()> 0) {Serial.read (); }}} 

Processo de manufatura

  1. Sensor de temperatura Python e Raspberry Pi
  2. Reconhecimento facial em tempo real:um projeto de ponta a ponta
  3. Rastreamento automático de objetos de visão
  4. Decodificador DTMF usando apenas Arduino
  5. Faça Monitor Ambilight usando Arduino
  6. Sistema de atendimento usando Arduino e RFID com Python
  7. Máquina de LEVITAÇÃO ULTRASÔNICA Usando ARDUINO
  8. Faça você mesmo voltímetro usando Arduino e Smartphone
  9. Monitor de freqüência cardíaca usando IoT
  10. WebServerBlink usando Arduino Uno WiFi