Showing posts with label pemograman. Show all posts
Showing posts with label pemograman. Show all posts

Friday, 16 October 2015

Tutorial Hand Tracking dan Hand Detection menggunakan OpenCV

Pendahuluan

Interaksi antara manusia dan robot terus berkembang dengan pesat, mengadopsi alat dan perangkat lunak yang berbeda untuk meningkatkan kenyamanan manusia.

Pada artikel ini, saya menjelajahi sembilan tutorial yang menunjukkan metode yang berbeda untuk mendeteksi dan mengenali gerakan tangan.

The OpenCV perpustakaan tidak cukup untuk memulai proyek Anda. Perpustakaan ini menyediakan sisi perangkat lunak, tetapi Anda juga perlu komponen perangkat keras. Dalam kategori hardware memasuki platform maju dapat menjalankan perpustakaan OpenCV, Webcam, dan sensor 3D seperti Kinect 3D.

OpenCV adalah perpustakaan gratis dan open-source berfokus pada pengolahan gambar real-time. Hal ini dapat mendeteksi dan mengenali berbagai macam benda, tetapi fokus kami sekarang adalah untuk menerapkan teknik dan metode untuk mendeteksi dan mengenali gerakan tangan manusia.

Metode untuk mendeteksi gerakan tangan

Seperti yang Anda lihat di tutorial berikut, ada beberapa metode untuk mendeteksi gerakan tangan. Deteksi warna kulit adalah salah satu metode yang paling populer. Metode ini sederhana dan tergantung pada warna kulit yang bisa menjadi putih, hitam, atau warna lainnya, dan kondisi cahaya lingkungan, serta latar belakang.

Mendeteksi Wilayah Tangan dengan Metode Convex hull
 Mendeteksi Wilayah Tangan dengan Metode Convex hull

Metode lain tidak menggunakan warna tangan, menggunakan deteksi konveksitas dari OpenCV. Kedua metode paling populer di masyarakat pembuat dan hacker dan mewakili cara paling sederhana untuk mendeteksi dan mengenali gerakan manusia untuk mengendalikan robot;

Isyarat tangan atau Hand Gesture menggunakan OpenCV

Menggunakan OpenCV 2.4, dalam tutorial ini Anda dapat menemukan baris demi baris kode dan penjelasan dari program gerakan pengakuan yang ditulis tangan dalam bahasa C;

OpenCV Python - Mendeteksi Pergerakan Tangan

Tutorial didasarkan pada perangkat lunak OpenCV dan bahasa Python bertujuan untuk mengenali gerakan tangan. Dalam tutorial ini, Anda dapat menemukan garis program yang ekstrak dari input frame daerah bunga (ROI), bagaimana menemukan kontur, cara menggambar convex hull, dan akhirnya bagaimana menemukan cacat kecembungan yang muncul saat gerakan ini terdeteksi;

Tracking Tangan Dan Gesture Detection (OpenCV)

Panduan ini menunjukkan Anda langkah demi langkah metode untuk mendeteksi dan melacak tangan secara real-time, dan juga itu demonstrasi untuk melakukan beberapa pengakuan isyarat. Semua gambar yang menangkap menggunakan kamera web sederhana dari sebuah laptop, dan sebagai kerugian, program ini dapat memiliki hasil yang berbeda jika latar belakang berubah;

Sebuah metode untuk mendeteksi dan mengenali gerakan tangan menggunakan OpenCV

Dari tutorial ini Anda dapat belajar bagaimana menerapkan metode yang efisien untuk mendeteksi dan mengenali gerakan tangan berdasarkan deteksi busung oleh OpenCV. Metode ini memiliki akurasi yang tinggi untuk mengenali gerakan dibandingkan dengan metode terkenal berdasarkan deteksi kontur tangan;

Deteksi gerakan tangan dan pengakuan menggunakan OpenCV 2

Dalam artikel ini Anda dapat menemukan kode untuk deteksi tangan dan gerakan berdasarkan model warna kulit. Pendekatan baru ini mencoba untuk lulus ketergantungan warna tangan, yang dapat menjadi putih, hitam, atau warna lain;

