Menangani Webcam / Kamera menggunakan OpenCV dan Delphi 10

OpenCV adalah library opensource untuk pengolahan gambar digital berbasis komputer vision. Basis koding openCV adalah C tapi sudah diporting ke berbagai bahasa pemrograman lain seperti Python dan Delphi. Jika Anda familiar dengan bahasa Pascal/Delphi, ada baiknya Anda menginstal komponen OpenCV-Delphi ini untuk menunjang aplikasi Anda, khususnya yang berhubungan dengan komputer vision, seperti deteksi uang, deteksi plat nomor kendaran untuk aplikasi parkir, aplikasi tilang elektronik (ETLE), dll. OpenCV ini jika dipadu dengan library kecerdasan buatan (Artifial Intelligence) akan menghasilkan aplikasi yang sangat powerful

Pada tutorial sebelumnya kita belajar bagaimana mendeteksi lingkaran pada gambar. Jadi kita browse dulu gambarnya kemudian kita load dalam komponen image kemudian baru kita cari lingkaran di dalamnya. Pada tutorial berikutnya kita coba tingkatkan bagaimana mendeteksi lingkaran dengan gambar dari kamera (webcam) secara langsung tanpa proses pemilihan gambar melalui file explorer. Namun pada tutorial kedua masih ada bug yang masih harus menampilkan jendela/window bawaan library OpenCV (function ‘ocvShowImage’). Nah pada tutorial kali ini kita akan coba sempurnakan, bagaimana cara menangani webcam/kamera dengan OpenCV dan Delphi secara smooth dan tanpa bug. Bagaimana caranya, simak tutoria; sebagai berikut:

Buat project Delphi baru melalui menu File-New-Windows VCL Application Delphi, kemudian Save All utuk menyimpan file Unit dan file project-nya (nama file silahkan disesuaikan)

Ambil komponen Image dari tab ‘Additional’ di Component Pallete, kemudian drop di Form Designer Delphi

Berturut-turut masukkan script di event OnCreate dan OnDestroy milik komponen Form sebagai berikut:

procedure TForm1.FormCreate(Sender: TObject);
begin
 capture := cvCreateCameraCapture(0);
  if Assigned(capture) then
  begin
    framebitmap := TBitmap.Create;
    framebitmap.PixelFormat := pf24bit;
    Application.OnIdle := OnIdle;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 if Assigned(capture) then
    cvReleaseCapture(capture);
  if Assigned(framebitmap) then
    framebitmap.Free;
end;

Tambahkan Unit berikut di klausa ‘Uses’

ocv.highgui_c,
  ocv.core_c,
  ocv.core.types_c,
  ocv.imgproc_c,
  ocv.imgproc.types_c,
  ocv.utils

Tambahkan variabel yang dibutuhkan berikut ini di bawah klause ‘var’

var
  Form1: TForm1;
  capture: pCvCapture;
  framebitmap: TBitmap; 
  frame: pIplImage;

Tambahkan satu procedure baru yakni OnIdle di bawah klausa ‘private’

private
    { Private declarations }
    procedure OnIdle(Sender: TObject; var Done: Boolean);

Nah, yang terakhir tambahkan definisi dari procedure OnIdle sebagai berikut:

procedure TForm1.OnIdle(Sender: TObject; var Done: Boolean);
begin
  frame := cvQueryFrame(capture);
  if Assigned(frame) then 
  begin
    IplImage2Bitmap(frame, framebitmap);   
      image1.Picture.Assign(framebitmap);
  end
  else
    Application.OnIdle := nil;

end;

Jadi kurang lebih garis besar dari program di atas adalah saat program idle, program akan mengambil gambar dari webcam/kamera (function ‘cvQueryFrame(capture);’). Gambar ini kemudian dikonversi ke bitmap (IplImage2Bitmap(frame, framebitmap);) untuk kemudian ditampilkan ke komponen imagebox (image1.Picture.Assign(framebitmap);). Proses ini akan terjadi terus menerus karena script ini ditempatkan di event ‘onIdle’. Supaya event ini aktif, perlu dipanggil dulu saat pertama kali program berjalan (event onCreate milik Form) dengan script ‘Application.OnIdle := OnIdle;’. Hasil program di atas adalah sbb:

Demikian sedikit basic tutorial cara bekerja dengan webcam menggunakan OpenCV-Delphi. Program ini dapat dikembangkan untuk project-project OpenCV selanjutnya, yakni dengan menambahkan script/algoritma di event onIdle. Nantikan tutorial-tutorial OpenCV-Delphi berikutnya

Tags:

Leave a Reply