laporan people counter dengan webcam
TRANSCRIPT
Nama: Purwanto
Nrp: 23406050
Laporan People Counter dengan Webcam
A. PendahuluanPeople Counter dengan Webcam adalah pengembangan dari project Traffic Counter.
Pengembangan itu antara lain adalah menambah fungsi webcam, mengubah arah perhitungan vertical ke horizontal, mengubah pada bagian blob size pada project traffic counter. People Counter merupakan opencv project dengan bahasa pemprograman visual C++ 2008.
Gambar 1.1 People Counter dengan Webcam
Langkah-langkah menjalankan program ini, yaitu:
1. Install OpenCV2. Install CMake3. Building OpenCV untuk Visual Studio 20084. Build source code OpenCV pada IDE Visual Studio 2008
5. Tambahkan path OpenCV pada sistem Windows
6. Tambahkan path OpenCV pada proyek (Visual Studio 2008) yang akan dibuat, baik pada
configuration Debug dan Release
7. Install cvBlobsLib
B. Program Pada button Play tambahkan program:
o Mengambil gambar dari webcam
CvCapture *input = 0;IplImage *frame = 0;bool key = true;
/* initialize camera */input = cvCaptureFromCAM( 0 );
o Membuat background extraction
////BACKGROUND EXTRACTION/////////cvUpdateBGStatModel( frameresize, bg_model );cvReleaseImage(&greyImage);greyImage=cvCloneImage(bg_model->foreground);
cvRectangle(maskingImage, cvPoint(atoi(masking1_string), atoi(masking2_string)), cvPoint(atoi(masking3_string), atoi(masking4_string)), CV_RGB(255,255,255), -1);
cvAnd (greyImage, maskingImage, greyImage);
cvRectangle(frameresize,cvPoint(atoi(masking1_string), atoi(masking2_string)),cvPoint(atoi(masking3_string), atoi(masking4_string)), CV_RGB(0,0,255), 2);
o Membuat garis pendeteksi orang yang lewat
if (approaching->GetCheck()){
cvLine(frameresize, cvPoint((frameresize->width)-70,0), cvPoint((frameresize->width)-70,frameresize->height), CV_RGB(255,0,0), 2, 8, 0);
cvLine(frameresize, cvPoint((frameresize->width)-30,0), cvPoint((frameresize->width)-30,frameresize->height), CV_RGB(255,0,0), 2, 8, 0);
}if (away->GetCheck()){
cvLine(frameresize, cvPoint(70,0), cvPoint(70,frameresize->height), CV_RGB(255,0,0), 2, 8, 0);
cvLine(frameresize, cvPoint(30,0), cvPoint(30,frameresize->height), CV_RGB(255,0,0), 2, 8, 0);
}
o Membuat blob tracking
//////BLOB TRACKING//////////////blobs = CBlobResult(greyImage, NULL, 0);
blobs.Filter(blobs, B_INCLUDE, CBlobGetArea(), B_GREATER, atoi(smallest_string));
blobs.Filter(blobs, B_INCLUDE, CBlobGetArea(), B_LESS, atoi(biggest_string));
o Membuat counting & classification
if (!initialize && !preview){
if (approaching->GetCheck()){
if (iMaxx <= (frameresize->width)-30 && iMaxx >=(frameresize->width)-70) {
whitePixel=false;if (iMaxx>((frameresize->width)-70)){
for (x=((frameresize->width)-70); x<=iMaxx; x++){
for (y=iMiny+((iMaxy-iMiny)/4); y<=iMaxy-((iMaxy-iMiny)/4); y++){
lastPixel= cvGet2D(lastFrameImage, y, x);if (lastPixel.val[0]>0){
whitePixel=true;break;
}}cvRectangle(frameresize, cvPoint(iMinx, iMiny), cvPoint(iMaxx, iMaxy), CV_RGB(0,255,0), 2, 8, 0);
if (whitePixel){
break;}
}}if (!whitePixel){ total++;
If ((currentBlob.Area()<= atoi(group1_thresh_string)) &&(atoi(group1_thresh_string) != 0)){
group1++;} else
{ if ((currentBlob.Area()<= atoi(group2_thresh_string)) && (atoi(group2_thresh_string) != 0)){
group2++;} else{………}
}}
}}
if (away->GetCheck()){
if ((iMinx >= 30) && (iMinx <= 70)) {
whitePixel=false;if (iMinx < 70){
for (x=70; x>=iMinx; x--){
for (y=iMiny+((iMaxy-iMiny)/3); y<=iMaxy-((iMaxy-iMiny)/3); y++){
lastPixel=cvGet2D (lastFrameImage,y,x);if (lastPixel.val[0]>0){
whitePixel=true;break;
}}
cvRectangle(frameresize, cvPoint(iMinx, iMiny), cvPoint(iMaxx, iMaxy),CV_RGB(0,255,0), 2, 8, 0);if (whitePixel){
break;}
}}if (!whitePixel){
total++;if ((currentBlob.Area()<= atoi(group1_thresh_string)) && (atoi(group1_thresh_string) != 0)){
group1++;
} else{
If((currentBlob.Area()<= atoi(group2_thresh_string)) && (atoi(group2_thresh_string) != 0)){
group2++;} else {……..}
}}
}}
}o Membuat initialize
if (initialize) {
cvPutText (frameresize, "System Initialization", cvPoint(40,70), &font, CV_RGB (255,255,255));
cvPutText (frameresize, "Please Wait...", cvPoint(40,120), &font, CV_RGB (255,255,255));
cvPutText (frameresize, duration_string, cvPoint(40,170), &font, CV_RGB (255,255,255));
} Pada Button Stop (Webcam & Video Player Control) tambahkan program:
counter=false;start=false;
Pada Button Start tambahkan program:counter=true;initialize=true;
Pada Button Stop (People Counter Control) tambahkan program:counter=false;
Pada Button reset tambahkan program:second=15;total=0;density=0;group1=0;group2=0;
C. Cara kerja Software Pertama jalankan Software dengan menekan tombol Play
Software akan menjalankan proses mengambil gambar dari webcam
Gambar 3.1 Hasil Capture dari webcam
Selanjutnya tekan tombol start pada people counter controlProses selanjutnya adalah initialize
Gambar 3.2 proses initial pada video & resultPada bagian result akan menampilkan background extraction. Pada bagian video akan menampilkan kotak biru & 2 garis merah. Proses background extraction akan dilakukan pada area didalam kotak biru. Jika suatu objek sudah melewati 2 garis merah dari kanan ke kiri maka objek akan dihitung.
Setelah selesai proses initialize, selanjutnya objek akan dihitung. Pada proses perhitungan objek yang melewati garis merah akan dikotakin dengan kotak warna hijau. Seperti pada gambar dibawah ini.
Gambar 3.3 Objek yg dihitung
Hasil perhitungan akan ditampilkan pada bagian Report.
Gambar 3.4 Report Perhitungan
D. Fungsi-fungsi utama Bagian Webcam & Video player control
o Button Play berfungsi untuk mengambil gambar dari webcam secara live
o Button Stop berfungsi untuk mengakhiri proses pengambilan gambar dari webcam
Gambar 4.1 Webcam & video player control
People Counter Control o Button Start, berfungsi untuk memulai proses initialize, background extraction, blob
tracking, dan perhitungan serta prosesnya ditampilkan ke Result.o Button Stop, berfungsi untuk mengakhiri semua proses perhitungan.
o Button Reset, berfungsi untuk mereset hasil perhitungan ke 0.
Gambar 4.2 People Counter control
Settingo Kolom Group I – XI, berfungsi untuk mengclassification objek sesuai maksimum
blob size yg diisi pada kolom group.o Kolom Smallest Size, berfungsi untuk memberi batas minimum size objek bergerak
yang akan dideteksi.o Kolom Biggest Size, berfungsi untuk memberi batas maksimum size objek bergerak
yang akan dideteksi.o Option Move Closer to Camera, berfungsi untuk menghitung objek yang bergerak
dari kiri ke kanan dan memberi 2 garis merah pada posisi kanan.o Option Move Away From Camera, berfungsi untuk menghitung objek yang bergerak
dari kanan ke kiri dan memberi 2 garis merah pada posisi kiri.o Kolom Masking Area, berfungsi untuk memberikan posisi kotak biru.
o Button Save Setting, berfungsi untuk menyimpan settingan terbaru.
Gambar 4.3 Setting
Reporto Duration, berfungsi untuk menampilkan waktu perhitungan.
o Total of Peoples, berfungsi untuk menampilkan jumlah Objek (People) yang lewat.
o People Desenti, berfungsi untuk menhitung rata-rata Objek (People) yang lewat per
menit.o Group I – XI, berfungsi untuk menghitung Objek (people) yang lewat sesuai ukuran.
o Button Save Report, berfungsi untuk menyimpan hasil perhitungan dalam bentuk .txt
file.
Gambar 4.4 Report
E. Kesimpulan
Melalui hasil percobaan dapat disimpulkan keakuratan software ini bisa mencapai 80%, Terlalu banyak proses mengakibatkan gambar yang ditampilkan menjadi lebih lambat dan terpotong-potong.