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

Vigilância de Precisão: Rastreamento de Objetos com Arduino e Servos

Componentes e Materiais

Componente Quantidade
Processamento Arduino (Placa de desenvolvimento) 1
Arduino UNO 1
Câmera (genérica) 1
Servos (Tower Pro MG996R) 1

Aplicações e Serviços Online

Sobre o Projeto

O rastreamento de objetos é uma tarefa importante no campo da visão computacional. A proliferação de computadores de alta potência, a disponibilidade de câmeras de vídeo de alta qualidade e baixo custo, e a crescente necessidade de análise automatizada de vídeo geraram grande interesse em algoritmos de rastreamento de objetos. Existem três etapas-chave na análise de vídeo: detecção de objetos em movimento interessantes, rastreamento desses objetos de quadro a quadro, e análise das trajetórias para reconhecer seu comportamento. Portanto, o uso de rastreamento de objetos é pertinente nas tarefas de:

  1. Reconhecimento baseado em movimento: identificação humana pela marcha, detecção automática de objetos, etc.
  2. Vigilância automatizada: monitoramento de cena para detectar atividades suspeitas ou eventos improváveis.
  3. Indexação de vídeo: anotação e recuperação automática de vídeos em bancos de dados multimídia.
  4. Interação humano-computador: reconhecimento de gestos, rastreamento do olhar para entrada de dados, etc.
  5. Monitoramento de tráfego: coleta em tempo real de estatísticas de tráfego para direcionamento de fluxo.
  6. Navegação de veículos: planejamento de caminho baseado em vídeo e evasão de obstáculos.

Em sua forma mais simples, rastreamento pode ser definido como o problema de estimar a trajetória de um objeto no plano da imagem enquanto ele se move pela cena. Em outras palavras, um rastreador atribui rótulos consistentes aos objetos rastreados em diferentes quadros de um vídeo. Adicionalmente, dependendo do domínio, um rastreador também pode fornecer informações centradas no objeto, como orientação, área ou forma.

Este projeto trata de um método de detecção e rastreamento de objetos em tempo real no qual usamos uma câmera CCTV para identificar e rastrear o alvo na faixa de visão da câmera a partir de uma sala de vigilância. Junto com o rastreamento por software, o sistema também rastreia o objeto na cena usando um braço robótico com laser montado. O braço robótico opera de forma a cobrir cada coordenada no quadro de vídeo pelo seu movimento pan-tilt.

Link do arquivo CAD - (não fornecido)

Código

mouse_drag_final_arduino_working_code.ino (Processing)

Código Processing que transfere coordenadas do mouse para o Arduino e ajusta servos conforme posição do ponteiro.

///////////////////// Processing Code /////////////////////////////////
import processing.serial.*;
import processing.video.*;
import java.awt.*;
import gab.opencv.*;

Capture video;
OpenCV opencv;
Serial Com7;
float fpan, ftilt;
int pan, tilt, x, y;
int[] inBytes = new int[3];

void setup() {
  size(500, 500);
  String portName = Serial.list()[0];
  Com7 = new Serial(this, portName, 9600);
  video = new Capture(this, 640/2, 480/2);
  opencv = new OpenCV(this, 640/2, 480/2);
  opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);
  video.start();
  background(0, 0, 0);
  ellipse(width/2, width/2, 10, 10);
}

void draw() {
  scale(2);
  opencv.loadImage(video);
  noFill();
  stroke(0, 255, 0);
  strokeWeight(3);
  image(video, 0, 0);
  Rectangle[] faces = opencv.detect();
  println(faces.length);
  for (int i = 0; i < faces.length; i++) {
    println(faces[i].x + "," + faces[i].y);
    rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
  }
  pan = int(mouseX * 180 / width);
  tilt = int(mouseY * 180 / height);
  pan = constrain(180 - pan, 0, 180);
  tilt = constrain(tilt, 0, 180);
  Com7.write(pan);
  Com7.write(tilt);
  Com7.write(255);
  while (Com7.available() > 0) {
    inBytes[0] = inBytes[1];
    inBytes[1] = inBytes[2];
    inBytes[2] = Com7.read();
    if (inBytes[2] == 255) {
      println(inBytes[0] + " , " + inBytes[1]);
    }
  }
}

