FACE & EYE DETECTION (ALGORITMA LBP) MENGGUNAKAN OPENCV 2.4.10

Selamat sore gan, kali ini ane akan share tentang program Face & Eye Detection menggunakan OpenCV 2.4.10. Yup2 sesuai janji ane sebelumnya ane kali ini kita akan main2 menggunakan object video atau lebih tepatnya kamera webcam. Ok jadi sebelum kita bermain dengan program Face & Eye Detection, terlebih dahulu kita cek dulu apakah kamera webcam kita dapat diakses atau tidak oleh OpenCV. Ok langsung aja kita menuju TKP.

Pertama2 jalankan program untuk mengaktifkan atau mengecek kamera webcam di bawah ini.

Mengaktifkan Webcam
Coding:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

void detectAndDisplay( Mat frame );
string window_name = "Capture - Webcam - Zainal";

int main( int argc, const char** argv )
{
    CvCapture* capture;
    Mat frame;
    capture = cvCaptureFromCAM( -1 ); // 0 for external camera
    if( capture )
    {
        while( true )
        {
            frame = cvQueryFrame( capture );
            if( !frame.empty() )
            {
                imshow( window_name, frame );
            }
            else { printf(" --(!) No captured frame -- Break!"); break; }
            int c = waitKey(10);
            if( (char)c == 'c' ) { break; }
        }
    }
    return 0;
}

Outputan:
Ketika program di RUN seharusnya kamera webcam pada laptop kita akan aktif dan mengambil gambar objek didepannya, apabila kita ingin menggunakan kamera webcam external kita hanya perlu merubah codingannya menjadi capture = cvCaptureFromCAM(0); maka kamera webcam external akan aktif, untuk menghentikan program klik karakter "c" pada keyboard.

Ok setelah dipastikan kamera kita siap, kita akan lanjut ke program Face & Eye Detection, sebelumnya pastikan kita telah mengcopy dua file .xml kedalam folder project kita. dua file .xml tersebut adalah file untuk mendeteksi wajah dan mata, file tersebut didapat dari directory (C:\opencv\opencv\sources\data\haarcascades)


Setelah file .xml dicopy kan ke folder project, saatnya menulis program di bawah ini,

Face & Eye Detection
Coding:
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

//Function Headers
void detectAndDisplay( Mat frame );

//Global variables
String face_cascade_name = "haarcascade_frontalface_alt.xml";
String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
CascadeClassifier face_cascade;
CascadeClassifier eyes_cascade;
string window_name = "Capture - Face detection - Zainal";
RNG rng(12345);

//@function main
int main( int argc, const char** argv )
{
    CvCapture* capture;
    Mat frame;
    //-- 1. Load the cascades
    if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
    if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
    //-- 2. Read the video stream
    capture = cvCaptureFromCAM( -1 ); // 0 for external camera
    if( capture )
    {
        while( true )
        {
            frame = cvQueryFrame( capture );
            //-- 3. Apply the classifier to the frame
            if( !frame.empty() ) { detectAndDisplay( frame ); }
            else { printf(" --(!) No captured frame -- Break!"); break; }
            int c = waitKey(10);
            if( (char)c == 'c' ) { break; }
        }
    }
    return 0;
}

//@function detectAndDisplay
void detectAndDisplay( Mat frame )
{
    std::vector<Rect> faces;
    Mat frame_gray;
    cvtColor( frame, frame_gray, CV_BGR2GRAY );
    equalizeHist( frame_gray, frame_gray );
    //-- Detect faces
    face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );
    for( size_t i = 0; i < faces.size(); i++ )
    {
        Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
        cout << "Point center" << center << endl;
        ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
        Mat faceROI = frame_gray( faces[i] );
        std::vector<Rect> eyes;
        //-- In each face, detect eyes
        eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );
        for( size_t j = 0; j < eyes.size(); j++ )
        {
            Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );
            int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
            circle( frame, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
        }
    }
    //-- Show what you got
    imshow( window_name, frame );
}

Outputan:
Setelah program di RUN seharusnya program akan mendeteksi wajah dan mata yang tertangkap oleh camera webcam seperti pada gambar di atas. Pada program diatas juga ane modifikasi agar center dari lingkaran pendeteksi wajah ditampilkan dalam bentuk alamat X dan Y, data inilah yang nantinya dapat dikembangkan untuk membuat gimbal kamera yang dapat mengikuti objek yang dinginkan.

Gimana seru kan... Sebenernya masih banyak lagi contoh program dan metode2 Object Detection dari OpenCV di file example nya... Ok selamat belajar dan mencoba, semoga tutorial singkat ini dapat memotivasi temen2 semua untuk mengexplor lebih jauh lagi tentang OpenCV.. Ok salam semangat kawan..



Related Posts:

MENAMPILKAN IMAGE RGB - GRAYSCALE & BLEND IMAGE MENGGUNAKAN OPENCV 2.4.10

Selamat siang gan, sesuai janji ane sebelumnya, ane akan posting tentang codingan dari OpenCV, untuk kesempatan kali ini ane akan share tentang codingan dasar2nya aja, seperti Menampilkan Image RGB-Grayscale dan Blend Image. Emm sebelumnya laptop agan2 harus sudah terinstall OpenCV dan CodeBlock, untuk tutorial instalasi bisa dilihat DISINI. Ok kalo sudah siap kita langsung aja menuju TKP.

Menampilkan Image RGB - Grayscale
Coding:
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <math.h>
#include <iostream>

using namespace cv;
using namespace std;

int main( int argc, char**)
{
    Mat img = imread("Sip.PNG", CV_LOAD_IMAGE_UNCHANGED);
    if (img.empty())
    {
          cout << "Error : Image cannot be loaded..!!" << endl;
          return -1;
    }
    Mat img2;
    cvtColor( img, img2, CV_BGR2GRAY );
    namedWindow("IMAGE", CV_WINDOW_AUTOSIZE);
    namedWindow("IMAGE_GRAY", CV_WINDOW_AUTOSIZE);
    imshow("IMAGE", img);
    imshow("IMAGE_GRAY", img2);
    waitKey(0);
    destroyWindow("IMAGE");
    destroyWindow("IMAGE_GRAY");

    return 0;
}


Outputan:
Ketika di RUN akan muncul dua buah frame, yaitu IMAGE yang berisi gambar asli dan IMAGE_GRAY yang berisi gambar yang telah diconvert menjadi Grayscale.

Blend Image
Coding:
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <math.h>
#include <iostream>

using namespace cv;
using namespace std;

int main( int argc, char**)
{
    double alpha=0.5; double beta; double input;
    Mat src1, src2, dst;
    std::cout<<"Simple Linear Blender"<<std::endl;
    std::cout<<"-----------------------"<<std::endl;
    std::cout<<"* Enter alpha [0-1]:";
    std::cin>>input;
    if( input>=0.0&&input<=1.0) { alpha=input; }
    src1=imread("Satu.JPG");
    src2=imread("Dua.JPG");
    if(!src1.data ) { printf("Error loading src1 \n"); return -1; }
    if(!src2.data ) { printf("Error loading src2 \n"); return -1; }
    namedWindow("Linear Blend",1);
    beta=(1.0-alpha );
    addWeighted( src1, alpha, src2, beta,0.0, dst);
    imshow("Linear Blend", dst );
    waitKey(0);
    return 0;
}


Outputan:
Ketika di RUN maka kita akan diminta untuk mengisi nilai alpha dari 0-1 yang digunakan untuk tingkat blend dari gambar yang dihasilkan, setelah diisi klik ENTER maka akan muncul blend dari dua gambar yang telah disiapkan sebelumnya.

Emm.. Gimana gan seru kan... Ayo gan belajar OpenCV, untuk saat ini Image Processing sangat banyak digunakan dalam dunia industri lo. Untuk selanjutnya nanti kita akan belajar tentang pengolahan video... Bakalan lebih seru nantinya... Program ini juga dapat diaplikasikan dengan Raspberry lho. OK gan selamat belajar ya... Salam Super..

Related Posts:

PAKET INSTALASI OPENCV 2.4.10 - CODE BLOCKS 13.12 (PLUS VIDEO TUTORIAL)

Selamat pagi gan.. lama ane gak ngutek2 nih blog, solanya ane baru aja selesai KP. Oke pada kesempatn kali ini ane akan membagikan Paket Instalasi OpenCV 2.4.10 menggunakan Code Blocks 13.12. Bermula dari pengalaman pribadi ane yang kesulitan menemukan tutorial yang cocok untuk instalasi library OpenCV, so ane akan share tuturial yang ane anggep paling pas dan mudah. Selain itu ane juga share aplikasi2 pelengkap yang digunakan, sehingga agan2 langsung capcus aja, gak perlu download2 lagi. Ok sebelum ane share, kita perlu tw apa sih OpenCV itu, dan apa gunanya. Yups langsung aja nih baca penjelasan singkat di bawah ini:

OpenCV (Open Source Computer Vision Library) adalah sebuah library perangkat lunak yang ditujukan untuk pengolahan citra dinamis secara real-time, yang dibuat oleh Intel, dan sekarang didukung oleh Willow Garage dan Itseez. Program ini bersifat bebas dan open source dari lisensi BSD. Library ini merupakan library lintas platform, jadi bisa dijalankan pada banyak compiler.

Ok setelah sudah tw apa itu OpenCV baru ane akan share Paket Instalasi OpenCV 2.4.10 - Code Blocks 13.12 yang terdiri dari:
  • OpenCV 2.4.10
  • Code::Blocks 13.12
  • Cmake 3.3.2
  • Mingw w64
  • Video Tutorial Atraktif
Yup2 langsung download aja disini dan disono, jangan lupa share ya agar semua orang tw dan gak bingung2 lagi install OpenCV. Untuk tutorial projectnya nyusul ya, insyaalloh ane post kok... Yup2 semoga bermanfaat bung.. Salam semangat.

Related Posts: