135 lines
5.9 KiB
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 %} |