Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Vigilancia de Precisión: Seguimiento de Objetos con Arduino y Servos

Componentes y materiales

Componente Cantidad
Procesamiento Arduino 1
Arduino UNO 1
Cámara (genérica) 1
Servos (Tower Pro MG996R) 1

Aplicaciones y servicios online

Descripción del proyecto

El seguimiento de objetos es una tarea fundamental en visión por computadora. La proliferación de computadoras potentes, la disponibilidad de cámaras de video de alta calidad y bajo coste, y la creciente necesidad de análisis automatizado de video han generado gran interés en algoritmos de seguimiento. Hay tres pasos clave en el análisis de video: detección de objetos en movimiento interesantes, seguimiento de esos objetos de fotograma a fotograma, y análisis de trayectorias para reconocer su comportamiento. Por tanto, el seguimiento de objetos es pertinente en:

  1. Reconocimiento basado en movimiento: identificación humana por marcha, detección automática de objetos, etc.
  2. Vigilancia automatizada: monitorizar una escena para detectar actividades sospechosas o eventos improbables.
  3. Indexación de video: anotación y recuperación automática de videos en bases de datos multimedia.
  4. Interacción humano-computadora: reconocimiento de gestos, seguimiento de mirada para entrada de datos, etc.
  5. Monitorización de tráfico: recopilación en tiempo real de estadísticas de tráfico para dirigir el flujo.
  6. Navegación de vehículos: planificación de rutas basada en video y evitación de obstáculos.

En su forma más simple, el seguimiento se define como el problema de estimar la trayectoria de un objeto en el plano de la imagen mientras se mueve por una escena. En otras palabras, un rastreador asigna etiquetas consistentes a los objetos rastreados en diferentes fotogramas de un video. Además, según el dominio, un rastreador puede proporcionar información centrada en el objeto: orientación, área o forma.

Este proyecto trata sobre un método de detección y seguimiento de objetos en tiempo real en el que usamos una cámara CCTV para identificar y rastrear el objetivo en el rango de visión de la cámara desde la sala de vigilancia. Junto con el seguimiento por software, el sistema también rastrea el objeto en la escena usando un brazo robótico con láser montado. El brazo robótico opera de forma que cubre cada coordenada en el fotograma de video mediante su movimiento pan-tilt.

Código

mouse_drag_final_arduino_working_code.ino (Procesamiento)

Código de Processing que transfiere coordenadas del ratón al Arduino y ajusta los servos según la posición del puntero.

///////////////////// 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 (Procesamiento)

Este código rastrea el rostro de una persona en el rango de visión.

///////////////////// 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 movimiento de 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);
    }
  }
}

Librería OpenCV para Processing

Instala esta librería para que el código funcione: https://github.com/atduskgreg/opencv-processing

Piezas personalizadas y envolventes

Archivo CAD disponible en el enlace del proyecto.

Esquemáticos

Disponibles en el repositorio del proyecto.

Proceso de manufactura

  1. Perfilado preciso de temperatura en Raspberry Pi con Python, SQLite y LabVIEW
  2. Monitorización meteorológica remota con Raspberry Pi 3 y PubNub
  3. Integración de TI SensorTag con Blynk vía Node‑RED en Raspberry Pi Zero
  4. Seguimiento Avanzado de Pelotas de Ping‑Pong con Raspberry Pi y OpenCV
  5. Controle un LED con Sensor PIR de Movimiento en Raspberry Pi
  6. Seguimiento Automático de Objetos por Visión Artificial con Raspberry Pi y OpenCV
  7. Construye un robot inteligente con Bridge Shield – Integración Raspberry Pi y Arduino
  8. Construye un Robot Raspberry Pi Controlado por Wi‑Fi con Python – Guía Paso a Paso
  9. Medición de Precisión en Seguimiento de Objetos Dinámicos en Sistemas de Captura de Movimiento
  10. Dominando las Sentencias Using en C#: Importaciones, Alias y Directivas Estáticas
  11. Cadenas en C#: Mejores prácticas y consejos