nonamelife commited on
Commit
939142a
·
verified ·
1 Parent(s): 89f19dc

Upload 6 files

Browse files
template/about.html ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>About - Garbage Detection</title>
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
8
+ <link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;500&display=swap" rel="stylesheet">
9
+ </head>
10
+ <body>
11
+ <nav class="navbar">
12
+ <div class="nav-brand">Garbage Detection</div>
13
+ <ul class="nav-links">
14
+ <li><a href="/">Home</a></li>
15
+ <li><a href="/about" class="active">About</a></li>
16
+ <li><a href="/contact">Contact</a></li>
17
+ </ul>
18
+ </nav>
19
+
20
+ <div class="container">
21
+ <header>
22
+ <h1>About</h1>
23
+ <p class="subtitle">A cleaner future through AI.</p>
24
+ </header>
25
+
26
+ <section class="about-section">
27
+ <p>
28
+ Litter and waste management are critical challenges faced by both urban and rural areas.
29
+ By optimizing the detection process, we aim to help communities and organizations maintain cleanliness and promote sustainability.
30
+ </p>
31
+ <p>
32
+ At Garbage Detection, our goal is to harness the power of AI to foster healthier and cleaner environments.
33
+ Our AI-driven system classifies images into “Clean” or “Dirty,” making it easier for municipalities and environmental organizations to monitor and improve public spaces.
34
+ </p>
35
+ <p>
36
+ Using TensorFlow and Flask, our model analyzes images and categorizes them based on cleanliness.
37
+ With support for bulk uploads, users can efficiently process multiple images at once, making large-scale cleanliness assessments quick and seamless.
38
+ </p>
39
+ <p>
40
+ Join us in building a smarter, cleaner future—one image at a time!
41
+ </p>
42
+ </section>
43
+ </div>
44
+
45
+ <footer class="footer">
46
+ <p>© 2025 Garbage Detection</p>
47
+ </footer>
48
+ </body>
49
+ </html>
template/contact.html ADDED
@@ -0,0 +1,221 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
6
+ <title>Contact Us</title>
7
+ <link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;500&display=swap" rel="stylesheet" />
8
+ <style>
9
+ * {
10
+ margin: 0;
11
+ padding: 0;
12
+ box-sizing: border-box;
13
+ font-family: 'Roboto Mono', monospace;
14
+ }
15
+
16
+ html, body {
17
+ height: 100%;
18
+ display: flex;
19
+ flex-direction: column;
20
+ background: linear-gradient(135deg, #1C2526 0%, #252C2D 100%);
21
+ color: #E0E7E8;
22
+ }
23
+
24
+ .navbar {
25
+ background: #2E3536;
26
+ padding: 15px 30px;
27
+ display: flex;
28
+ justify-content: space-between;
29
+ align-items: center;
30
+ }
31
+
32
+ .nav-brand {
33
+ font-size: 1.5rem;
34
+ color: #26A69A;
35
+ }
36
+
37
+ .nav-links {
38
+ list-style: none;
39
+ display: flex;
40
+ gap: 20px;
41
+ }
42
+
43
+ .nav-links a {
44
+ text-decoration: none;
45
+ color: #E0E7E8;
46
+ font-weight: 500;
47
+ transition: color 0.3s ease;
48
+ }
49
+
50
+ .nav-links a:hover,
51
+ .nav-links .active {
52
+ color: #26A69A;
53
+ }
54
+
55
+ .container {
56
+ flex: 1;
57
+ max-width: 1000px;
58
+ margin: auto;
59
+ padding: 40px 20px;
60
+ text-align: center;
61
+ }
62
+
63
+ .contact-header h1 {
64
+ font-size: 2.5rem;
65
+ }
66
+
67
+ .contact-header p {
68
+ font-size: 1.2rem;
69
+ color: #A0A8A9;
70
+ margin: 10px auto 30px;
71
+ }
72
+
73
+ .team-list {
74
+ display: grid;
75
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
76
+ gap: 30px;
77
+ justify-content: center;
78
+ margin-top: 40px;
79
+ }
80
+
81
+ .team-card {
82
+ height: 260px;
83
+ position: relative;
84
+ perspective: 1000px;
85
+ }
86
+
87
+ .card-content {
88
+ position: absolute;
89
+ width: 100%;
90
+ height: 100%;
91
+ transition: transform 0.6s ease-in-out;
92
+ transform-style: preserve-3d;
93
+ }
94
+
95
+ .card-front,
96
+ .card-back {
97
+ position: absolute;
98
+ width: 100%;
99
+ height: 100%;
100
+ border-radius: 12px;
101
+ display: flex;
102
+ align-items: center;
103
+ justify-content: center;
104
+ flex-direction: column;
105
+ padding: 15px;
106
+ text-align: center;
107
+ font-weight: 600;
108
+ backface-visibility: hidden;
109
+ }
110
+
111
+ .card-front {
112
+ background: #557C8D;
113
+ color: white;
114
+ }
115
+
116
+ .card-back {
117
+ background: #2F4156;
118
+ color: white;
119
+ transform: rotateY(180deg);
120
+ }
121
+
122
+ .team-card:hover .card-content {
123
+ transform: rotateY(180deg);
124
+ }
125
+
126
+ .card-front h3 {
127
+ opacity: 1;
128
+ transition: opacity 0.3s ease-in-out;
129
+ }
130
+
131
+ .team-card:hover .card-front h3 {
132
+ opacity: 0;
133
+ }
134
+
135
+ .card-back p {
136
+ opacity: 0;
137
+ transition: opacity 0.3s ease-in-out;
138
+ }
139
+
140
+ .team-card:hover .card-back p {
141
+ opacity: 1;
142
+ }
143
+
144
+ .footer {
145
+ background: #2E3536;
146
+ padding: 15px;
147
+ text-align: center;
148
+ color: #A0A8A9;
149
+ font-size: 0.9rem;
150
+ margin-top: auto;
151
+ width: 100%;
152
+ }
153
+ </style>
154
+ </head>
155
+ <body>
156
+ <nav class="navbar">
157
+ <div class="nav-brand">Garbage Detection</div>
158
+ <ul class="nav-links">
159
+ <li><a href="/">Home</a></li>
160
+ <li><a href="/tool">Tool</a></li>
161
+ <li><a href="/about">About</a></li>
162
+ <li><a href="/contact" class="active">Contact</a></li>
163
+ </ul>
164
+ </nav>
165
+
166
+ <main class="container">
167
+ <div class="contact-header">
168
+ <h1>Meet the Team</h1>
169
+ <p>Get to know the people behind Garbage Detection</p>
170
+ </div>
171
+
172
+ <section class="team-list">
173
+ <div class="team-card">
174
+ <div class="card-content">
175
+ <div class="card-front"><h3>Sanjay Murali</h3></div>
176
+ <div class="card-back"><p>RA2312701010006</p><p>[email protected]</p></div>
177
+ </div>
178
+ </div>
179
+
180
+ <div class="team-card">
181
+ <div class="card-content">
182
+ <div class="card-front"><h3>Adithyan E</h3></div>
183
+ <div class="card-back"><p>RA2312701010004</p><p>[email protected]</p></div>
184
+ </div>
185
+ </div>
186
+
187
+ <div class="team-card">
188
+ <div class="card-content">
189
+ <div class="card-front"><h3>K Athmapriyan</h3></div>
190
+ <div class="card-back"><p>RA2312701010007</p><p>[email protected]</p></div>
191
+ </div>
192
+ </div>
193
+
194
+ <div class="team-card">
195
+ <div class="card-content">
196
+ <div class="card-front"><h3>R Supriya Rao</h3></div>
197
+ <div class="card-back"><p>RA2312701010027</p><p>[email protected]</p></div>
198
+ </div>
199
+ </div>
200
+
201
+ <div class="team-card">
202
+ <div class="card-content">
203
+ <div class="card-front"><h3>Joel Sheno G</h3></div>
204
+ <div class="card-back"><p>RA2312701010024</p><p>[email protected]</p></div>
205
+ </div>
206
+ </div>
207
+
208
+ <div class="team-card">
209
+ <div class="card-content">
210
+ <div class="card-front"><h3>Sriyaraj Kotagond</h3></div>
211
+ <div class="card-back"><p>RA2312701010026</p><p>[email protected]</p></div>
212
+ </div>
213
+ </div>
214
+ </section>
215
+ </main>
216
+
217
+ <footer class="footer">
218
+ <p>© 2025 Garbage Detection</p>
219
+ </footer>
220
+ </body>
221
+ </html>
template/home.html ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Garbage Detection</title>
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
8
+ <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500&family=Roboto+Mono:wght@400;500&display=swap" rel="stylesheet">
9
+ </head>
10
+ <body>
11
+ <nav class="navbar">
12
+ <div class="nav-brand">Garbage Detection</div>
13
+ <ul class="nav-links">
14
+ <li><a href="/" class="active">Home</a></li>
15
+ <li><a href="/tool">Tool</a></li>
16
+ <li><a href="/about">About</a></li>
17
+ <li><a href="/contact">Contact</a></li>
18
+ </ul>
19
+ </nav>
20
+
21
+ <div class="hero">
22
+ <h1>GARBAGE DETECTION</h1>
23
+ <p class="hero-subtitle">AI for a Cleaner Tomorrow</p>
24
+ <a href="/tool" class="cta-btn">Try the Tool</a>
25
+ </div>
26
+
27
+ <section class="about-section">
28
+ <h2>About the Tool</h2>
29
+ <p>Our Garbage Detection tool uses advanced AI technology to classify and analyze the cleanliness of images. Whether it's urban or rural areas, we aim to contribute to a cleaner environment with the help of machine learning.</p>
30
+ <a href="/tool" class="cta-btn">Start Using the Tool</a>
31
+ </section>
32
+
33
+ <footer class="footer">
34
+ <p>© 2025 Garbage Detection</p>
35
+ </footer>
36
+
37
+ <script>
38
+ // Optional: Add subtle animation to hero text
39
+ document.addEventListener('DOMContentLoaded', () => {
40
+ const heroTitle = document.querySelector('.hero h1');
41
+ heroTitle.style.opacity = 0;
42
+ heroTitle.style.transform = 'translateY(20px)';
43
+ setTimeout(() => {
44
+ heroTitle.style.transition = 'opacity 1s ease, transform 1s ease';
45
+ heroTitle.style.opacity = 1;
46
+ heroTitle.style.transform = 'translateY(0)';
47
+ }, 100);
48
+ });
49
+ </script>
50
+ </body>
51
+ </html>
template/index.html ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Tool - Garbage Detection</title>
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
8
+ <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500&family=Roboto+Mono:wght@400;500&display=swap" rel="stylesheet">
9
+ </head>
10
+ <body>
11
+ <nav class="navbar">
12
+ <div class="nav-brand">Garbage Detection</div>
13
+ <ul class="nav-links">
14
+ <li><a href="/">Home</a></li>
15
+ <li><a href="/tool" class="active">Tool</a></li>
16
+ <li><a href="/about">About</a></li>
17
+ <li><a href="/contact">Contact</a></li>
18
+ </ul>
19
+ </nav>
20
+
21
+ <div class="container">
22
+ <header>
23
+ <h1>Classification Tool</h1>
24
+ <p class="subtitle">Analyze cleanliness with AI.</p>
25
+ </header>
26
+
27
+ <section class="main-content">
28
+ <form id="upload-form" action="/predict" method="post" enctype="multipart/form-data">
29
+ <label for="file" class="custom-file-upload">
30
+ <div class="icon">
31
+ <svg viewBox="0 0 24 24" fill="#26A69A" xmlns="http://www.w3.org/2000/svg">
32
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M10 1C9.73478 1 9.48043 1.10536 9.29289 1.29289L3.29289 7.29289C3.10536 7.48043 3 7.73478 3 8V20C3 21.6569 4.34315 23 6 23H7C7.55228 23 8 22.5523 8 22C8 21.4477 7.55228 21 7 21H6C5.44772 21 5 20.5523 5 20V9H10C10.5523 9 11 8.55228 11 8V3H18C18.5523 3 19 3.44772 19 4V9C19 9.55228 19.4477 10 20 10C20.5523 10 21 9.55228 21 9V4C21 2.34315 19.6569 1 18 1H10ZM9 7H6.41421L9 4.41421V7ZM14 15.5C14 14.1193 15.1193 13 16.5 13C17.8807 13 19 14.1193 19 15.5V16V17H20C21.1046 17 22 17.8954 22 19C22 20.1046 21.1046 21 20 21H13C11.8954 21 11 20.1046 11 19C11 17.8954 11 17 13 17H14V16V15.5ZM16.5 11C14.142 11 12.2076 12.8136 12.0156 15.122C10.2825 15.5606 9 17.1305 9 19C9 21.2091 10.7909 23 13 23H20C22.2091 23 24 21.2091 24 19C24 17.1305 22.7175 15.5606 20.9844 15.122C20.7924 12.8136 18.858 11 16.5 11Z" fill=""></path>
33
+ </svg>
34
+ </div>
35
+ <div class="text">
36
+ <span>Upload Images</span>
37
+ </div>
38
+ <input id="file" name="file" type="file" accept="image/*" multiple>
39
+ </label>
40
+ </form>
41
+
42
+ <div class="loader" id="loader" style="display: none;">
43
+ <svg width="150" height="150" viewBox="0 0 150 150" fill="none" xmlns="http://www.w3.org/2000/svg">
44
+ <circle id="bounce" cx="75" cy="75" r="10" fill="#26A69A"/>
45
+ <circle id="bounce2" cx="75" cy="75" r="10" fill="#26A69A"/>
46
+ <g id="particles">
47
+ <circle cx="75" cy="75" r="5" fill="#A0A8A9"/>
48
+ <circle cx="65" cy="65" r="3" fill="#A0A8A9"/>
49
+ <circle cx="85" cy="85" r="4" fill="#A0A8A9"/>
50
+ </g>
51
+ <defs>
52
+ <radialGradient id="gradient" cx="0.5" cy="0.5" r="0.5">
53
+ <stop offset="0%" style="stop-color: #26A69A;" id="animatedStop"/>
54
+ <stop offset="100%" style="stop-color: #1C2526;"/>
55
+ </radialGradient>
56
+ </defs>
57
+ </svg>
58
+ </div>
59
+ </section>
60
+
61
+ {% if error %}
62
+ <p class="error">{{ error }}</p>
63
+ {% endif %}
64
+ </div>
65
+
66
+ <footer class="footer">
67
+ <p>© 2025 Garbage Detection</p>
68
+ </footer>
69
+
70
+ <script>
71
+ const fileInput = document.getElementById('file');
72
+ const form = document.getElementById('upload-form');
73
+ const loader = document.getElementById('loader');
74
+
75
+ fileInput.addEventListener('change', function() {
76
+ if (this.files && this.files.length > 0) {
77
+ loader.style.display = 'flex';
78
+ requestAnimationFrame(() => {
79
+ setTimeout(() => {
80
+ form.submit();
81
+ }, 500);
82
+ });
83
+ }
84
+ });
85
+ </script>
86
+ </body>
87
+ </html>
template/results.html ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Results - Garbage Detection</title>
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
8
+ <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500&family=Roboto+Mono:wght@400;500&display=swap" rel="stylesheet">
9
+ </head>
10
+ <body>
11
+ <nav class="navbar">
12
+ <div class="nav-brand">Garbage Detection</div>
13
+ <ul class="nav-links">
14
+ <li><a href="/">Home</a></li>
15
+ <li><a href="/tool">Tool</a></li>
16
+ <li><a href="/about">About</a></li>
17
+ <li><a href="/contact">Contact</a></li>
18
+ </ul>
19
+ </nav>
20
+
21
+ <div class="container">
22
+ <header>
23
+ <h1>Classification Results</h1>
24
+ <p class="subtitle">Your uploaded images have been analyzed.</p>
25
+ </header>
26
+
27
+ <section class="results-section">
28
+ {% if results %}
29
+ <div class="results-grid">
30
+ {% for result in results %}
31
+ <div class="result-card">
32
+ {% if result.image_url %}
33
+ <img src="{{ result.image_url }}" alt="Analyzed Image" class="result-image">
34
+ <h3 class="{{ 'dirty' if result.label == 'Dirty' else 'clean' }}">{{ result.label }}</h3>
35
+ <p>Confidence: {{ result.confidence }}</p>
36
+ {% else %}
37
+ <h3 class="error-label">{{ result.label }}</h3>
38
+ <p class="error-message">{{ result.error }}</p>
39
+ {% endif %}
40
+ </div>
41
+ {% endfor %}
42
+ </div>
43
+ {% else %}
44
+ <p>No results to display.</p>
45
+ {% endif %}
46
+ <a href="/tool" class="back-btn">Upload More</a>
47
+ </section>
48
+ </div>
49
+
50
+ <footer class="footer">
51
+ <p>© 2025 Garbage Detection</p>
52
+ </footer>
53
+ </body>
54
+ </html>
template/tool.html ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Garbage Detection - Tool</title>
7
+ <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
8
+ <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500&family=Roboto+Mono:wght@400;500&display=swap" rel="stylesheet">
9
+ </head>
10
+ <body>
11
+ <nav class="navbar">
12
+ <div class="nav-brand">Garbage Detection</div>
13
+ <ul class="nav-links">
14
+ <li><a href="/" >Home</a></li>
15
+ <li><a href="/tool" class="active">Tool</a></li>
16
+ <li><a href="/about">About</a></li>
17
+ <li><a href="/contact">Contact</a></li>
18
+ </ul>
19
+ </nav>
20
+
21
+ <div class="container">
22
+ <header>
23
+ <h1>Classification Tool</h1>
24
+ <p class="subtitle">Analyze cleanliness with AI.</p>
25
+ </header>
26
+
27
+ <section class="main-content">
28
+ <form id="upload-form" action="/predict" method="post" enctype="multipart/form-data">
29
+ <label for="file" class="custom-file-upload">
30
+ <div class="icon">
31
+ <svg viewBox="0 0 24 24" fill="#26A69A" xmlns="http://www.w3.org/2000/svg">
32
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M10 1C9.73478 1 9.48043 1.10536 9.29289 1.29289L3.29289 7.29289C3.10536 7.48043 3 7.73478 3 8V20C3 21.6569 4.34315 23 6 23H7C7.55228 23 8 22.5523 8 22C8 21.4477 7.55228 21 7 21H6C5.44772 21 5 20.5523 5 20V9H10C10.5523 9 11 8.55228 11 8V3H18C18.5523 3 19 3.44772 19 4V9C19 9.55228 19.4477 10 20 10C20.5523 10 21 9.55228 21 9V4C21 2.34315 19.6569 1 18 1H10ZM9 7H6.41421L9 4.41421V7ZM14 15.5C14 14.1193 15.1193 13 16.5 13C17.8807 13 19 14.1193 19 15.5V16V17H20C21.1046 17 22 17.8954 22 19C22 20.1046 21.1046 21 20 21H13C11.8954 21 11 20.1046 11 19C11 17.8954 11 17 13 17H14V16V15.5ZM16.5 11C14.142 11 12.2076 12.8136 12.0156 15.122C10.2825 15.5606 9 17.1305 9 19C9 21.2091 10.7909 23 13 23H20C22.2091 23 24 21.2091 24 19C24 17.1305 22.7175 15.5606 20.9844 15.122C20.7924 12.8136 18.858 11 16.5 11Z" fill=""></path>
33
+ </svg>
34
+ </div>
35
+ <div class="text">
36
+ <span>Upload Images</span>
37
+ </div>
38
+ <input id="file" name="file" type="file" accept="image/*" multiple>
39
+ </label>
40
+ </form>
41
+
42
+ <div class="loader" id="loader" style="display: none;">
43
+ <svg width="150" height="150" viewBox="0 0 150 150" fill="none" xmlns="http://www.w3.org/2000/svg">
44
+ <circle id="bounce" cx="75" cy="75" r="10" fill="#26A69A"/>
45
+ <circle id="bounce2" cx="75" cy="75" r="10" fill="#26A69A"/>
46
+ <g id="particles">
47
+ <circle cx="75" cy="75" r="5" fill="#A0A8A9"/>
48
+ <circle cx="65" cy="65" r="3" fill="#A0A8A9"/>
49
+ <circle cx="85" cy="85" r="4" fill="#A0A8A9"/>
50
+ </g>
51
+ <defs>
52
+ <radialGradient id="gradient" cx="0.5" cy="0.5" r="0.5">
53
+ <stop offset="0%" style="stop-color: #26A69A;" id="animatedStop"/>
54
+ <stop offset="100%" style="stop-color: #1C2526;"/>
55
+ </radialGradient>
56
+ </defs>
57
+ </svg>
58
+ </div>
59
+ </section>
60
+
61
+ {% if error %}
62
+ <p class="error">{{ error }}</p>
63
+ {% endif %}
64
+ </div>
65
+
66
+ <footer class="footer">
67
+ <p>© 2025 Garbage Detection</p>
68
+ </footer>
69
+
70
+ <script>
71
+ const fileInput = document.getElementById('file');
72
+ const form = document.getElementById('upload-form');
73
+ const loader = document.getElementById('loader');
74
+
75
+ fileInput.addEventListener('change', function() {
76
+ if (this.files && this.files.length > 0) {
77
+ loader.style.display = 'flex';
78
+ requestAnimationFrame(() => {
79
+ setTimeout(() => {
80
+ form.submit();
81
+ }, 500);
82
+ });
83
+ }
84
+ });
85
+ </script>
86
+ </body>
87
+ </html>