void captureEvent(Capture c) {
  c.read();
}

facetracking_processing_final_code.pde (Processing)

Este código rastreia o rosto de uma pessoa na faixa de visão.

///////////////////// Processing Code /////////////////////////////////
import processing.serial.*;
import processing.video.*;
import java.awt.*;
import gab.opencv.*;

Capture video;
OpenCV opencv;
Serial Com7;
float fpan, ftilt;
int pan, tilt, x, y;
int[] inBytes = new int[3];

void setup() {
  size(500, 500);
  String portName = Serial.list()[0];
  Com7 = new Serial(this, portName, 9600);
  video = new Capture(this, 640/2, 480/2);
  opencv = new OpenCV(this, 640/2, 480/2);
  opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);
  video.start();
  background(0, 0, 0);
  ellipse(width/2, width/2, 10, 10);
}

void draw() {
  scale(2);
  opencv.loadImage(video);
  noFill();
  stroke(0, 255, 0);
  strokeWeight(3);
  image(video, 0, 0);
  Rectangle[] faces = opencv.detect();
  println(faces.length);
  for (int i = 0; i < faces.length; i++) {
    println(faces[i].x + "," + faces[i].y);
    rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
    pan = int(faces[i].x * 180 / width);
    tilt = int(faces[i].y * 180 / height);
  }
  pan = constrain(180 - pan, 0, 180);
  tilt = constrain(tilt, 0, 180);
  Com7.write(pan);
  Com7.write(tilt);
  Com7.write(255);
  while (Com7.available() > 0) {
    inBytes[0] = inBytes[1];
    inBytes[1] = inBytes[2];
    inBytes[2] = Com7.read();
    if (inBytes[2] == 255) {
      println(inBytes[0] + " , " + inBytes[1]);
    }
  }
}

void captureEvent(Capture c) {
  c.read();
}

mouse_drag_final_arduino_working_code.ino (Arduino)

Código Arduino para movimento dos servos.

#include <Servo.h>
byte inBytes[3];
Servo panservo;
Servo tiltservo;
int panangle = 90;
int tiltangle = 90;

void setup() {
  Serial.begin(9600);
  panservo.attach(9);
  tiltservo.attach(11);
}

void loop() {
  if (Serial.available() > 0) {
    inBytes[0] = inBytes[1];
    inBytes[1] = inBytes[2];
    inBytes[2] = Serial.read();
    if (inBytes[2] == 255) {
      Serial.write(inBytes, 3);
      panangle = inBytes[0];
      tiltangle = inBytes[1];
      panservo.write(panangle);
      tiltservo.write(tiltangle);
    }
  }
}

Biblioteca OpenCV para Processing

Instale esta biblioteca para o código funcionar: https://github.com/atduskgreg/opencv-processing

Peças Personalizadas e Gabinetes

(Não há arquivos CAD anexados)

Processo de manufatura

  1. Dominando Declarações Using em C#: Imports, Aliases e Diretivas Estáticas
  2. Perfilamento de Temperatura Preciso no Raspberry Pi com Python, SQLite e LabVIEW
  3. Monitoramento Remoto do Tempo com Raspberry Pi 3 e PubNub
  4. Integre TI SensorTag ao Blynk via Node‑RED no Raspberry Pi Zero
  5. Rastreamento Avançado de Bolas de Tênis de Mesa com OpenCV no Raspberry Pi
  6. Controle um LED com Sensor de Movimento PIR no Raspberry Pi
  7. Rastreamento Automatizado de Objetos Baseado em Visão com Raspberry Pi e OpenCV
  8. Construa um Robô Inteligente com a Bridge Shield – Integração Raspberry Pi e Arduino
  9. Construa Robô Raspberry Pi Controlado por Wi-Fi com Python – Guia Passo a Passo
  10. Dominando Strings em C#: Boas Práticas e Dicas