Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Precisie Surveillance: Object Tracking met Arduino en Servo's

Onderdelen en benodigdheden

Onderdeel Aantal
Arduino verwerking (Processing) 1
Arduino UNO 1
Camera (generiek) 1
Servo's (Tower Pro MG996R) 1

Apps en online diensten

  • Arduino IDE

Over dit project

Object tracking is een cruciale taak binnen computer vision. De beschikbaarheid van krachtige computers, goedkope high-quality camera's en de groeiende behoefte aan geautomatiseerde videoanalyse heeft veel belangstelling gewekt voor object tracking algoritmes. Er zijn drie sleutelstappen in videoanalyse: detectie van interessante bewegende objecten, tracking van deze objecten van frame naar frame, en analyse van objectsporen om gedrag te herkennen. Object tracking is relevant voor:

  1. Bewegingsgebaseerde herkenning: mensidentificatie op basis van looppatroon, automatische objectdetectie
  2. Geautomatiseerde surveillance: een scène monitoren om verdachte activiteiten of onwaarschijnlijke gebeurtenissen te detecteren
  3. Video-indexering: automatische annotatie en ophalen van video's in multimediadatabases
  4. Mens-computer interactie: gebarenerkenning, oogbewegingstracking voor data-invoer
  5. Verkeersmonitoring: realtime verzamelen van verkeersstatistieken om verkeersstroom te sturen
  6. Voertuignavigatie: videobaseerde routeplanning en obstakelvermijding

In de simpelste vorm is tracking het probleem van het schatten van de traject van een object in het beeldvlak terwijl het zich door een scène beweegt. Een tracker wijst consistente labels toe aan getrackte objecten in verschillende frames van een video. Afhankelijk van het domein kan een tracker ook object-gerichte informatie leveren zoals oriëntatie, oppervlakte of vorm.

Dit project behandelt realtime objectdetectie en tracking waarbij we een CCTV-camera gebruiken om een doelwit in het zichtbereik te identificeren en te tracken vanuit de surveillance-ruimte. Naast software-tracking volgt het systeem het object ook fysiek met een laser-gemonteerde robotarm. De robotarm bedekt elke coördinaat in het videoframe door pan-tilt beweging.

Code

Muis-besturing Arduino code (Processing)

Deze Processing-code stuurt muiscoördinaten naar de Arduino en past de servo's aan op basis van de muispositie.

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

Gezichtstracking Processing code

Deze code trackt een gezicht in het zichtbereik.

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

Arduino code voor servobeweging

#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);
    }
  }
}

OpenCV bibliotheek voor Processing

Installeer deze bibliotheek voor de code: https://github.com/atduskgreg/opencv-processing

Aangepaste onderdelen en behuizingen

CAD-bestand: Link niet beschikbaar

Productieproces

  1. Nauwkeurige Raspberry Pi Temperatuurprofielering Met Python, SQLite En LabVIEW
  2. Externe weerbewaking met Raspberry Pi 3 en PubNub
  3. TI SensorTag integreren met Blynk via Node-RED op Raspberry Pi Zero
  4. Geavanceerde Tafeltennisbal Tracking met OpenCV op Raspberry Pi
  5. Een LED Besturen met een PIR-bewegingssensor op Raspberry Pi
  6. Geautomatiseerde Visuele Object-tracking met Raspberry Pi en OpenCV
  7. Bouw een Slimme Robot met de Bridge Shield – Raspberry Pi & Arduino Integratie
  8. Bouw een Wi-Fi-gecontroleerde Raspberry Pi Robot met Python – Stap-voor-stap Gids
  9. Nauwkeurigheid Meten van Dynamisch Object Tracking in Motion Capture Systemen
  10. C# using-statements: imports, aliasen en static directives
  11. Strings in C# Beheersen: Best Practices & Tips