Tracking Tangan Sederhana dengan kinect + OpenCV

Dalam tutorial ini Anda dapat menemukan kode tangan pelacakan dengan sensor OpenCV dan Kinect 3D;
Ini adalah tutorial yang mendekati metode untuk melacak gerakan tangan berdasarkan hirarkis Titik Model Distribusi, yang diterapkan pada metode active contour terkenal;

Pengakuan Isyarat Tangan melalui model yang pas di minimisasi energi w / OpenCV

Dalam artikel ini dapat ditemukan solusi yang baik dan sederhana untuk tangan 2D berpose estimator berdasarkan model kerangka yang pas untuk tangan;

Deteksi tangan menggunakan OpenCV

Dalam tutorial ini Anda dapat menemukan kode untuk metode deteksi canggih yang independen oleh jarak dan latar belakang. Metode ini bekerja dengan menyaring tangan berwarna piksel;

Saturday, 1 August 2015

Haar fitur untuk deteksi objek

Pendahuluan

Pada tahun 2001, Viola dan Jones mengusulkan real-time kerangka deteksi objek pertama. Kerangka kerja ini, mampu beroperasi secara real-time pada 2001 hardware, adalah sebagian ditujukan untuk deteksi wajah manusia. Dan hasil semua orang tahu - deteksi wajah sekarang menjadi fitur standar untuk hampir setiap kamera digital dan ponsel di pasar. Bahkan jika perangkat tersebut mungkin tidak menggunakan metode mereka langsung, ini ketersediaan sekarang di mana-mana dari wajah mendeteksi perangkat sudah pasti terpengaruh oleh pekerjaan mereka.

Sekarang, di sini datang salah satu poin lebih menarik dari kerangka ini. Untuk mencari objek dalam sebuah adegan besar, algoritma hanya melakukan pencarian lengkap menggunakan jendela geser, menggunakan ukuran yang berbeda, rasio aspek, dan lokasi. Kenapa hal seperti ini bisa begitu efisien?

contoh haar fitur yang telah di screenshoot
Contoh Haar fitur
face detection object
Contoh Deteksi Wajah
 Artikel ini harus menyajikan pembaca dengan Viola-Jones kerangka deteksi obyek, dan panduan tentang pelaksanaannya dalam Kerangka Accord.NET. Sebuah contoh aplikasi diberikan pembaca begitu tertarik bisa mencoba deteksi gambar dan melihat bagaimana hal itu dapat dilakukan dengan menggunakan kerangka.

Latar Belakang

kontribusi yang dibawa oleh Paul Viola dan Michael Jones yang tiga kali lipat. Pertama, mereka berfokus pada menciptakan classifier berdasarkan kombinasi dari beberapa pengklasifikasi lemah, berdasarkan fitur yang sangat sederhana untuk mendeteksi wajah. Kedua, mereka dimodifikasi algoritma maka standar untuk menggabungkan pengklasifikasi untuk menghasilkan pengklasifikasi yang bahkan bisa memakan waktu untuk benar-benar mendeteksi wajah dalam gambar, tapi yang bisa menolak daerah tidak mengandung wajah yang sangat cepat. 

Fitur sederhana

Sebagian besar waktu, ketika salah satu adalah untuk membuat classifier, kita tiba-tiba harus memutuskan mana fitur untuk dipertimbangkan. Sebuah fitur merupakan karakteristik, sesuatu yang diharapkan akan membawa informasi yang cukup dalam proses pengambilan keputusan sehingga classifier dapat melemparkan keputusan. Misalnya, kami mencoba untuk membuat classifier untuk membedakan apakah seseorang kelebihan berat badan. Pilihan langsung fitur akan tinggi dan berat badan seseorang. Warna rambut, misalnya, tidak akan menjadi fitur informatif banyak dalam hal ini.

Jadi, mari kita kembali ke fitur yang dipilih untuk classifier Viola-Jones. Fitur yang ditampilkan di bawah ini adalah fitur persegi panjang Haar-like. Meskipun tidak segera jelas, apa mereka mewakili adalah perbedaan intensitas (grayscale) antara dua atau lebih daerah persegi panjang yang berdekatan dalam gambar.

