Pengenalan Huruf Hijaiyah Menggunakan Jaringan Syaraf Tiruan Perceptron


Huruf hijaiyah merupakan dasar dari sistem penulisan bahasa Arab yang terdiri dari 29 huruf. Kemampuan mengenali huruf hijaiyah sangat penting dalam pembelajaran Al-Qur’an maupun pemrosesan teks Arab secara digital. Salah satu pendekatan komputasi yang dapat digunakan untuk klasifikasi pola visual adalah Jaringan Syaraf Tiruan (JST).

Huruf Hijaiyah

Pada penelitian ini digunakan arsitektur perceptron untuk mengenali huruf hijaiyah berdasarkan citra yang telah diproses menjadi bentuk biner. Data latih yang digunakan berjumlah 20 × 29 citra, sedangkan data uji berjumlah 10 × 29 citra.

Tujuan utama penelitian ini adalah membangun sistem pengenalan huruf hijaiyah berbasis GUI MATLAB dengan JST perceptron yang mampu mengklasifikasikan setiap citra huruf ke dalam kelas yang sesuai.

  • Akuisisi dan Pra-pengolahan Data

Dataset berupa citra huruf hijaiyah dengan format JPEG disimpan dalam folder khusus. Setiap huruf hijaiyah memiliki 30 sampel (20 digunakan sebagai data latih dan 10 digunakan sebagai data uji).

Tahapan pra-pengolahan dilakukan dengan langkah-langkah:

  1. Konversi citra RGB → grayscale.
  2. Binarisasi citra.
  3. Operasi morfologi (komplemen dan area opening).
  4. Cropping objek huruf.
  5. Resize citra hasil cropping menjadi 10 × 10 piksel.
  6. Vektorisasi ke dalam bentuk 100 × 1 vektor fitur.
Pra-pengolahan Citra
  • Arsitektur Jaringan Perceptron
Arsitektur Jaringan Syaraf Tiruan Perceptron

Jaringan perceptron yang digunakan memiliki karakteristik:

  • Lapisan input: 100 neuron (dari hasil vektorisasi 10 × 10 piksel).
  • Lapisan output: 29 neuron (merepresentasikan 29 huruf hijaiyah).
  • Fungsi aktivasi: hardlim.
  • Algoritma pelatihan: supervised learning dengan train.
  • Epoch maksimum: 100.

Target keluaran direpresentasikan dalam bentuk one-hot encoding menggunakan fungsi ind2vec.

  • Proses Pelatihan dan Pengujian
Pelatihan Jaringan Syaraf Tiruan Perceptron

Pelatihan dilakukan dengan 20 × 29 = 580 data.

Hasil Pelatihan

Pengujian dilakukan dengan 10 × 29 = 290 data.

Hasil Pengujian

Hasil keluaran jaringan dibandingkan dengan label target untuk menghitung akurasi, jumlah benar, dan jumlah salah.

Pada pengujian dengan 290 data uji, sistem mampu mengklasifikasikan huruf hijaiyah ke dalam kelas yang sesuai. Tingkat akurasi pengujian sedikit lebih rendah dibandingkan pelatihan, namun masih menunjukkan kinerja yang baik dalam mengenali huruf.

GUI Pengenalan Huruf Hijaiyah

Penelitian ini berhasil membangun sistem pengenalan huruf hijaiyah berbasis JST perceptron dengan data latih 580 citra dan data uji 290 citra. Proses pra-pengolahan citra (grayscale, binarisasi, cropping, resize, dan vektorisasi) terbukti efektif dalam mengekstraksi fitur.

GUI Pengenalan Huruf Hijaiyah

Hasil pengujian menunjukkan bahwa perceptron mampu mengenali huruf hijaiyah dengan akurasi yang cukup tinggi, sehingga metode ini dapat dijadikan dasar untuk pengembangan lebih lanjut seperti aplikasi dalam media pembelajaran interaktif pengenalan huruf hijaiyah.

Source Code:

