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

Câmera de rastreamento facial

Componentes e suprimentos

Arduino UNO
× 1
webcam
× 1
elástico
× 1
9V 1A Fonte de alimentação de parede comutada
× 1
Servos MG-90s
× 2
2.1 * 5.5 mm plugue jack
× 1
Regulador linear (7805)
× 1
M2 * parafusos auto-roscantes de 10 mm
× 15
clipe de papel
× 1
Kit de conexão de cabo, 22 AWG
× 1
cabeçalho do pino
× 1
LED de 5 mm:Vermelho
× 1
LED de 5 mm:Verde
× 1
LED de 5 mm:amarelo
× 1
Resistor 220 ohm
× 3
tubulação termorretrátil
× 1

Ferramentas e máquinas necessárias

Decapador e cortador de fio, 18-10 AWG / 0,75-4 mm² Fios de capacidade
Alicate, nariz comprido
Ferro de soldar (genérico)
multímetro
chave de fenda
Impressora 3D (genérica)

Aplicativos e serviços online

Microsoft Windows 10

Sobre este projeto





Há alguns meses, modelei e imprimi a cabeça de uma das minhas colegas para me divertir. Achei que seria engraçado empurrar a piada e construir um mecanismo para essa cabeça que pudesse detectar as pessoas e ficar olhando para elas enquanto elas se moviam pela sala.

Lutei para fazer o mecanismo pequeno o suficiente para caber na minha impressão 3D, então, em vez de bloquear o projeto em um armário para sempre e esquecê-lo, decidi fazer um modelo fácil de montar com um software fácil de usar para que todos possam aproveitar e desenvolver .

............... https://www.littlefrenchkev.com/face-tracking-camera-mini .................





Como funciona?


A câmera se move usando dois servos acionados por um Arduino Uno. A câmera está conectada a um computador onde um software tenta encontrar rostos nas imagens recebidas da câmera.

Se um rosto for encontrado, o software enviará uma mensagem ao Arduino para fazer a câmera se mover e colocar o rosto detectado no centro da imagem.

Se nenhuma face for encontrada, o software enviará uma mensagem ao Arduino para que ele se mova para uma posição aleatória.

Tentei tornar o software bastante flexível com opções como:
  • faixas de servo modificáveis ​​
  • possibilidade de inverter a rotação dos servos
  • controle manual

Esperançosamente, isso tornará mais fácil reutilizá-lo para outros fins.

Também adicionei 3 LEDs que mostram o estado da detecção, vermelho para nenhuma detecção, amarelo quando um rosto é detectado, mas não no centro da imagem e verde quando um rosto é detectado e no centro da imagem.

Os LEDs não são muito interessantes por si só, mas deve ser fácil modificar o dispositivo para realizar uma ação útil em vez de apenas ligar e desligar algumas luzes.

A comunicação entre o Arduino e o software é feita através de comunicação serial (via USB).

O software de detecção de rosto foi escrito em Python. Deixei todos os arquivos Python no GitHub caso você queira dar uma olhada no código (aviso:provavelmente não é muito bom, estou aprendendo sozinho) ou reutilizá-los em seu próprio projeto.

Se não gosta de Python, você também pode baixar a versão executável no meu site.

Se você deseja construir o seu próprio, confira os vídeos a seguir. Tentei torná-los o mais fácil possível de seguir, espero ter feito um bom trabalho nisso.





Tudo que você precisa





Montagem





Fiação





Software e configuração




Código

  • código Arduino