haar fitur sample
haar fitur

Misalnya, pertimbangkan jika salah satu dari fitur tersebut ditempatkan di atas sebuah gambar, seperti gambar gambar Lena Soderberg di bawah ini. Nilai fitur akan menjadi hasil dari menjumlahkan semua piksel intensitas di sisi putih dari persegi panjang, menjumlahkan pixel di sisi biru persegi panjang, dan kemudian menghitung perbedaan mereka. Mudah-mudahan itu harus jelas dengan gambar di sisi kanan dari urutan mengapa fitur-fitur persegi panjang akan efektif dalam mendeteksi wajah. Karena keseragaman bayangan di wajah manusia, fitur tertentu tampaknya cocok dengan sangat baik.

screenshoot haar fitur sampe face detection
screenshoot haar fitur sample
Gambar di atas juga memberikan ide tentang bagaimana algoritma pencarian bekerja. Dimulai dengan baik jendela besar (atau kecil) dan scan gambar mendalam (yaitu misalnya dengan dislokasi jendela beberapa poin ke kanan, dan turun di akhir baris). Ketika scan selesai, itu menyusut (atau tumbuh) jendela ini, mengulangi proses lagi.

Cascade attentional

Jika detektor tidak sangat cepat, skema ini kemungkinan besar tidak akan bekerja dengan baik secara real time. Menangkap adalah bahwa detektor sangat cepat di jendela membuang menjanjikan. Sehingga dapat dengan cepat menentukan apakah suatu daerah tidak mengandung wajah. Ketika itu tidak terlalu yakin tentang suatu wilayah, itu menghabiskan lebih banyak waktu mencoba untuk memeriksa bahwa itu bukan wajah. Ketika akhirnya menyerah berusaha untuk menolaknya, itu hanya bisa menyimpulkan itu adalah wajah.

Jadi, bagaimana detektor melakukan itu?

cascade stage
Cascade stage
Ia melakukannya dengan menggunakan kaskade atensi. Sebuah kaskade adalah cara menggabungkan pengklasifikasi dengan cara yang classifier diberikan hanya diproses setelah semua pengklasifikasi lain yang datang sebelum sudah diproses. Dalam kaskade, objek yang menarik hanya diperbolehkan untuk melanjutkan di cascade jika belum dibuang oleh detektor sebelumnya.

Skema klasifikasi yang digunakan dengan metode Viola-Jones sebenarnya riam pengklasifikasi didorong. Setiap tahap dalam kaskade itu sendiri adalah suatu classifier yang kuat, dalam arti dapat memperoleh tingkat penolakan yang sangat tinggi dengan menggabungkan serangkaian pengklasifikasi lemah dalam beberapa mode.

Sebuah classifier lemah adalah classifier yang dapat beroperasi hanya sedikit lebih baik daripada kesempatan. Ini berarti hanya sedikit lebih baik dari membalik koin dan memutuskan apakah ada sesuatu di gambar atau tidak. Namun demikian, adalah mungkin untuk membangun classifier yang kuat dengan menggabungkan keputusan banyak pengklasifikasi lemah menjadi keputusan tertimbang tunggal. Proses menggabungkan beberapa peserta didik yang lemah untuk membentuk peserta didik yang kuat disebut meningkatkan. Belajar classifier seperti ini dapat dilakukan, misalnya, menggunakan banyak varian dari algoritma pembelajaran AdaBoost.

Dalam metode yang diusulkan oleh Viola dan Jones, masing-masing classifier lemah bisa paling tergantung pada fitur Haar tunggal. Yang cukup menarik, di dalamnya meletakkan solusi untuk masalah yang tak terhitung: Viola dan Jones telah dipatenkan algoritma mereka. Jadi untuk menggunakannya secara komersial, Anda harus lisensi jika dari penulis, mungkin membayar biaya. Sebagai cara untuk memperpanjang detektor, Dr. Rainer Lienhart, pelaksana asli dari OpenCV Haar fitur detektor, mengusulkan menambahkan dua jenis baru dari fitur dan mengubah setiap pelajar yang lemah menjadi pohon. Trik ini nanti, selain membantu dalam klasifikasi, juga cukup untuk keluar dari perlindungan paten dari metode asli.

