Pengawasan Presisi: Pelacakan Objek dengan Arduino dan Servo
Komponen dan Perlengkapan
| | × | 1 | |
 | | × | 1 | |
| | × | 1 | |
| | × | 1 | |
Aplikasi dan Layanan Online
Tentang Proyek Ini
Pelacakan objek adalah tugas penting dalam bidang penglihatan komputer. Pertumbuhan komputer dengan daya tinggi, ketersediaan kamera video berkualitas tinggi dan terjangkau, serta kebutuhan yang meningkat untuk analisis video otomatis telah menghasilkan minat yang besar terhadap algoritma pelacakan objek. Tiga langkah kunci dalam analisis video adalah: deteksi objek bergerak yang menarik, pelacakan objek tersebut dari frame ke frame, dan analisis jejak objek untuk mengenali perilaku mereka. Oleh karena itu, penggunaan pelacakan objek relevan untuk tugas-tugas berikut:
1. Pengenalan berdasarkan gerakan, yaitu identifikasi manusia berdasarkan gerakan kaki, deteksi objek otomatis, dll.;
2. Pengawasan otomatis, yaitu memantau adegan untuk mendeteksi aktivitas mencurigakan atau peristiwa yang tidak mungkin.;
3. Pengindeksan video, yaitu anotasi dan pengambilan video otomatis dalam database multimedia.;
4. Interaksi manusia dan komputer, yaitu pengenalan gerakan, pelacakan gerakan mata untuk input data ke komputer, dll.;
5. Pemantauan lalu lintas, yaitu pengumpulan statistik lalu lintas secara real-time untuk mengarahkan aliran lalu lintas.
6. Navigasi kendaraan, yaitu perencanaan jalur dan kemampuan menghindari halangan berbasis video. Dalam bentuk paling sederhana, pelacakan dapat didefinisikan sebagai masalah estimasi trajetur objek di bidang citra saat objek bergerak di sekitar adegan. Dengan kata lain, pelacak memberikan label yang konsisten pada objek yang dilacak dalam berbagai frame video. Selain itu, tergantung pada domain pelacakan, pelacak juga dapat memberikan informasi yang berpusat pada objek, seperti orientasi, luas, atau bentuk objek.
Proyek ini tentang metode deteksi dan pelacakan objek waktu nyata di mana kita menggunakan kamera CCTV untuk mengidentifikasi dan melacak target dalam jangkauan pandang kamera dari ruang pengawasan. Serta pelacakan perangkat lunak, sistem juga akan melacak objek dalam adegan menggunakan lengan robot terpasang laser. Lengan robot bekerja dengan cara mencakup setiap koordinat dalam frame video dengan gerak pan-tilt-nya.
Tautan file CAD-
Kode
- mouse_drag_fina_larduino_workinh_code.ino
- facetracking_procesing_final_code.pde
- mouse_drag_fina_larduino_workinh_code.ino
mouse_drag_fina_larduino_workinh_code.inoArduino
Ini adalah kode processing yang mentransfer koordinat mouse ke arduino dan menyesuaikan servo sesuai posisi pointer mouse
///////////////////// 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(); //Com7 = new Serial(this, Serial.list()[1], 9600); 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]); //background(0,0,0); //ellipse(width - inBytes[0]*width/180,inBytes[1]*width/180,10,10); } } } void captureEvent(Capture c) { c.read(); } facetracking_procesing_final_code.pdeArduino
Kode ini melacak wajah seseorang dalam jangkauan pandang
///////////////////// 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(); //Com7 = new Serial(this, Serial.list()[1], 9600); 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]); //background(0,0,0); //ellipse(width - inBytes[0]*width/180,inBytes[1]*width/180,10,10); } } } void captureEvent(Capture c) { c.read(); } mouse_drag_fina_larduino_workinh_code.inoArduino
Ini adalah kode arduino untuk gerakan servo
#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); } } } Pustaka Open CV untuk Processing
Instal pustaka ini agar kode ini dapat bekerjahttps://github.com/atduskgreg/opencv-processing
Bagian dan Enclosure Khusus