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.
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)
| 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) |
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
Pastikan sudah terinstal:
- Python 3.10+
- PostgreSQL
- pip
git clone <url-repo>
cd "Final Project 2"python -m venv venv
# Windows
venv\Scripts\activate
# Linux/macOS
source venv/bin/activatepip install -r requirements.txtBuat 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_hereDapatkan GROQ_API_KEY gratis di https://console.groq.com
CREATE DATABASE eyeiris_db;python manage.py makemigrations
python manage.py migratepython manage.py createsuperuserpython manage.py runserverAkses aplikasi di: http://localhost:8000
| 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 | β |
Berikut adalah pola standar untuk menambah fitur baru di proyek ini. Ikuti langkah-langkah berikut secara berurutan:
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_satuLalu jalankan migrasi:
python manage.py makemigrations
python manage.py migrateEdit 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'}),
}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,
})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'),
]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 %}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 answerKemudian tambahkan fungsi ini ke ai_utils.py dan panggil dari view.
Edit core/admin.py:
from django.contrib import admin
from .models import NamaModelBaru
admin.site.register(NamaModelBaru)- Model ML disimpan sebagai
core/model/model_1.pkldan di-load menggunakanjoblib. Model menerima input gambar berukuran 224Γ224 RGB. - Custom Layer GAM di
core/model_custom.pyharus 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').
- AUTHENTICATION_GUIDE.md β Panduan lengkap sistem autentikasi
Proyek ini dikembangkan untuk keperluan akademis β Final Project Mata Kuliah Neuro Computing.