Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Точное видеонаблюдение: отслеживание объектов с Arduino и сервоприводами

Компоненты и материалы

Arduino (обработка) × 1
Arduino UNO × 1
Камера (любая) × 1
Сервоприводы (Tower Pro MG996R) × 1

Приложения и сервисы

Arduino IDE

О проекте

Отслеживание объектов — важная задача компьютерного зрения. Распространение мощных компьютеров, доступность качественных недорогих камер и растущая потребность в автоматизированном видеоанализе стимулировали интерес к алгоритмам трекинга. В видеоанализе три ключевых этапа: обнаружение движущихся объектов интереса, их слежение кадр за кадром и анализ траекторий для распознавания поведения. Применение трекинга актуально для:

  1. Распознавания по движению (идентификация людей по походке, автоматическое обнаружение объектов);
  2. Автоматизированного видеонаблюдения (мониторинг сцены для обнаружения подозрительной активности или необычных событий);
  3. Индексации видео (автоматическая аннотация и поиск видео в мультимедиа базах);
  4. Человеко-компьютерного взаимодействия (распознавание жестов, отслеживание взгляда для ввода данных);
  5. Мониторинга трафика (сбор статистики в реальном времени для управления потоком);
  6. Навигации транспортных средств (видео-ориентированное планирование пути и избегание препятствий).

В простейшей форме трекинг — это оценка траектории объекта в плоскости изображения по мере его перемещения по сцене. Трекер присваивает согласованные метки отслеживаемым объектам в разных кадрах видео. В зависимости от домена трекер может также предоставлять информацию об объекте: ориентацию, площадь, форму.

Этот проект реализует метод обнаружения и отслеживания объектов в реальном времени: CCTV-камера идентифицирует и отслеживает цель в поле зрения из комнаты наблюдения. Параллельно с программным трекингом система механически следит за объектом с помощью лазера на роботизированной руке. Ручка движется так, чтобы охватывать каждую координату видеокадра своими панорамированием и наклоном (pan-tilt).

CAD-файл: (ссылка отсутствует)

Программный код

mouse_drag_final_arduino_working_code.ino (Processing)

Этот код на Processing передает координаты мыши на Arduino и регулирует сервоприводы согласно позиции указателя.

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

Этот код отслеживает лицо человека в поле зрения.

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

Код Arduino для движения сервоприводов.

#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 для Processing

Необходима для работы кода: https://github.com/atduskgreg/opencv-processing

Печатные платы и корпуса

(Раздел пуст)

Производственный процесс

  1. Точный температурный профиль Raspberry Pi с Python, SQLite и LabVIEW
  2. Удалённый мониторинг погоды на Raspberry Pi 3 с PubNub
  3. Интеграция TI SensorTag с Blynk через Node‑RED на Raspberry Pi Zero
  4. Продвинутое отслеживание теннисного мяча на Raspberry Pi с OpenCV
  5. Управление светодиодом с PIR-датчиком движения на Raspberry Pi
  6. Автоматизированное визуальное отслеживание объектов на Raspberry Pi и OpenCV
  7. Создание умного робота с Bridge Shield — интеграция Raspberry Pi и Arduino
  8. Построение Wi-Fi-управляемого робота на Raspberry Pi с Python — пошаговое руководство
  9. Строки в C#: создание, свойства, методы и лучшие практики
  10. Измерение точности динамического трекинга объектов в системах моشن-капчера