RSS

Listing PENGENALAN WAJAH UNTUK SISTEM AUTENTIFIKASI SECARA STATISTIKA

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, VLDSCapture, Menus, VLCommonFilter, VLResize, VLGrayScale,
  LPComponent, VLBasicGenericFilter, VLGenericFilter,
  SLComponentCollection, VLCommonDisplay, VLImageDisplay, Grids,VLBitmap, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Button1: TButton;
    Button2: TButton;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    StringGrid1: TStringGrid;
    VLImageDisplay1: TVLImageDisplay;
    VLImageDisplay2: TVLImageDisplay;
    VLImageDisplay3: TVLImageDisplay;
    VLGenericFilter1: TVLGenericFilter;
    VLGenericFilter2: TVLGenericFilter;
    VLGenericFilter3: TVLGenericFilter;
    VLGrayScale1: TVLGrayScale;
    VLResize1: TVLResize;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Latihan1: TMenuItem;
    LoadData1: TMenuItem;
    VLDSCapture1: TVLDSCapture;
    procedure VLGenericFilter2ProcessData(Sender: TObject;
      InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
      var SendOutputData: Boolean);
    procedure VLGenericFilter3ProcessData(Sender: TObject;
      InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
      var SendOutputData: Boolean);
    procedure VLGenericFilter1ProcessData(Sender: TObject;
      InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
      var SendOutputData: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure Latihan1Click(Sender: TObject);
    procedure LoadData1Click(Sender: TObject);
    procedure VLGenericFilter3Start(Sender: TObject; var AWidth,
      AHeight: Integer; AFrameDelay: Real);
    procedure VLGenericFilter3Stop(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
    Fbitmap : TVLBitmap ;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18  : integer;
  konstanta                 : byte;
  datatemp                  : array[0..255] of real;
  t_mean, t_var, t_std,
  t_kurto, t_skew, t_entro  : real;
  face, simwaj, rekogn      : boolean;
  koefi,koefir              : real;
  xa,ya,xb,yb               : integer;
  mean_sa, var_sa, std_sa,
  kurto_sa, skew_sa, entro_sa : real;
  kenal                     : boolean;
  gambar                    : TBitmap ;
implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.VLGenericFilter2ProcessData(Sender: TObject;
  InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
  var SendOutputData: Boolean);
    var x,y,z,w,z_k,w_k : integer;
      l : byte;
      sigma, mean, varians, std, skewness, kurtosis, entropy : real;
      tambah  : integer;

begin
w:=0;z:=0;sigma:=0;face:=false;
//-----------------------------------
  for x := 5 to OutBuffer.Width - (konstanta) do
    for y := 5 to OutBuffer.Height - (konstanta) do
    if inbuffer.red[x,y]>200 then
    if face=false then
    begin
    z_k:=x+konstanta;z:=x;
    w_k:=y+konstanta;w:=y;  tambah:=0;
     for z:=x to (z_k) do
      for  w:=y to (w_k) do
      begin //*
      datatemp[inbuffer.red[z,w]]:=datatemp[inbuffer.red[z,w]]+1;
      inc(tambah);
      end; //*
      for l:=0 to 255 do        //Hitung mean
        if datatemp[l]<>0 then
        begin
        sigma:=sigma+ (l*datatemp[l]/tambah);
        end;
        mean:=sigma;sigma:=0;
        edit1.Text:=floattostr(mean);
        //------------------------------------------
          for l:=0 to 255 do      //Hitung variance
            if datatemp[l]<>0 then
            begin
            sigma:=sigma+ ((sqr(l-mean))*(datatemp[l]/tambah));
            end;
            varians:=sigma;sigma:=0;
            std:=sqrt(varians);
            edit2.Text:=floattostr(varians);
            edit3.Text:=floattostr(std);
        //---------------------------------------------------
        for l:=0 to 255 do      //Hitung skewness
          if datatemp[l]<>0 then
          begin
          sigma:=sigma+ ((sqr(l-mean)*(l-mean))*(datatemp[l]/tambah));

          end;
          skewness:=sigma/(std*std*std);sigma:=0.0;
          edit4.Text:=floattostr(skewness);
        //---------------------------------------------------
        for l:=0 to 255 do      //Hitung kurtosis
          if datatemp[l]<>0 then
          begin
          sigma:=sigma+ (((sqr(sqr(l-mean)))* (datatemp[l]/tambah))-3);

          end;
          kurtosis:=sigma/(sqr(sqr(std)));sigma:=0.0;

        for l:=0 to 255 do      //Hitung entropy
          if datatemp[l]<>0 then
          begin
          sigma:=sigma+ (((datatemp[l]/tambah))*(ln(datatemp[l]/tambah)/ln(2)));

          end;
          entropy:=-1*sigma;sigma:=0.0;
          edit5.Text:=floattostr(kurtosis);
          edit6.Text:=floattostr(entropy);
  //------------------------------------------------
  if abs(mean-t_mean)<(koefi) then
  if abs(skewness-t_skew)<koefi then
  if abs(kurtosis-t_kurto)<(koefi) then
  if abs(entropy-t_entro)<koefi then  begin face:=true;xa:=x;ya:=y;
                                      xb:=x+konstanta;yb:=y+konstanta;
                    if simwaj=true then //simpan wajah
                     begin
                     mean_sa:=mean; var_sa:=varians;
                     kurto_sa:=kurtosis; skew_sa:=skewness;
                     entro_sa:=entropy; simwaj:=false;
                     end;
      if rekogn=true then //kenali berdasarkan bobot
        if abs(mean-mean_sa)<(koefir) then
         if abs(skewness-skew_sa)<koefir then
         if abs(kurtosis-kurto_sa)<(koefir) then
         if abs(entropy-entro_sa)<koefir then begin
                                      kenal:=true;
                                      end;
                                      end;
     end;  //end if dan for


//-----------clear
for x:=0 to 255 do datatemp[x]:=0;

end;

procedure TForm1.VLGenericFilter3ProcessData(Sender: TObject;
    InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
  var SendOutputData: Boolean);
begin
if face=true then
begin
InBuffer.ToBitmap( FBitmap );

  FBitmap.Canvas.Brush.Style := bsClear;
  FBitmap.Canvas.Pen.Width := 2;
  FBitmap.Canvas.Pen.Color := clred;
  if kenal=true then
  begin
  FBitmap.Canvas.Pen.Color := clblue;
  kenal:=false;
  end;
  FBitmap.Canvas.Rectangle( xa, ya, xb, yb);
OutBuffer.FromBitmap( FBitmap );
end;
face:=false;
end;


procedure TForm1.VLGenericFilter1ProcessData(Sender: TObject;
  InBuffer: IVLImageBuffer; var OutBuffer: IVLImageBuffer;
  var SendOutputData: Boolean);
  var x,y,sobelx,sobely,sobel : integer;
begin
for x := 0 to OutBuffer.Width - 2 do
    for y := 0 to OutBuffer.Height - 2 do
    begin
    sobelx:=  (x1*inbuffer.red[x,y])+(x2*inbuffer.red[x+1,y])+(x3*inbuffer.red[x+2,y])+(x4*inbuffer.red[x,y+1])+(x5*inbuffer.red[x+1,y+1])+ (x6*inbuffer.red[x+2,y+1])+(x7*inbuffer.red[x,y+2])+(x8* inbuffer.red[x+1,y+2])+(x9*inbuffer.red[x+2,y+2]);
    sobely:=(x10*inbuffer.blue[x,y])+(x11*inbuffer.blue[x+1,y])+ (x12*inbuffer.blue[x+2,y])+(x13*inbuffer.blue[x,y+1])+(x14* inbuffer.blue[x+1,y+1])+(x15*inbuffer.blue[x+2,y+1])+         (x16*inbuffer.blue[x,y+2])+(x17*inbuffer.blue[x+1, y+2])+ (x18*inbuffer.blue[x+2,y+2]);

    sobel:=sobelx+sobely;
    if sobel>100 then sobel:=255 else sobel:=0;
    outbuffer.Red[x,y]:=sobel;
    outbuffer.Green[x,y]:=sobel;
    outbuffer.Blue[x,y]:=sobel;
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
simwaj:=true;
button1.enabled:=false;

end;
procedure TForm1.FormActivate(Sender: TObject);
var x : byte;
begin
kenal:=false;
koefi:=7;
loaddata1.Click;
simwaj:=false;
konstanta:=25;
for x:=0 to 255 do datatemp[x]:=0;
//-------------------
x1:=-1;x2:=0;x3:=1;
x4:=-2;x5:=0;x6:=2;
x7:=-1;x8:=0;x9:=1;
//--------------------
x10:=1;x11:=2;x12:=1;
x13:=0;x14:=0;x15:=0;
x16:=-1;x17:=-2;x18:=-1;
//---------------------
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
rekogn:=true;
koefir:=2;
button2.Enabled:=false;

end;

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
//-------------------
x1:=-1;x2:=-1;x3:=-1;
x4:=-1;x5:=8;x6:=-1;
x7:=-1;x8:=-1;x9:=-1;
//--------------------
x10:=1;x11:=-2;x12:=1;
x13:=-2;x14:=4;x15:=-2;
x16:=1;x17:=-2;x18:=1;
//---------------------

end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
//-------------------
x1:=-1;x2:=0;x3:=1;
x4:=-2;x5:=0;x6:=2;
x7:=-1;x8:=0;x9:=1;
//--------------------
x10:=1;x11:=2;x12:=1;
x13:=0;x14:=0;x15:=0;
x16:=-1;x17:=-2;x18:=-1;
//---------------------

end;

procedure TForm1.Latihan1Click(Sender: TObject);
begin
VLDSCapture1.enabled:=false;
Form2.ShowModal;

end;

procedure TForm1.LoadData1Click(Sender: TObject);
var bebanW1   : string;
    i, j      : integer;
    cacah     : byte;

begin
cacah:=0;
t_mean:=0;
t_var:=0;
t_std:=0;
t_skew:=0;
t_kurto:=0;
t_entro:=0;
  //----------------------------------   bobot wajah
  NamaArsip:='wajah.txt';
  AssignFile(Fj,NamaArsip);
  reset(Fj);
  //------------------------------------
  i:=0;
  while not Eof(Fj) do
      begin
        for j:=0 to 5 do
        begin
              Readln(Fj,bebanW1);
              stringgrid1.Cells[j,i]:=bebanW1;
     if cacah = 0 then t_mean:=t_mean+strtofloat(bebanW1);
     if cacah = 1 then t_var:=t_var+strtofloat(bebanW1);
     if cacah = 2 then t_std:=t_std+strtofloat(bebanW1);
     if cacah = 3 then t_skew:=t_skew+strtofloat(bebanW1);
     if cacah = 4 then t_kurto:=t_kurto+strtofloat(bebanW1);
     if cacah = 5 then t_entro:=t_entro+strtofloat(bebanW1);
        cacah:=cacah+1;
       if cacah>5 then cacah:=0;
        end;
        i:=i+1;

      end;
  CloseFile(Fj);
  stringgrid1.Rowcount:=i;
  stringgrid1.Visible:=true;
  t_mean:=t_mean/i;edit7.Text:=floattostr(t_mean);
  t_var:=t_var/i;edit8.Text:=floattostr(t_var);
  t_std:=t_std/i;edit9.Text:=floattostr(t_std);
  t_skew:=t_skew/i;edit10.Text:=floattostr(t_skew);
  t_kurto:=t_kurto/i;edit11.Text:=floattostr(t_kurto);
  t_entro:=t_entro/i;edit12.Text:=floattostr(t_entro);


end;

procedure TForm1.VLGenericFilter3Start(Sender: TObject; var AWidth,
  AHeight: Integer; AFrameDelay: Real);
begin
FBitmap := TVLBitmap.Create();
end;

procedure TForm1.VLGenericFilter3Stop(Sender: TObject);
begin
FBitmap.Free();
end;



end.

By : Fadlisyah

0 komentar: