Skip to content

Latest commit

Β 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ‘οΈ Eye.IRIS β€” Sistem Deteksi Penyakit Mata Berbasis AI

Eye.IRIS adalah aplikasi web berbasis Django yang memungkinkan pengguna untuk melakukan deteksi penyakit mata dari foto fundus retina menggunakan model Machine Learning, dilengkapi dengan analisis AI dari LLM (Large Language Model) untuk memberikan rekomendasi medis secara otomatis.

Proyek ini dikembangkan sebagai Final Project mata kuliah Neuro Computing.


πŸ“Œ Apa Itu Proyek Ini?

Eye.IRIS adalah platform diagnostik mata berbasis web yang:

  • Menerima upload dua foto fundus retina (mata kiri dan mata kanan) dari seorang pasien
  • Memproses foto tersebut menggunakan model ML (disimpan sebagai model_1.pkl) untuk mendeteksi 8 kategori kondisi mata:
    • Normal
    • Diabetes
    • Glaucoma
    • Cataract
    • Age-related Macular Degeneration
    • Hypertension
    • Pathological Myopia
    • Other diseases/abnormalities
  • Menganalisis hasil prediksi menggunakan LLM via Groq API untuk memberikan penjelasan, rekomendasi, dan saran tindak lanjut kepada pasien
  • Menyimpan riwayat data pasien ke database PostgreSQL
  • Dilindungi dengan sistem autentikasi pengguna (Login / Register / Logout)

πŸ› οΈ Tech Stack

Layer Teknologi
Web Framework Django
Database PostgreSQL (psycopg2-binary)
Machine Learning Scikit-learn, XGBoost, TensorFlow/Keras, FastAI, NumPy, Pandas, Joblib
Image Processing Pillow (PIL)
AI / LLM LangChain + Groq API (langchain-groq)
Templating Django Template Engine (HTML + CSS)
Environment python-dotenv
Custom Keras Layer Keras register_keras_serializable (GAM layer)

πŸ“ Struktur Proyek

Final Project 2/
β”‚
β”œβ”€β”€ manage.py                   # Entry point Django CLI
β”œβ”€β”€ requirements.txt            # Daftar dependencies Python
β”œβ”€β”€ .env                        # Variabel environment (tidak di-commit ke Git)
β”œβ”€β”€ .gitignore
β”‚
β”œβ”€β”€ iris/                       # Konfigurasi proyek Django
β”‚   β”œβ”€β”€ settings.py             # Pengaturan global (DB, Auth, Static, Media)
β”‚   β”œβ”€β”€ urls.py                 # Root URL router
β”‚   β”œβ”€β”€ asgi.py
β”‚   └── wsgi.py
β”‚
β”œβ”€β”€ core/                       # Aplikasi utama
β”‚   β”œβ”€β”€ models.py               # Model database: Patient
β”‚   β”œβ”€β”€ views.py                # Logic halaman (landing, dashboard, login, dll.)
β”‚   β”œβ”€β”€ forms.py                # Form: PatientForm, LoginForm, RegisterForm
β”‚   β”œβ”€β”€ urls.py                 # URL routing untuk aplikasi core
β”‚   β”œβ”€β”€ ai_utils.py             # Fungsi helper untuk memanggil LLM (Groq)
β”‚   β”œβ”€β”€ model_custom.py         # Custom Keras layer (GAM) untuk deserialisasi model
β”‚   β”œβ”€β”€ admin.py
β”‚   β”œβ”€β”€ apps.py
β”‚   └── model/
β”‚       └── model_1.pkl         # Model ML yang sudah dilatih (binary)
β”‚
β”œβ”€β”€ templates/                  # HTML templates
β”‚   β”œβ”€β”€ base.html               # Layout dasar (extend oleh halaman lain)
β”‚   β”œβ”€β”€ core/
β”‚   β”‚   β”œβ”€β”€ landing.html        # Halaman utama publik
β”‚   β”‚   β”œβ”€β”€ about.html          # Halaman tentang aplikasi
β”‚   β”‚   β”œβ”€β”€ dashboard.html      # Halaman utama user (upload + hasil prediksi)
β”‚   β”‚   β”œβ”€β”€ login.html          # Form login
β”‚   β”‚   β”œβ”€β”€ register.html       # Form registrasi
β”‚   β”‚   β”œβ”€β”€ contact.html        # Halaman kontak
β”‚   β”‚   β”œβ”€β”€ faq.html            # Halaman FAQ
β”‚   β”‚   β”œβ”€β”€ history.html        # Riwayat pemeriksaan
β”‚   β”‚   └── screening.html      # Halaman screening
β”‚   └── partials/
β”‚       β”œβ”€β”€ header.html         # Navigasi + user greeting
β”‚       └── footer.html         # Footer global
β”‚
β”œβ”€β”€ static/
β”‚   β”œβ”€β”€ css/                    # File CSS
β”‚   └── images/                 # Gambar statis
β”‚
β”œβ”€β”€ media/
β”‚   └── patients/               # Foto fundus yang di-upload oleh user (auto-generated)
β”‚
└── AUTHENTICATION_GUIDE.md     # Dokumentasi sistem autentikasi

πŸš€ Cara Menjalankan Proyek

1. Prasyarat

Pastikan sudah terinstal:

  • Python 3.10+
  • PostgreSQL
  • pip

2. Clone & Masuk ke Direktori

git clone <url-repo>
cd "Final Project 2"

3. Buat Virtual Environment

