Showing posts with label OpenCV. Show all posts
Showing posts with label OpenCV. Show all posts

Monday, November 5, 2012

Simple Eye, Nose and Mouth Detection using OpenCV | Visual Studio

Setelah tadi kita membuat projek Simple Face Detection using OpenCV. Sekarang kita akan mencoba membuat projek Simple Eye, Nose and Mouth Detection using OpenCV | Visual Studio. Sebenarnya kodingan masih sama seperti projek tadi, kita tinggal mengganti pembacaan file XML-nya aja dengan memodifikasi sedikit kodingan.

Berikut tahapan-tahapannya :
1. Bagi kamu yang belum install OpenCV, ikutin step by step di postingan install OpenCV dengan Visual Studio disini. Saya sarankan menggunakan OpenCV 2.1.0 karena saya menggunakan yang itu. (Biar sama :p)

2. Setelah selesai meng-install dan setting Project Directories kamu tinggal copy-paste kodingan di bawah :


#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

void detect_and_draw(IplImage* img)
{
        //inisialisasi
        CvHaarClassifierCascade *cascade=0;
        CvHaarClassifierCascade *cascade1=0;
CvHaarClassifierCascade *cascade2=0;
        CvMemStorage *storage=0;

        IplImage* gray = img;

        //baca file xml untuk image detection
        if(!cascade)
        {
//untuk deteksi hidung
                char * file = "C:/OpenCV2.1/data/haarcascades/haarcascade_mcs_nose.xml";
//untuk deteksi mata
                char * file1 = "C:/OpenCV2.1/data/haarcascades/haarcascade_eye.xml";
//untuk deteksi mulut
char * file2 = "C:/OpenCV2.1/data/haarcascades/haarcascade_mcs_mouth.xml";

                cascade = (CvHaarClassifierCascade*) cvLoad(file,0,0,0);
                cascade1 = (CvHaarClassifierCascade*) cvLoad(file1,0,0,0);
cascade2 = (CvHaarClassifierCascade*) cvLoad(file2,0,0,0);
                storage = cvCreateMemStorage(0);
        }

        //mendeteksi image hidung
        CvSeq* noses =
                cvHaarDetectObjects(
                gray,
                cascade,
                storage,
                1.1,
                3,
                CV_HAAR_DO_CANNY_PRUNING,
                cvSize(10,10));

        //mendeteksi image mata
        CvSeq* eyes =
                cvHaarDetectObjects(
                gray,
                cascade1,
                storage,
                1.1,
                3,
                CV_HAAR_DO_CANNY_PRUNING,
                cvSize(20,20));

        //mendeteksi image mulut
        CvSeq* mouth =
                cvHaarDetectObjects(
                gray,
                cascade2,
                storage,
                1.1,
                3,
                CV_HAAR_DO_CANNY_PRUNING,
                cvSize(10,10));

        int i;

        //menggambar kotak merah pada bagian hidung yang ditemukan
        for(i = 0; i < (noses ? noses->total : 0); i++)
        {
                CvRect* r = (CvRect*) cvGetSeqElem(noses, i);
                cvRectangle(
                        img,
                        cvPoint(r->x, r->y),
                        cvPoint(r->x + r->width, r->y + r->height),
                        CV_RGB(255,0,0),
                        1, 20, 0
                );
        }

        //menggambar kotak biru laut pada bagian mata yang ditemukan
        for(i = 0; i < (eyes ? eyes->total : 0); i++)
        {
                CvRect* r = (CvRect*) cvGetSeqElem(eyes, i);
                cvRectangle(
                        img,
                        cvPoint(r->x, r->y),
                        cvPoint(r->x + r->width, r->y + r->height),
                        CV_RGB(0,255,255),
                        1, 20, 0
                );
        }

//menggambar kotak putih pada bagian mulut yang ditemukan
        for(i = 0; i < (mouth ? mouth->total : 0); i++)
        {
                CvRect* r = (CvRect*) cvGetSeqElem(mouth, i);
                cvRectangle(
                        img,
                        cvPoint(r->x, r->y),
                        cvPoint(r->x + r->width, r->y + r->height),
                        CV_RGB(255,255,255),
                        1, 20, 0
                );
        }

        //menampilkan gambar hasil deteksi
        cvNamedWindow("hasil");
        cvShowImage("hasil", img);

        cvWaitKey(0);
}