Nah, jadi sampai sekarang kami memiliki sistem klasifikasi yang dapat berpotensi cepat pada menolak positif palsu. Namun, ingat classifier ini harus beroperasi pada beberapa daerah skala gambar dalam rangka untuk benar-benar memindai adegan. Perbedaan Computing di intensitas juga akan cukup memakan waktu (bayangkan menjumlahkan area persegi lagi dan lagi, untuk setiap fitur, dan menghitung ulang untuk setiap penskalaan ulang).



apa itu OpenCV library?

Apa itu OpenCV?

OpenCV logo
OpenCV
OpenCV (Open Source Computer Vision) adalah library fungsi pemrograman terutama ditujukan untuk real-time visi komputer, awalnya dikembangkan oleh pusat penelitian Intel di Nizhny Novgorod (Rusia), kemudian didukung oleh Willow Garage dan sekarang dikelola oleh Itseez. Perpustakaan adalah cross-platform dan gratis untuk penggunaan di bawah lisensi BSD open source.

Sejarah OpenCV

Resmi diluncurkan pada tahun 1999, proyek OpenCV awalnya merupakan inisiatif Intel Penelitian untuk memajukan aplikasi CPU-intensif, bagian dari serangkaian proyek termasuk real-time ray tracing dan tampilan dinding 3D. Kontributor utama untuk proyek termasuk sejumlah pakar optimasi di Intel Rusia, serta Perpustakaan Kinerja Tim Intel. Pada hari-hari awal OpenCV, tujuan dari proyek ini digambarkan sebagai:
  • Memajukan penelitian visi dengan menyediakan tidak hanya terbuka tetapi juga dioptimalkan kode untuk infrastruktur visi dasar. Tidak ada lagi menciptakan kembali roda.
  • Menyebarkan pengetahuan visi dengan menyediakan infrastruktur umum yang pengembang dapat membangun, sehingga kode yang akan lebih mudah dibaca dan dipindahtangankan.
  • Berdasarkan visi-muka aplikasi komersial dengan membuat portabel, kode kinerja dioptimalkan tersedia untuk bebas dengan lisensi yang tidak perlu terbuka atau membebaskan diri.
Versi alpha pertama OpenCV dirilis ke publik di Konferensi IEEE tentang Computer Vision dan Pengenalan Pola pada tahun 2000, dan lima beta yang dirilis antara tahun 2001 dan 2005. Versi pertama 1.0 dirilis pada tahun 2006. Pada pertengahan 2008, OpenCV diperoleh dukungan perusahaan dari Willow Garage, dan sekarang lagi di bawah pengembangan aktif. Sebuah versi 1.1 "pre-release" dirilis pada bulan Oktober 2008.

Rilis utama kedua dari OpenCV adalah pada Oktober 2009. OpenCV 2 meliputi perubahan besar untuk antarmuka C++, yang bertujuan lebih mudah, lebih pola jenis-aman, fungsi baru, dan implementasi yang lebih baik untuk orang-orang yang ada dalam hal kinerja (terutama pada multi sistem inti). Rilis resmi sekarang terjadi setiap enam bulan dan pengembangan kini dilakukan oleh tim Rusia independen yang didukung oleh perusahaan-perusahaan komersial.

Pada bulan Agustus 2012, dukungan untuk OpenCV diambil alih oleh sebuah yayasan non-profit OpenCV.org, yang mempertahankan situs pengembang dan pengguna.

Wednesday, 8 July 2015

Cara Install OpenCV di Visual Studio

Sudah banyak sekali tutorial-tutorial tentang bagaimana cara menginstall atau memasang library OpenCV pada Visual Studio.
Awalnya saya mengira sangat sulit dan rumit untuk memasang library ini, setelah beberapa lama kemudian dan sering bermain dengan Visual Studio, maka saya akan berbagi sedikit trik bagaimana memasang OpenCV dengan mudah.

langkah-langkah:

1. Download terlebih dahulu OpenCV 2.4.1
2. Extract file tersebut ke folder C:\
3. Buat Project di Visual Studio 2013.

untuk tutorialnya, dapat dilihat pada video berikut :



Membuat Hand Tracking menggunakan Kinect Xbox 360

Hand Tracking


Interaksi antara manusia dan robot terus berkembang dan mengadopsi alat dan perangkat lunak yang berbeda untuk meningkatkan kenyamanan manusia.

Pada artikel ini, saya menjelajahi sembilan tutorial yang menunjukkan metode yang berbeda untuk mendeteksi dan mengenali gerakan tangan.

OpenCV library tidak cukup untuk memulai proyek Anda. Library ini menyediakan sisi perangkat lunak, tetapi Anda juga perlu komponen perangkat keras. Dalam kategori hardware memasuki platform untuk dapat menjalankan library OpenCV, Webcam, dan sensor 3D seperti Kinect 3D.

OpenCV adalah library gratis dan open-source berfokus pada pengolahan citra real-time. Hal ini dapat mendeteksi dan mengenali berbagai macam benda, tetapi fokus kami sekarang adalah untuk menerapkan teknik dan metode untuk mendeteksi dan mengenali gerakan tangan manusia.

Metode untuk Hand Tracking

Seperti yang Anda lihat di tutorial berikut, ada beberapa metode untuk mendeteksi gerakan tangan. Deteksi warna kulit adalah salah satu metode yang paling populer. Metode ini sederhana dan tergantung pada warna kulit yang bisa putih, hitam, atau warna lainnya, dan kondisi cahaya lingkungan, serta latar belakang.


Metode lain tidak menggunakan sisi warna; menggunakan deteksi konveksitas dari OpenCV. Kedua metode paling populer di masyarakat pembuat dan hacker dan mewakili cara paling sederhana untuk mendeteksi dan mengenali gerakan manusia untuk mengendalikan robot.

Simple Hand Tracking with kinect + opencv - berikut adalah Source Code dengan sensor Kinect Xbox 360 dan OpenCV.

#include "cinder/app/AppBasic.h"
#include "cinder/gl/gl.h"
#include "cinder/gl/Texture.h"
#include "cinder/params/Params.h"

#include "Kinect.h"
#include "CinderOpenCv.h"

using namespace ci;
using namespace ci::app;
using namespace std;

class HandTrackingApp : public AppBasic {
public:
 void prepareSettings( Settings* settings );
 void setup();
 void update();
 void draw();

 params::InterfaceGl mParams;

 float mThreshold, mBlobMin, mBlobMax;
 float mKinectTilt;

 Kinect mKinect;
 gl::Texture mColorTexture, mDepthTexture, mCvTexture; 
 Surface mDepthSurface;

 Vec3f mTargetPosition;
};

void HandTrackingApp::prepareSettings( Settings* settings )
{
 settings->setWindowSize( 640, 720 );
}


void HandTrackingApp::setup()
{

 mThreshold = 70.0f;
 mBlobMin = 20.0f;
 mBlobMax = 80.0f;

 mParams = params::InterfaceGl( "Hand Tracking", Vec2i( 10, 10 ) );
 mParams.addParam( "Threshold", &mThreshold, "min=0.0 max=255.0 step=1.0 keyIncr=s keyDecr=w" );
 mParams.addParam( "Blob Minimum Radius", &mBlobMin, "min=1.0 max=200.0 step=1.0 keyIncr=e keyDecr=d" );
 mParams.addParam( "Blob Maximum Radius", &mBlobMax, "min=1.0 max=200.0 step=1.0 keyIncr=r keyDecr=f" );
 mParams.addParam( "Kinect Tilt", &mKinectTilt, "min=-31 max=31 keyIncr=T keyDecr=t" );

 mKinect = Kinect( Kinect::Device() );

 mTargetPosition = Vec3f::zero();

}