python -m venv venv
# Windows
venv\Scripts\activate
# Linux/macOS
source venv/bin/activate

4. Instal Dependensi

pip install -r requirements.txt

5. Konfigurasi Environment

Buat file .env di root proyek (sejajar dengan manage.py):

SECRET_KEY=your_django_secret_key_here
DEBUG=True

# PostgreSQL
DB_NAME=eyeiris_db
DB_USER=postgres
DB_PASSWORD=your_password
DB_HOST=localhost
DB_PORT=5432

# Groq API
GROQ_API_KEY=your_groq_api_key_here

Dapatkan GROQ_API_KEY gratis di https://console.groq.com

6. Buat Database di PostgreSQL

CREATE DATABASE eyeiris_db;

7. Jalankan Migrasi

python manage.py makemigrations
python manage.py migrate

8. (Opsional) Buat Superuser Admin

python manage.py createsuperuser

9. Jalankan Server

python manage.py runserver

Akses aplikasi di: http://localhost:8000


πŸ—ΊοΈ URL yang Tersedia

URL Halaman Auth Required
/ Landing Page ❌
/about/ Tentang Aplikasi ❌
/login/ Login ❌
/register/ Registrasi ❌
/dashboard/ Dashboard & Prediksi βœ…
/screening/ Screening ❌
/contact/ Kontak ❌
/faq/ FAQ ❌
/logout/ Logout (POST) βœ…
/api/ai-answer/ API: tanya ke AI ❌
/api/trigger-ai/ API: trigger AI dari dashboard βœ…

βž• Cara Menambah Fitur Baru

Berikut adalah pola standar untuk menambah fitur baru di proyek ini. Ikuti langkah-langkah berikut secara berurutan:

Langkah 1 β€” Tambah Model Database (jika perlu)

Edit core/models.py dan buat class model baru:

# core/models.py
from django.db import models

class NamaModelBaru(models.Model):
    field_satu = models.CharField(max_length=255)
    field_dua = models.IntegerField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.field_satu

Lalu jalankan migrasi:

python manage.py makemigrations
python manage.py migrate

Langkah 2 β€” Tambah Form (jika ada input dari user)

Edit core/forms.py:

# core/forms.py
from django import forms
from .models import NamaModelBaru

class NamaFormBaru(forms.ModelForm):
    class Meta:
        model = NamaModelBaru
        fields = ['field_satu', 'field_dua']
        widgets = {
            'field_satu': forms.TextInput(attrs={'class': 'form-input'}),
        }

Langkah 3 β€” Tambah View (logika halaman)

Edit core/views.py dan buat fungsi view baru:

# core/views.py
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .forms import NamaFormBaru
from .models import NamaModelBaru

@login_required(login_url='login')  # Hapus decorator ini jika halaman publik
def nama_fitur_view(request):
    if request.method == 'POST':
        form = NamaFormBaru(request.POST)
        if form.is_valid():
            form.save()
            return redirect('nama_url_tujuan')
    else:
        form = NamaFormBaru()
    
    return render(request, 'core/nama_template.html', {
        'page': 'nama_fitur',
        'form': form,
    })

Langkah 4 β€” Daftarkan URL

Edit core/urls.py:

# core/urls.py
from . import views

urlpatterns = [
    # ... url yang sudah ada ...
    path('nama-fitur/', views.nama_fitur_view, name='nama_fitur'),
]

Langkah 5 β€” Buat Template HTML

Buat file baru di templates/core/nama_template.html:

{% extends "base.html" %}
{% block content %}

<section class="nama-fitur-section">
    <h1>Judul Fitur</h1>
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
    </form>
</section>

{% endblock %}

Langkah 6 β€” Tambah Integrasi AI (opsional)

Jika fitur baru membutuhkan analisis dari LLM, gunakan helper di core/ai_utils.py:

# Panggil dari view atau service lain
from .ai_utils import ask_ai

def analisis_fitur_baru(data_input: str) -> str:
    system_prompt = "Kamu adalah asisten yang ahli dalam bidang X."
    question = f"Analisis data berikut: {data_input}"
    
    answer, _ = ask_ai(variable=data_input, question=question, system_prompt=system_prompt)
    return answer

Kemudian tambahkan fungsi ini ke ai_utils.py dan panggil dari view.


Langkah 7 β€” (Opsional) Daftarkan ke Admin Panel

Edit core/admin.py:

from django.contrib import admin
from .models import NamaModelBaru

admin.site.register(NamaModelBaru)

πŸ“ Catatan Penting

  • Model ML disimpan sebagai core/model/model_1.pkl dan di-load menggunakan joblib. Model menerima input gambar berukuran 224Γ—224 RGB.
  • Custom Layer GAM di core/model_custom.py harus selalu di-import sebelum model di-load agar deserialisasi tidak gagal.
  • Groq API Key wajib ada di .env. Tanpa itu, server tidak akan bisa start.
  • Media files (foto upload) disimpan di folder media/patients/ dan diakses melalui URL /media/.
  • Semua protected routes menggunakan decorator @login_required(login_url='login').

πŸ“„ Dokumentasi Tambahan


Proyek ini dikembangkan untuk keperluan akademis β€” Final Project Mata Kuliah Neuro Computing.

About

Deteksi penyakit mata kini lebih cepat! Eye.IRIS memadukan Machine Learning dan AI mutakhir untuk menganalisis foto retina secara presisi. Dapatkan hasil deteksi instan, lengkap dengan rekomendasi medis otomatis yang akurat. Solusi revolusioner pelindung penglihatan Anda!

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages