TIFNGK_E41222722/templates/index.html

135 lines
5.9 KiB
HTML

{% extends "base.html" %}
{% block title %}Beranda{% endblock %}
{% block content %}
<div class="row justify-content-center">
<div class="col-md-10">
<!-- Hero Section -->
<div class="text-center mb-5">
<h1 class="display-4 fw-bold text-success mb-3">
<i class="fas fa-cow"></i> Sistem Deteksi dan Diagnosis PMK
</h1>
<p class="lead text-muted">
Deteksi dini Penyakit Mulut dan Kuku (PMK) pada sapi menggunakan teknologi
<span class="badge bg-success">Image Processing</span>
</p>
</div>
<!-- Status Model -->
<div id="model-status-banner" class="alert text-center {% if model_loaded %}alert-success{% else %}alert-warning{% endif %}">
{% if model_loaded %}
<i class="fas fa-check-circle"></i> Model siap digunakan
{% else %}
<i class="fas fa-exclamation-triangle"></i> Model sedang dimuat, silakan tunggu...
{% endif %}
</div>
<!-- Main Features -->
<div class="row g-4 mb-5 justify-content-center">
<div class="col-md-5 mb-3">
<div class="card h-100 border-0 shadow">
<div class="card-body text-center p-4">
<div class="feature-icon bg-success text-white rounded-circle mb-3">
<i class="fas fa-camera fa-3x p-3"></i>
</div>
<h3 class="card-title">Deteksi via Gambar</h3>
<p class="card-text text-muted">
Upload gambar sapi untuk mendeteksi kemungkinan infeksi PMK
menggunakan teknologi image processing dan machine learning.
</p>
<ul class="list-unstyled text-start mb-4">
<li><i class="fas fa-check text-success me-2"></i>Akurasi tinggi</li>
<li><i class="fas fa-check text-success me-2"></i>Hasil cepat</li>
<li><i class="fas fa-check text-success me-2"></i>Support berbagai format gambar</li>
</ul>
<a href="{{ url_for('upload') }}" class="btn btn-success btn-lg w-100">
<i class="fas fa-upload me-2"></i>Upload Gambar
</a>
<a href="{{ url_for('expert_system_page', mode='manual') }}" class="btn btn-outline-success btn-lg w-100 mt-2">
<i class="fas fa-brain me-2"></i>Sistem Pakar Langsung
</a>
</div>
</div>
</div>
<!-- Cara Kerja -->
<div class="row mb-5 mt-3">
<div class="col-12">
<h2 class="text-center mb-4">Cara Kerja Sistem</h2>
<div class="row">
<div class="col-md-4 mb-3">
<div class="card text-center h-100">
<div class="card-body">
<div class="step-circle mx-auto">1</div>
<h5>Upload Gambar</h5>
<p class="text-muted">Upload gambar sapi untuk analisis awal menggunakan image processing</p>
</div>
</div>
</div>
<div class="col-md-4 mb-3">
<div class="card text-center h-100">
<div class="card-body">
<div class="step-circle mx-auto">2</div>
<h5>Deteksi PMK</h5>
<p class="text-muted">Sistem menganalisis gambar dan memberikan hasil deteksi</p>
</div>
</div>
</div>
<div class="col-md-4 mb-3">
<div class="card text-center h-100">
<div class="card-body">
<div class="step-circle mx-auto">3</div>
<h5>Diagnosis Lanjutan</h5>
<p class="text-muted">Jika terdeteksi sakit, lanjut ke sistem pakar untuk diagnosis lengkap. Atau gunakan sistem pakar langsung tanpa gambar.</p>
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.feature-icon {
width: 100px;
height: 100px;
margin: 0 auto 20px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
const banner = document.getElementById('model-status-banner');
if (!banner) return;
async function refreshModelStatus() {
try {
const response = await fetch('{{ url_for("api_model_status") }}', { cache: 'no-store' });
if (!response.ok) return;
const data = await response.json();
if (data.ready) {
banner.className = 'alert alert-success text-center';
banner.innerHTML = '<i class="fas fa-check-circle"></i> Model siap digunakan';
return;
}
if (data.status === 'error' && data.error) {
banner.className = 'alert alert-danger text-center';
banner.innerHTML = '<i class="fas fa-times-circle"></i> Model gagal dimuat: ' + data.error;
return;
}
banner.className = 'alert alert-warning text-center';
banner.innerHTML = '<i class="fas fa-exclamation-triangle"></i> Model sedang dimuat, silakan tunggu...';
} catch (error) {
console.error('Failed to fetch model status:', error);
}
}
refreshModelStatus();
setInterval(refreshModelStatus, 5000);
});
</script>
{% endblock %}