function varargout = halaman_pelatihan(varargin)
% HALAMAN_PELATIHAN MATLAB code for halaman_pelatihan.fig
%      HALAMAN_PELATIHAN, by itself, creates a new HALAMAN_PELATIHAN or raises the existing
%      singleton*.
%
%      H = HALAMAN_PELATIHAN returns the handle to a new HALAMAN_PELATIHAN or the handle to
%      the existing singleton*.
%
%      HALAMAN_PELATIHAN('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in HALAMAN_PELATIHAN.M with the given input arguments.
%
%      HALAMAN_PELATIHAN('Property','Value',...) creates a new HALAMAN_PELATIHAN or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before halaman_pelatihan_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to halaman_pelatihan_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help halaman_pelatihan

% Last Modified by GUIDE v2.5 13-Jan-2024 17:00:29

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
    'gui_Singleton',  gui_Singleton, ...
    'gui_OpeningFcn', @halaman_pelatihan_OpeningFcn, ...
    'gui_OutputFcn',  @halaman_pelatihan_OutputFcn, ...
    'gui_LayoutFcn',  [] , ...
    'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before halaman_pelatihan is made visible.
function halaman_pelatihan_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to halaman_pelatihan (see VARARGIN)

% Choose default command line output for halaman_pelatihan
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
movegui(hObject,'center');

% UIWAIT makes halaman_pelatihan wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = halaman_pelatihan_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% menampilkan menu "browse folder"
nama_folder = uigetdir;
% jika ada nama folder yg dipilih maka akan mengeksekusi perintah di bawah
% ini
if ~isequal(nama_folder,0)
    % membaca nama file yg berekstensi .jpeg
    nama_file = dir(fullfile(nama_folder,'*.jpeg'));
    % membaca jumlah file yg berekstensi .jpeg
    jumlah_file = numel(nama_file);
    % menginisialisasi variabel data_tabel
    data_tabel = cell(jumlah_file,2);
    % menyusun target
    target = zeros(1,jumlah_file);
    for i = 1:29
        for j = 1:30
            target((i-1)*30+j) = i;
        end
    end
    % menyusun kelas asli
    kelas_asli = {'alif','ba','ta','tsa','jim','ha','kha','dal','dzal',...
        'ra','zai','sin','syin','shad','dhad','tha','zha',...
        'ain','ghain','fa','qaf','kaf','lam','mim','nun','wau',...
        'hah','hamzah','ya',};
    % menyusun data_tabel
    for k = 1:jumlah_file
        data_tabel{k,1} = nama_file(k).name;
        data_tabel{k,2} = kelas_asli{target(k)};
    end
    
    % menampilkan data_tabel pada tabel
    set(handles.uitable1,'Data',data_tabel,'RowName',1:jumlah_file)
    
    % menyimpan variabel2 pada lokasi handles agar dapat dipanggil oleh
    % pushbutton yg lain
    handles.data_tabel = data_tabel;
    handles.target = target;
    handles.nama_folder = nama_folder;
    handles.nama_file = nama_file;
    handles.jumlah_file = jumlah_file;
    handles.kelas_asli = kelas_asli;
    guidata(hObject, handles)
    
    % mereset button2
    set(handles.pushbutton2,'Enable','on')
    set(handles.pushbutton3,'Enable','off')
    set(handles.edit1,'String',[])
    set(handles.edit2,'String',[])
    set(handles.edit3,'String',[])
    set(handles.edit4,'String',[])
    
end


% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% memanggil variabel2 yg ada di lokasi handles
data_tabel = handles.data_tabel;
target = handles.target;
nama_folder = handles.nama_folder;
nama_file = handles.nama_file;
jumlah_file = handles.jumlah_file;
kelas_asli = handles.kelas_asli;

% menginisialisasi variabel input
input = zeros(100,jumlah_file);
% melakukan pengolahan citra terhadap seluruh file
for k = 1:jumlah_file
    % membaca file citra rgb
    Img = imread(fullfile(nama_folder,nama_file(k).name));
    % mengkonversi citra rgb menjadi citra grayscale
    Img_gray = rgb2gray(Img);
    % mengkonversi citra grayscale menjadi citra biner
    bw = imbinarize(Img_gray);
    % melakukan operasi komplemen
    bw2 = imcomplement(bw);
    % melakukan operasi morfologi
    bw3 = bwareaopen(bw2,10);
    % melakukan cropping
    [row,col] = find(bw3==1);
    bw4 = imcrop(bw3,[min(col) min(row) max(col)-min(col) max(row)-min(row)]);
    % vektorisasi citra biner
    bw5 = imresize(bw4,[10,10]);
    bw6 = bw5(:);
    input(:,k) = bw6;
end

% melakukan pelatihan menggunakan algoritma perceptron
net = perceptron;
net.trainParam.epochs = 200;
net = train(net,input,ind2vec(target));
output = net(input);
output = vec2ind(output);

% mengkonversi nilai keluaran menjadi kelas keluaran
for k = 1:jumlah_file
    data_tabel{k,3} = kelas_asli{output(k)};
end

% menampilkan data_tabel pada tabel
set(handles.uitable1,'Data',data_tabel,'RowName',1:jumlah_file)

% menghitung akurasi pelatihan
jumlah_data = jumlah_file;
jumlah_benar = numel(find(output==target));
jumlah_salah = numel(find(output~=target));
akurasi = jumlah_benar/jumlah_data*100;

% menampilkan akurasi pada edit text
set(handles.edit1,'String',num2str(jumlah_data))
set(handles.edit2,'String',num2str(jumlah_benar))
set(handles.edit3,'String',num2str(jumlah_salah))
set(handles.edit4,'String',[num2str(akurasi),'%'])

% menyimpan variabel2 pada lokasi handles agar dapat dipanggil oleh
% pushbutton yg lain
handles.net = net;
guidata(hObject, handles)

% mereset button2
set(handles.pushbutton3,'Enable','on')


% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% memanggil variabel2 yg ada di lokasi handles
net = handles.net;

% menampilkan menu "save file"
[nama_file,nama_folder] = uiputfile('*.mat');
% jika ada nama file yg akan disimpan maka akan mengeksekusi perintah di
% bawah ini
if ~isequal(nama_file,0)
    % menyimpan arsitektur jaringan hasil pelatihan
    save(fullfile(nama_folder,nama_file),'net')
    % menampilkan dialog
    msgbox('Arsitektur Jaringan Berhasil Disimpan!!');
end



% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% mereset button2
set(handles.uitable1,'Data',[],'RowName',{'' '' '' ''})
set(handles.pushbutton2,'Enable','off')
set(handles.pushbutton3,'Enable','off')
set(handles.edit1,'String',[])
set(handles.edit2,'String',[])
set(handles.edit3,'String',[])
set(handles.edit4,'String',[])

function edit1_Callback(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
%        str2double(get(hObject,'String')) returns contents of edit1 as a double


% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit2_Callback(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text
%        str2double(get(hObject,'String')) returns contents of edit2 as a double


% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit3_Callback(hObject, eventdata, handles)
% hObject    handle to edit3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit3 as text
%        str2double(get(hObject,'String')) returns contents of edit3 as a double


% --- Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit4_Callback(hObject, eventdata, handles)
% hObject    handle to edit4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit4 as text
%        str2double(get(hObject,'String')) returns contents of edit4 as a double


% --- Executes during object creation, after setting all properties.
function edit4_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --------------------------------------------------------------------
function Halaman_Depan_Callback(hObject, eventdata, handles)
% hObject    handle to Halaman_Depan (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

close;halaman_depan;

% --------------------------------------------------------------------
function Pengujian_Callback(hObject, eventdata, handles)
% hObject    handle to Pengujian (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

close;halaman_pengujian;

Posted on September 7, 2025, in Pengenalan Pola, Pengolahan Citra and tagged , , , , , , . Bookmark the permalink. Leave a comment.

Leave a comment