Sunday 14 December 2014

VSC++ :: Camera input - OpenCV


I want to display the video being captured by the webcam in C++. I've found this code, that uses OpenCV and it's very simple:

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "cvcam.h"
#include "cv.h"
#include "highgui.h"

int main( int argc, char** argv )
{
IplImage* frame = 0;
CvCapture* capture = 0;
capture = cvCaptureFromCAM(1);
frame = cvQueryFrame( capture );
if( !capture )
{
fprintf(stderr,"Could not initialize capturing...\n");
return -1;
}
cvNamedWindow( "in", 0 );
for(;;)
{
if(!cvGrabFrame(capture)) 
break;
frame = cvRetrieveFrame(capture);
cvShowImage("in", frame );
if( cvWaitKey(10) >= 0 )
break;
}
cvReleaseCapture( &capture );
cvDestroyWindow("in");
return 0;
}

However, I don't know why it fails (in the "if (!capture)", it always enters - capture is null), and I don't know how to fix it.
I don't know if there is anyone here that could help me with that OpenCV issue. However, if there isn't, if you tell me another way to grab the camera input (and display it in a window) would be great!
I'm using Windows XP, if that matters.

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



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.

VSC++ :: 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

VSC++ :: Simple Face Detection using OpenCV | Visual Studio

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. Untuk nama projeknya terserah kalian, tapi kalau saya namanyaFaceDetection.

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. 

INFO :: Pengertian OpenCV



OpenCV (Open Computer Vision) adalah sebuah API (Application Programming Interface) Library yang sudah sangat familiar pada Pengolahan Citra Computer VisionComputer 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, dllOpenCVadalah 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 :

FLASH :: Download Komponen Face recognition menggunakan flash Action Script 3.0

Filename Summary + Labels Uploaded ReleaseDate Size DownloadCount ...
 DownloadFaceRecognitionLib v1.3.zipFaceRecognitionLib v1.3 compiled SWC for Flex SDK 4.6 or later   Featured EigenfacesComputer Vision Haar Cascade detection recognitionOct 2013Oct 2013157 KB1044
 DownloadFaceRecognitionLib v1.2.zipFaceRecognitionLib v1.2 compiled SWC for Flex SDK 4.6 or laterApr 2012Apr 201251.7 KB1357
 DownloadFaceRecognitionLib.swcFaceRecognitionLib v1.0 compiled SWC for Flex SDK 3.5 to 4.5   AS3 ComputerVisionEigenfaces Face RecognitionJul 201058.9 KB1208
 DownloadFaceRecognizerForBrowserUsingCameraV1_3_A3.fxpExample 2 - FaceRecognizerForBorowserUsingCamera using lib in version v1.3 Alpha 3  FeaturedSep 2012Sep 20127.3 MB1458
 DownloadExample_FaceRecognizerForBrowser.zipExample 1 - FaceRecognizerForBrowser_SDK_3.5 in ZIP - library in v1.0   example Featuredface recognition eigenface FaceRecognitionLibJul 20101.5 MB3949
 DownloadFaceRecognizerForBrowser.fxpExample 1 - FaceRecognizerForBrowser_SDK_3.5 in FXP (Flash Builder 4 Project)  Eigenface face recognition Flex Adobe AS3 ActionScriptJul 20107.7 MB1203
 Downloadface-recognition-library-as3-asdoc-polish.zipDocumentation in Polish language   documentation polish FeaturedAug 2010524 KB771
 Downloadface-recognition-library-as3-asdoc-english-alpha version.zipDocumentation in English language   FeaturedMar 2011Mar 2011218 KB1993
 Downloadface_recognition_lib_uml_rev9.pngClass diagram for some of classes in package com.oskarwicha.image.FaceRecognitionApr 2011Apr 2011325 KB1353
 Downloadface.zipArchive with Haar Cascades needed if using "FaceDetector" object in v1 and v1.2Jun 2012Jun 2012103 KB795

VB6.0 :: Deteksi Tepi (Edge Detection)


Deteksi tepi (Edge Detection) pada suatu citra adalah suatu proses yang menghasilkan tepi-tepi dari obyek-obyek citra, tujuannya adalah :
o Untuk menandai bagian yang menjadi detail citra
o Untuk memperbaiki detail dari citra yang kabur, yang terjadi karena error atau adanya efek dari proses akuisisi citra

Suatu titik (x,y) dikatakan sebagai tepi (edge) dari suatu citra bila titik tersebut mempunyai perbedaan yang tinggi dengan tetangganya Ada beberapa macam metode deteksi tepi antara lain sebagai berikut :

1. Metode Robert
Metode Robert adalah nama lain dari teknik differensial yang dikembangkan di atas, yaitu differensial pada arah horisontal dan differensial pada arah vertikal, dengan ditambahkan proses konversi biner setelah dilakukan differensial. Teknik konversi biner yang disarankan adalah konversi biner dengan meratakan distribusi warna hitam dan putih [5], seperti telah dibahas pada bab 3. Metode Robert ini juga disamakan dengan teknik DPCM (Differential Pulse Code Modulation) Kernel filter yang digunakan dalam metode Robert ini adalah: 


2.Metode Prewitt
Metode Prewitt merupakan pengembangan metode robert dengan menggunakan filter HPF yang diberi satu angka nol penyangga. Metode ini mengambil prinsip dari fungsi laplacian yang dikenal sebagai fungsi untuk membangkitkan HPF. Kernel filter yang digunakan dalam metode Prewitt ini adalah: 

3.Metode Sobel
Metode Sobel merupakan pengembangan metode robert dengan menggunakan filter HPF yang diberi satu angka nol penyangga. Metode ini mengambil prinsip dari fungsi laplacian dan gaussian yang dikenal sebagai fungsi untuk membangkitkan HPF. Kelebihan dari metode sobel ini adalah kemampuan untuk mengurangi noise sebelum melakukan perhitungan deteksi tepi. Kernel filter yang digunakan dalam metode Sobel ini adalah: 

Berikut ini adalah hasil dari ketiga metode tersebut di atas: 
Berikut ini adalah program deteksi tepi yang dibuat dengan Visual Basic 6 :
1. Deteksi Tepi Robert
2. Deteksi Tepi Prewitt
3. Deteksi Tepi Sobel
Semoga bermanfaat Yaa...!!!