void HandTrackingApp::update()
{
 if( mKinect.checkNewDepthFrame() ){

 ImageSourceRef depthImage = mKinect.getDepthImage();

 // make a texture to display
 mDepthTexture = depthImage;
 // make a surface for opencv
 mDepthSurface = depthImage;

 if(mDepthSurface){

 // once the surface is avalable pass it to opencv
 // had trouble here with bit depth. surface comes in full color, needed to crush it down
 cv::Mat input( toOcv( Channel8u( mDepthSurface )  ) ), blurred, thresholded, thresholded2, output;

 cv::blur(input, blurred, cv::Size(10,10));

 // make two thresholded images one to display and one
 // to pass to find contours since its process alters the image
 cv::threshold( blurred, thresholded, mThreshold, 255, CV_THRESH_BINARY);
 cv::threshold( blurred, thresholded2, mThreshold, 255, CV_THRESH_BINARY);

 // 2d vector to store the found contours
 vector<vector<cv::Point> > contours;
 // find em
 cv::findContours(thresholded, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);

 // convert theshold image to color for output
 // so we can draw blobs on it
 cv::cvtColor( thresholded2, output, CV_GRAY2RGB );

 // loop the stored contours
 for (vector<vector<cv::Point> >::iterator it=contours.begin() ; it < contours.end(); it++ ){

 // center abd radius for current blob
 cv::Point2f center;
 float radius;
 // convert the cuntour point to a matrix 
 vector<cv::Point> pts = *it;
 cv::Mat pointsMatrix = cv::Mat(pts);
 // pass to min enclosing circle to make the blob 
 cv::minEnclosingCircle(pointsMatrix, center, radius);

 cv::Scalar color( 0, 255, 0 );

 if (radius > mBlobMin && radius < mBlobMax) {
 // draw the blob if it's in range
 cv::circle(output, center, radius, color);

 //update the target position
 mTargetPosition.x = 640 - center.x;
 mTargetPosition.y = center.y;
 mTargetPosition.z = 0;
 }


 }

 mCvTexture = gl::Texture( fromOcv( output ) );
 }
 }

 if( mKinect.checkNewColorFrame() )
 mColorTexture = mKinect.getColorImage();

 if( mKinectTilt != mKinect.getTilt() )
 mKinect.setTilt( mKinectTilt );

}

void HandTrackingApp::draw()
{

 gl::clear( Color( 0.5f, 0.5f, 0.5f ) );


 gl::disableDepthWrite();
 gl::disableDepthRead();

 glPushMatrix();
 gl::scale(Vec3f(-1, 1, 1));
 if( mColorTexture )
 gl::draw( mColorTexture, Vec2i( -640, 0));
 glPopMatrix();

 glPushMatrix();
 gl::scale(Vec3f(-0.5, 0.5, 1));
 if( mDepthTexture )
 gl::draw( mDepthTexture,Vec2i( -640, 920 ));
 if ( mCvTexture )
 gl::draw( mCvTexture,Vec2i( -1280, 920 ));
 glPopMatrix();

 gl::enableDepthWrite();
 gl::enableDepthRead();

 gl::color(Colorf(1.0f, 0.0f, 0.0f));
 gl::drawSphere(mTargetPosition, 10.0f);

 params::InterfaceGl::draw();

}


CINDER_APP_BASIC( HandTrackingApp, RendererGl )




Tuesday, 7 July 2015

Kinect XBOX 360 untuk Presentasi

Kinect Xbox 360 tidak hanya digunakan untuk bermain game. Tapi juga bisa dimanfaatkan untuk membuat berbagai aplikasi atau membuat film animasi, pada kesempatan kali ini, saya memanfaatkan kinect sebagai alat bantu presentasi.

Kinect Presentation adalah sebuah aplikasi yang digunakan oleh presenter untuk mempresentasikan Power Pointnya tanpa menyentuh perangkat hardware dari komputer atau laptop. Akan tetapi, kamera yang mensensor pergerakan tangan presenter, sehingga dieksekusi menjadi sebuah perintah untuk menggerakkan slide.

untuk membuat aplikasi ini, kita membutuhkan beberapa pendukung, antara lain:

Hardware :

1. PC / Laptop
2. Camera Kinect Xbox 360

Software :
1. Windows 
2. Visual Studio 2013
3. Kinect SDK 1.7

Kinect Presentasi
Kinect Presentasi

foto ini adalah screenshoot dari aplikasi Kinect Presentation

video Kinect Presentation