int main(array<System::String ^> ^args)
{
    //load image asli
        const char* filename = "dank3.jpg";
        IplImage* img = cvLoadImage(filename);

        //pemanggilan fungsi untuk deteksi wajah
        detect_and_draw(img);
}


3. Untuk yang berwarna merah sesuaikan dengan nama file foto yang sudah kalian masukkan di dalam projeknya. Kalau saya file fotonya ada di C:\Users\Ozi Priawadi\Documents\Visual Studio 2012\Projects\FaceDetection\FaceDetection\dank3.jpg. Kalau yang berwarna biru sesuaikan dengan folder instalan OpenCV yang sudah kamu buat.

4. Setelah selesai coba klik RUN projeknya dan hasilnya kira-kira seperti ini





Simple Face Detection using OpenCV | Visual Studio

Hmm... Bingung mau nulis kata pengantarnya (:p). Langsung aja kali ya?? Hehe, kali ini saya mau sharing kodingan Simple Face Detection using OpenCV | Visual Studio. Nah lhoo apa itu OpenCV? Biar lebih jelasnya mengenai apa itu OpenCV kalian tinggal baca aja postingan saya sebelumnya tentang apa itu OpenCV disini. Nahh kalau mengenai projek yang bakalan kita bikin adalah sebuah projek sederhana untuk mendeteksi wajah dari foto yang sudah kita tentukan. Kenapa menggunakan OpenCV? Jawabannya simple, karena lebih mudah dan Open Source!! haha

Oke langsung saja ke tahapan membuat projeknya :
1. Bagi kamu yang belum install OpenCV kamu ikutin langkah-langkah pada postingan saya sebelumnya dan saya sarankan menggunakan OpenCV 2.1.0 karena saya menggunakan yang 2.1.0. Postingannya install OpenCV-nya disini. Untuk nama projeknya terserah kalian, tapi kalau saya namanya FaceDetection.

2. Setelah selesai meng-install dan setting Project Directories kamu tinggal copy-paste kodingan di bawah :

#include "stdafx.h"
#include "cv.h"
#include "highgui.h"

//fungsi deteksi wajah
void detect_and_draw(IplImage* img){
//inisialisasi
CvHaarClassifierCascade *cascade=0;
CvMemStorage *storage=0;

IplImage* gray=img;

//baca file xml u/ image detection
if(!cascade){
char * file="C:/OpenCV2.1/data/haarcascades/haarcascade_frontalface_alt.xml";
cascade=(CvHaarClassifierCascade*) cvLoad(file, 0, 0, 0);
storage=cvCreateMemStorage(0);
}

//deteksi wajah
CvSeq* faces=cvHaarDetectObjects(
gray, 
cascade,
storage,
1.1,
3,
CV_HAAR_DO_CANNY_PRUNING,
cvSize(10, 10));

int i;

//menggambar kotak merah pd bagian wajah yg ditemukan
for(i=0; i<(faces ? faces->total : 0) ; i++){
CvRect* r=(CvRect*) cvGetSeqElem(faces, i);
cvRectangle(img,
cvPoint(r->x, r->y),
cvPoint(r->x + r->width, r->y + r->height),
CV_RGB(255, 0, 0),
1, 8, 0
);
}

//menampilkan gambar hasil deteksi
cvNamedWindow("hasil");
cvShowImage("hasil", img);

cvWaitKey(0);
}

int main(array<System::String ^> ^args){
//load image asli
const char* filename="dank.jpg";
IplImage* img=cvLoadImage(filename);

//panggil fungsi
detect_and_draw(img);
}


3. Untuk yang berwarna merah sesuaikan dengan nama file foto yang sudah kalian masukkan di dalam projeknya. Kalau saya file fotonya ada di C:\Users\Ozi Priawadi\Documents\Visual Studio 2012\Projects\FaceDetection\FaceDetection\dank.jpg. Kalau yang berwarna biru sesuaikan dengan folder instalan OpenCV yang sudah kamu buat. 

4. Setelah selesai coba klik RUN projeknya dan hasilnya kira-kira seperti ini





Wednesday, September 5, 2012

Install OpenCV dengan Visual C++ | Visual Studio