Código do Arduino C / C ++
Este é o código que será enviado ao arduino
 // Sketch baseado no trabalho feito por Robin2 no fórum do arduino // mais informações aqui // https://forum.arduino.cc/index.php? Topic =225329.msg1810764 # msg1810764 # include  Servo panServo; Servo tiltServo; byte redledPin =2; byte yellowledPin =3; byte greenledPin =4; const byte buffSize =40; char inputBuffer [buffSize]; const char startMarker ='<'; const char endMarker ='>'; byte bytesRecvd =0; booleano readInProgress =false; boolean newDataFromPC =false; float panServoAngle =90.0; float tiltServoAngle =90.0; int LED_state =0; // 8 =============Dvoid setup () {Serial.begin (115200); panServo.attach (8); tiltServo.attach (9); pinMode (redledPin, OUTPUT); pinMode (yellowledPin, OUTPUT); pinMode (greenledPin, OUTPUT); // moveServo (); start_sequence (); atraso (200); Serial.println (""); // enviar mensagem para o computador} // 8 =============Dvoid loop () {getDataFromPC (); replyToPC (); moveServo (); setLED ();} // 8 =============Dvoid getDataFromPC () {// receber dados do PC e salvá-los no inputBuffer if (Serial.available ()> 0) {char x =Serial.read (); // ler o caractere do serial if (x ==endMarker) {// procurar o marcador final readInProgress =false; // se encontrado, definir leitura em andamento true (irá parar de adicionar novo byte ao buffer) newDataFromPC =true; // deixe o arduino saber que novos dados estão disponíveis inputBuffer [bytesRecvd] =0; // limpa o buffer de entrada processData (); // processar dados no buffer} if (readInProgress) {inputBuffer [bytesRecvd] =x; // preencher o buffer de entrada com bytes bytesRecvd ++; // incrementa o índice if (bytesRecvd ==buffSize) {// quando o buffer está cheio bytesRecvd =buffSize - 1; // mantenha o espaço para o marcador final}} if (x ==startMarker) {// procure pelo criador inicial bytesRecvd =0; // se encontrado, define o byte recebido como 0 readInProgress =true; // definir leitura em andamento true}}} // 8 =============Dvoid processData () // para tipo de dados "" {char * strtokIndx; // isso é usado por strtok () como um índice strtokIndx =strtok (inputBuffer, ","); // obtém a primeira parte panServoAngle =atof (strtokIndx); // converta esta parte para um float strtokIndx =strtok (NULL, ","); // obtém a segunda parte (continua de onde a chamada anterior parou) tiltServoAngle =atof (strtokIndx); // converta esta parte para um float strtokIndx =strtok (NULL, ","); // obtém a última parte LED_state =atoi (strtokIndx); // converta esta parte em um inteiro (string para int)} // 8 =============Dvoid replyToPC () {if (newDataFromPC) {newDataFromPC =false; Serial.print ("<"); Serial.print (panServo.read ()); Serial.print (","); Serial.print (tiltServo.read ()); Serial.println (">"); }} // 8 =============Dvoid moveServo () {panServo.write (panServoAngle); tiltServo.write (tiltServoAngle);} void setLED () {if (LED_state ==2) {digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, HIGH); digitalWrite (greenledPin, LOW); } else if (LED_state ==1) {digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, HIGH); } else if (LED_state ==0) {digitalWrite (redledPin, HIGH); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, LOW); } else if (LED_state ==3) {digitalWrite (redledPin, HIGH); digitalWrite (yellowledPin, HIGH); digitalWrite (greenledPin, HIGH); } else {digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, LOW); }} // 8 =============D void start_sequence () {panServo.write (90); tiltServo.write (90); atraso (300); digitalWrite (redledPin, HIGH); atraso (100); digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, HIGH); atraso (100); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, HIGH); atraso (100); digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, LOW); atraso (100); digitalWrite (redledPin, HIGH); digitalWrite (yellowledPin, HIGH); digitalWrite (greenledPin, HIGH); atraso (100); digitalWrite (redledPin, LOW); digitalWrite (yellowledPin, LOW); digitalWrite (greenledPin, LOW); } 
Software de detecção de rosto
Aqui está o repositório onde você pode encontrar os arquivos para o software de detecção de rosto. Você também pode encontrar uma versão executável em meu site .https://github.com/LittleFrenchKev/face_tracking_camera

Peças personalizadas e gabinetes

peças de câmera de rastreamento de rosto
todas as peças necessárias para construir a mini câmera de rastreamento facial. Você também pode encontrá-los aqui:https://www.littlefrenchkev.com/downloadCAD file em thingiverse.com

Esquemas


Processo de manufatura

  1. Acompanhamento de rotação horizontal / vertical com o pi de framboesa
  2. Cartão de visita do jogo Tic Tac Toe
  3. Sensor de temperatura múltipla
  4. Controle de ferro de solda DIY para 862D +
  5. MotionSense
  6. Impressora 3D Segurança contra incêndio
  7. IoT Gauge com Arduino, Yaler e IFTTT
  8. Levitação eletromagnética repulsiva Arduino
  9. Controle Remoto Gripper Bot
  10. CoroFence - Detector Térmico🖖