MIF_E31230820/resources/views/welcome.blade.php

300 lines
19 KiB
PHP

@extends('layouts.main')
@section('title', 'Klasifikasi Penyakit Daun Padi - Rice Leaf AI')
@push('styles')
<style>
/* CSS murni untuk memastikan animasi berjalan lancar tanpa bentrok config global */
@keyframes fadeInUp {
0% { opacity: 0; transform: translateY(20px); }
100% { opacity: 1; transform: translateY(0); }
}
.animate-fade-in-up {
animation: fadeInUp 0.8s ease-out forwards;
}
@keyframes pulseSlow {
0%, 100% { opacity: 0.2; transform: scale(1); }
50% { opacity: 0.3; transform: scale(1.05); }
}
.animate-pulse-slow {
animation: pulseSlow 3s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
</style>
@endpush
@section('content')
<div class="bg-gradient-to-br from-green-100 via-white to-green-50 min-h-screen transition-all duration-500">
<section class="max-w-7xl mx-auto px-6 py-20 grid md:grid-cols-2 gap-12 items-center min-h-[80vh]">
<div class="animate-fade-in-up">
<div class="inline-block bg-green-100 text-green-700 px-4 py-1.5 rounded-full text-sm font-semibold mb-6 shadow-sm border border-green-200">
Deep Learning Technology
</div>
<h1 class="text-5xl lg:text-6xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-green-900 to-green-600 leading-tight mb-6">
Sistem Klasifikasi<br>Penyakit Daun Padi<br>Berbasis AI
</h1>
<p class="text-lg text-gray-600 mb-10 leading-relaxed max-w-lg">
Deteksi penyakit daun padi secara otomatis dan akurat menggunakan teknologi <strong>Deep Learning</strong> berbasis website. Cukup unggah foto, biarkan AI yang menganalisis.
</p>
<div class="flex flex-wrap gap-4">
<a href="#upload"
class="bg-gradient-to-r from-green-600 to-green-500 hover:from-green-700 hover:to-green-600 text-white px-8 py-4 rounded-2xl text-lg font-semibold shadow-xl hover:shadow-2xl transition-all duration-300 hover:-translate-y-1 flex items-center gap-2">
🎯 Mulai Prediksi
</a>
<a href="/dashboard"
class="bg-white border-2 border-green-500 text-green-600 hover:bg-green-50 px-8 py-4 rounded-2xl text-lg font-semibold transition-all duration-300 hover:-translate-y-1 flex items-center gap-2">
📊 Lihat Dashboard
</a>
</div>
</div>
<div class="relative animate-fade-in-up" style="animation-delay: 0.2s;">
<div class="absolute inset-0 bg-green-400 rounded-3xl blur-3xl opacity-20 animate-pulse-slow"></div>
<img src="https://images.unsplash.com/photo-1625246333195-78d9c38ad449?q=80&w=1200&auto=format&fit=crop"
class="relative rounded-3xl shadow-2xl border-4 border-white transform hover:scale-[1.02] transition-transform duration-500 w-full object-cover h-[500px]">
</div>
</section>
<section id="upload" class="max-w-4xl mx-auto px-6 pb-24 pt-10">
<div class="bg-white/90 backdrop-blur-xl rounded-[2.5rem] shadow-2xl p-8 md:p-14 border border-white/50 relative overflow-hidden">
<div class="absolute top-0 right-0 w-40 h-40 bg-green-100 rounded-full blur-3xl opacity-50 -mr-20 -mt-20"></div>
<div class="absolute bottom-0 left-0 w-40 h-40 bg-blue-100 rounded-full blur-3xl opacity-50 -ml-20 -mb-20"></div>
<div class="relative z-10">
<div class="text-center mb-10">
<h2 class="text-4xl font-extrabold text-gray-800 mb-3">Upload Gambar Daun</h2>
<p class="text-gray-500">Pilih gambar daun padi yang ingin dianalisis dengan jelas</p>
</div>
@if(session('success'))
<div class="bg-green-50 border-l-4 border-green-500 text-green-800 p-4 rounded-r-xl mb-8 shadow-sm flex items-center gap-3">
<span></span> {{ session('success') }}
</div>
@endif
@if(session('error'))
<div class="bg-red-50 border-l-4 border-red-500 text-red-800 p-4 rounded-r-xl mb-8 shadow-sm flex items-center gap-3">
<span>⚠️</span> {{ session('error') }}
</div>
@endif
@auth
<form id="formPrediksi" action="/prediksi" method="POST" enctype="multipart/form-data">
@csrf
@else
<form action="/login" method="GET">
@endauth
<div class="group border-3 border-dashed border-green-300 hover:border-green-500 hover:bg-green-50/50 bg-gray-50 rounded-3xl p-10 text-center transition-all duration-300 relative cursor-pointer">
<div class="absolute inset-0 w-full h-full cursor-pointer z-20 opacity-0">
<input type="file" name="gambar" id="gambar" accept="image/*" onchange="previewImage(event)" class="w-full h-full cursor-pointer" {{ Auth::check() ? '' : 'disabled' }}>
</div>
<div id="upload-placeholder" class="pointer-events-none">
<div class="bg-white w-20 h-20 rounded-full shadow-md flex items-center justify-center mx-auto mb-4 group-hover:scale-110 transition-transform duration-300">
@auth
<svg class="w-8 h-8 text-green-600" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"></path></svg>
@else
<svg class="w-8 h-8 text-yellow-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"></path></svg>
@endauth
</div>
<h3 class="text-xl font-semibold text-gray-700">Drag & Drop atau Klik Disini</h3>
<p class="text-gray-400 mt-2 text-sm">Mendukung format JPG, PNG, JPEG</p>
</div>
<div class="mt-6 text-center pointer-events-none z-10 relative">
<img id="preview" class="hidden mx-auto rounded-2xl shadow-xl w-64 h-64 object-cover border-4 border-white">
</div>
</div>
<button type="submit" id="{{ Auth::check() ? 'btnPrediksi' : '' }}" class="w-full mt-8 bg-gradient-to-r from-green-600 to-green-500 hover:from-green-700 hover:to-green-600 text-white py-4 rounded-2xl text-xl font-bold shadow-lg hover:shadow-xl hover:-translate-y-1 transition-all duration-300 flex justify-center items-center gap-2 group">
@auth
<span>Prediksi Sekarang</span>
<svg class="w-6 h-6 group-hover:translate-x-1 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path></svg>
@else
<span>Login untuk Memulai Prediksi</span>
<svg class="w-6 h-6 group-hover:translate-x-1 transition-transform" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path></svg>
@endauth
</button>
</form>
@if(session('hasil'))
<div class="mt-12 bg-white/50 border border-green-100 rounded-[2rem] p-8 shadow-inner relative overflow-hidden">
<div class="absolute top-0 left-0 w-2 h-full bg-green-500"></div>
<h2 class="text-3xl font-extrabold text-gray-800 mb-8 text-center">
Hasil Analisis AI
</h2>
<img src="{{ asset('uploads/' . session('gambar')) }}" class="w-72 rounded-2xl shadow-xl mb-10 mx-auto border-4 border-white transform hover:scale-105 transition-transform duration-500">
<div class="grid md:grid-cols-2 gap-6">
<div class="bg-white p-6 rounded-2xl shadow-sm border border-gray-100 hover:shadow-md transition-shadow">
<h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-1">Diagnosis Penyakit</h3>
<p class="text-3xl font-extrabold text-red-600 bg-red-50 inline-block px-4 py-1 rounded-lg mt-2">
{{ session('hasil') }}
</p>
</div>
<div class="bg-white p-6 rounded-2xl shadow-sm border border-gray-100 hover:shadow-md transition-shadow">
<h3 class="text-sm font-semibold text-gray-400 uppercase tracking-wider mb-1">Tingkat Kepercayaan (Confidence)</h3>
<p class="text-3xl font-extrabold text-green-600 mt-2 flex items-center gap-2">
{{ session('confidence') }}
<svg class="w-8 h-8 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
</p>
</div>
</div>
@if(session('allPredictions'))
<div class="bg-white p-8 rounded-2xl shadow-sm border border-gray-100 mt-6">
<h3 class="text-xl font-bold text-gray-800 mb-6 flex items-center gap-2">
<svg class="w-6 h-6 text-blue-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"></path></svg>
Probabilitas Semua Kelas
</h3>
@foreach(session('allPredictions') as $kelas => $nilai)
<div class="mb-5 group">
<div class="flex justify-between mb-2">
<span class="font-semibold text-gray-700 group-hover:text-green-600 transition-colors">{{ $kelas }}</span>
<span class="font-bold text-gray-900">{{ number_format($nilai, 2) }}%</span>
</div>
<div class="w-full bg-gray-100 rounded-full h-3 overflow-hidden shadow-inner">
<div class="bg-gradient-to-r from-green-500 to-green-400 h-3 rounded-full relative transition-all duration-1000 ease-out" style="width: {{ $nilai }}%">
<div class="absolute top-0 right-0 bottom-0 left-0 bg-[url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiPgo8cmVjdCB3aWR0aD0iOCIgaGVpZ2h0PSI4IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9IjAuMSIvPgo8L3N2Zz4=')] opacity-50"></div>
</div>
</div>
</div>
@endforeach
</div>
@endif
@if(session('deskripsi'))
<div class="bg-white p-8 rounded-2xl shadow-sm border border-gray-100 mt-6">
<h3 class="text-xl font-bold text-gray-800 mb-6 flex items-center gap-2">
<svg class="w-6 h-6 text-yellow-500" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
Informasi Detail
</h3>
<div class="space-y-6">
<div class="bg-blue-50/50 p-5 rounded-xl border border-blue-100">
<h4 class="font-bold text-blue-800 mb-2">Deskripsi Penyakit:</h4>
<p class="text-gray-700 leading-relaxed">{{ session('deskripsi') }}</p>
</div>
<div class="bg-green-50/50 p-5 rounded-xl border border-green-100">
<h4 class="font-bold text-green-800 mb-2">Saran & Solusi:</h4>
<p class="text-gray-700 leading-relaxed">{{ session('solusi') }}</p>
</div>
</div>
</div>
@endif
</div>
@endif
</div>
</div>
</section>
<section class="max-w-7xl mx-auto px-6 pb-24">
<div class="text-center mb-16">
<h2 class="text-4xl font-extrabold text-gray-800 mb-4">Galeri Penyakit Padi</h2>
<p class="text-gray-500 max-w-2xl mx-auto">Kenali berbagai jenis penyakit yang sering menyerang daun padi beserta gejalanya secara visual.</p>
</div>
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-8">
<div class="group bg-white rounded-3xl shadow-lg hover:shadow-2xl hover:-translate-y-2 transition-all duration-300 overflow-hidden border border-gray-100">
<div class="relative overflow-hidden">
<img src="https://images.unsplash.com/photo-1592982537447-6f2a6a0f4d4d?q=80&w=1200&auto=format&fit=crop" class="h-56 w-full object-cover group-hover:scale-110 transition-transform duration-700">
<div class="absolute top-4 right-4 bg-white/90 backdrop-blur-sm px-3 py-1 rounded-full text-xs font-bold text-red-600 shadow-sm">Bahaya</div>
</div>
<div class="p-6">
<h3 class="text-2xl font-bold text-gray-800 mb-3 group-hover:text-red-600 transition-colors">Blast</h3>
<p class="text-gray-500 text-sm leading-relaxed">Penyakit akibat jamur yang menyerang daun padi, ditandai dengan bercak belah ketupat.</p>
</div>
</div>
<div class="group bg-white rounded-3xl shadow-lg hover:shadow-2xl hover:-translate-y-2 transition-all duration-300 overflow-hidden border border-gray-100">
<div class="relative overflow-hidden">
<img src="https://images.unsplash.com/photo-1500382017468-9049fed747ef?q=80&w=1200&auto=format&fit=crop" class="h-56 w-full object-cover group-hover:scale-110 transition-transform duration-700">
<div class="absolute top-4 right-4 bg-white/90 backdrop-blur-sm px-3 py-1 rounded-full text-xs font-bold text-yellow-600 shadow-sm">Waspada</div>
</div>
<div class="p-6">
<h3 class="text-2xl font-bold text-gray-800 mb-3 group-hover:text-yellow-600 transition-colors">Blight</h3>
<p class="text-gray-500 text-sm leading-relaxed">Hawar daun bakteri yang menyebabkan daun menguning, mengering, dan mati dari ujungnya.</p>
</div>
</div>
<div class="group bg-white rounded-3xl shadow-lg hover:shadow-2xl hover:-translate-y-2 transition-all duration-300 overflow-hidden border border-gray-100">
<div class="relative overflow-hidden">
<img src="https://images.unsplash.com/photo-1464226184884-fa280b87c399?q=80&w=1200&auto=format&fit=crop" class="h-56 w-full object-cover group-hover:scale-110 transition-transform duration-700">
<div class="absolute top-4 right-4 bg-white/90 backdrop-blur-sm px-3 py-1 rounded-full text-xs font-bold text-orange-500 shadow-sm">Virus</div>
</div>
<div class="p-6">
<h3 class="text-2xl font-bold text-gray-800 mb-3 group-hover:text-orange-500 transition-colors">Tungro</h3>
<p class="text-gray-500 text-sm leading-relaxed">Penyakit virus yang ditularkan wereng hijau, menyebabkan tanaman kerdil dan daun kuning-oranye.</p>
</div>
</div>
<div class="group bg-white rounded-3xl shadow-lg hover:shadow-2xl hover:-translate-y-2 transition-all duration-300 overflow-hidden border border-gray-100">
<div class="relative overflow-hidden">
<img src="https://images.unsplash.com/photo-1472396961693-142e6e269027?q=80&w=1200&auto=format&fit=crop" class="h-56 w-full object-cover group-hover:scale-110 transition-transform duration-700">
<div class="absolute top-4 right-4 bg-white/90 backdrop-blur-sm px-3 py-1 rounded-full text-xs font-bold text-green-600 shadow-sm">Aman</div>
</div>
<div class="p-6">
<h3 class="text-2xl font-bold text-gray-800 mb-3 group-hover:text-green-600 transition-colors">Healthy</h3>
<p class="text-gray-500 text-sm leading-relaxed">Daun padi sehat tanpa gejala penyakit. Memiliki warna hijau merata dan tekstur normal.</p>
</div>
</div>
</div>
</section>
</div>
<div id="loading" class="hidden fixed inset-0 bg-gray-900/80 backdrop-blur-sm flex items-center justify-center z-50 transition-opacity">
<div class="bg-white p-12 rounded-[2rem] shadow-2xl text-center max-w-sm w-full mx-4 border border-gray-100 transform scale-100 animate-[fadeInUp_0.3s_ease-out]">
<div class="relative w-24 h-24 mx-auto mb-8">
<div class="absolute inset-0 rounded-full border-t-4 border-green-500 animate-spin"></div>
<div class="absolute inset-2 rounded-full border-r-4 border-blue-500 animate-[spin_1.5s_linear_infinite_reverse]"></div>
<div class="absolute inset-4 rounded-full border-b-4 border-yellow-400 animate-spin"></div>
</div>
<h2 class="text-2xl font-extrabold text-gray-800 mb-2">Menganalisis...</h2>
<p class="text-gray-500 font-medium">AI sedang memproses gambar Anda.</p>
</div>
</div>
@endsection
@push('scripts')
<script>
function previewImage(event) {
const preview = document.getElementById('preview');
const placeholder = document.getElementById('upload-placeholder');
if(event.target.files.length > 0){
preview.src = URL.createObjectURL(event.target.files[0]);
preview.classList.remove('hidden');
if(placeholder) placeholder.classList.add('hidden');
}
}
const form = document.getElementById('formPrediksi');
if(form){
form.addEventListener('submit', function() {
document.getElementById('loading').classList.remove('hidden');
});
}
function toggleDarkMode() {
const body = document.getElementById('body');
if(body) {
body.classList.toggle('bg-gray-900');
body.classList.toggle('text-white');
body.classList.toggle('from-green-100');
body.classList.toggle('to-green-50');
body.classList.toggle('text-gray-800');
}
}
</script>
@endpush