Setelah kemaren saya panjang lebar menjelaskan apa itu OpenCV. Nahh untuk postingan kali ini saya ingin berbagi pengetahuan bagaimana cara menginstall OpenCV dengan Visual C++ pada Visual Studio. Gimana caranya? Cekibrott....

1. Download OpenCV setelah itu install. Lalu buka Microsoft Visual Studio (Mau yang 2005, 2008, ataupun 2010 sama aja).
2. File -> New -> Project
3. Setelah itu pilih Win32 Console Application
4. Beri nama OpenCV (Bisa diganti sesuka kamu)


5. Setelah itu kita setting Project Directories


Pada Microsoft Visual Studio 2005 & 2008
Tools -> Options -> Projects and Solutions -> VC++ Directories
Pada Microsoft Visual Studio 2010
Project -> Properties -> Configuration Properties -> VC++ Directories




Selanjutnya kita include :
- Include Directories tambahkan 'C:\OpenCV2.1\include\opencv;'
- Library Directories tambahkan 'C:\OpenCV2.1\lib;'
- Source Directories tambahkan 'C:\OpenCV2.1\src\cv; C:\OpenCV2.1\src\cvaux; C:\OpenCV2.1\src\cxcore; C:\OpenCV2.1\src\highgui; C:\OpenCV2.1\src\ml;'

Setelah itu jangan lupa setting Linker :
Linker -> Input -> Additional Dependencies
Untuk Debug Builds tambahkan 'cv210d.lib; cxcore210d.lib; highgui210d.lib;'
Untuk Release Builds tambahkan 'cv210.lib; cxcore210.lib; highgui210.lib;'

6. Buat program (Misalnya menampilkan gambar, sebelumnya copy file gambar ke project yang sudah dibuat)


#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int _tmain(int argc, _TCHAR* argv[])
{
        IplImage *img = cvLoadImage("funny-pictures-cat-goes-pew.jpg");
        cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);
        cvShowImage("Image", img);
        cvWaitKey(0);
        return 0;
}

Nanti hasilnya kira-kira seperti ini :



Keterangan :


- cvLoadImage : Fungsinya untuk membaca citra. Fungsi ini dapat membaca citra dalam berbagai format seperti BMP, DIB, JPEG, JPE, PNG, PBM, PGM, PPM, SR, RAS, and TIFF.
- cvNamedWindow : Fungsinya untuk membuka window pada layar yang akan berisi citra untuk ditampilkan.
- CV_WINDOW_AUTOSIZE : Properti dari window yang akan mengatur ukuran window sama dengan ukuran citra yang akan ditampilkan.
- cvShowImage : Fungsinya untuk menampilkan citra pada window yang telah dibuka.
- cvWaitKey : Fungsinya akan meminta program untuk berhenti dan menunggu keystroke. Jika argumen yang diberikan positif, program akan menunggu selama milidetik argumen. Jika argumen diatur ke 0 atau ke angka negatif, program akan menunggu sampai suatu tombol ditekan.

Sumber : biomaterial.lipi.go.id






Monday, September 3, 2012

OpenCV


OpenCV (Open Computer Vision) adalah sebuah API (Application Programming Interface) Library yang sudah sangat familiar pada Pengolahan Citra Computer Vision. Computer Vision itu sendiri adalah salah satu cabang dari Bidang Ilmu Pengolahan Citra (Image Processing) yang memungkinkan komputer dapat melihat seperti manusia. Dengan vision tersebut komputer dapat mengambil keputusan, melakukan aksi, dan mengenali terhadap suatu objek. Beberapa pengimplementasian dari Computer Vision adalah Face Recognition, Face Detection, Face/Object Tracking, Road Tracking, dll. OpenCV adalah library Open Source untuk Computer Vision untuk C/C++, OpenCV didesain untuk aplikasi real-time, memiliki fungsi-fungsi akuisisi yang baik untuk image/video.


OpenCV sendiri terdiri dari 5 library, yaitu :

  1. CV :  untuk algoritma Image processing dan Vision. 
  2. ML : untuk machine learning library 
  3. Highgui : untuk GUI, Image dan Video I/O. 
  4. CXCORE : untuk struktur data, support XML dan fungsi-fungsi grafis. 
  5. CvAux

Struktur dan Konten OpenCV :