Spaces:
Sleeping
Sleeping
Update app.py (#3)
Browse files- Update app.py (9448e60018852a3f118c012304509e40cae0259e)
Co-authored-by: Takamine Takagi <[email protected]>
app.py
CHANGED
@@ -149,45 +149,17 @@ def process_video_and_analyze(video_path, selected_model_name, progress=gr.Progr
|
|
149 |
|
150 |
# Prediksi
|
151 |
results = model.predict(frame_resized)
|
152 |
-
|
153 |
-
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
try:
|
164 |
-
annotated_frame = render_result(model=model, image=frame_resized, result=results[0])
|
165 |
-
annotated_frame = np.array(annotated_frame) # Konversi PIL ke NumPy
|
166 |
-
annotated_frame = cv2.cvtColor(annotated_frame, cv2.COLOR_RGB2BGR) # Konversi RGB ke BGR
|
167 |
-
except Exception as e:
|
168 |
-
logger.warning(f"Gagal merender frame dengan render_result: {e}. Menggunakan frame asli.")
|
169 |
-
annotated_frame = frame_resized
|
170 |
-
|
171 |
-
# Hitung deteksi dengan pengecekan tipe data
|
172 |
-
try:
|
173 |
-
detection_count += len(results[0].boxes)
|
174 |
-
logger.debug(f"Model names: {model.names}")
|
175 |
-
logger.debug(f"Boxes: {results[0].boxes}")
|
176 |
-
for box in results[0].boxes:
|
177 |
-
try:
|
178 |
-
class_id = int(box.cls.item()) if hasattr(box.cls, 'item') else int(box.cls)
|
179 |
-
if class_id < len(model.names):
|
180 |
-
class_name = str(model.names[class_id]).lower()
|
181 |
-
if class_name in ['hardhat', 'helmet']: # Sesuaikan dengan kelas YOLOv5m
|
182 |
-
helm_detected_count += 1
|
183 |
-
else:
|
184 |
-
logger.warning(f"Class ID {class_id} tidak valid untuk model {selected_model_name}")
|
185 |
-
except Exception as e:
|
186 |
-
logger.warning(f"Error saat memproses box.cls: {e}")
|
187 |
-
continue
|
188 |
-
except Exception as e:
|
189 |
-
logger.error(f"Error saat menghitung deteksi: {e}")
|
190 |
-
continue
|
191 |
|
192 |
out.write(annotated_frame)
|
193 |
|
@@ -213,7 +185,7 @@ def process_video_and_analyze(video_path, selected_model_name, progress=gr.Progr
|
|
213 |
- **Jumlah Deteksi Helm:** {helm_detected_count} objek
|
214 |
**Catatan:**
|
215 |
- **Model Spesialis (YOLOv8m):** Fokus pada helm, akurasi tinggi untuk 'Hardhat'/'Helmet'.
|
216 |
-
- **Model Generalis (YOLOv5m):** Deteksi berbagai objek,
|
217 |
"""
|
218 |
|
219 |
return temp_output_path, f"Status: Video berhasil diproses! ({processing_time:.2f} detik)", analysis_text
|
|
|
149 |
|
150 |
# Prediksi
|
151 |
results = model.predict(frame_resized)
|
152 |
+
annotated_frame = render_result(model=model, image=frame_resized, result=results[0])
|
153 |
+
annotated_frame = np.array(annotated_frame) # Konversi PIL ke NumPy
|
154 |
+
annotated_frame = cv2.cvtColor(annotated_frame, cv2.COLOR_RGB2BGR) # Konversi RGB ke BGR
|
155 |
+
|
156 |
+
# Hitung deteksi
|
157 |
+
detection_count += len(results[0].boxes)
|
158 |
+
for box in results[0].boxes:
|
159 |
+
class_id = int(box.cls)
|
160 |
+
class_name = model.names[class_id].lower()
|
161 |
+
if class_name in ['hardhat', 'helmet']:
|
162 |
+
helm_detected_count += 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
163 |
|
164 |
out.write(annotated_frame)
|
165 |
|
|
|
185 |
- **Jumlah Deteksi Helm:** {helm_detected_count} objek
|
186 |
**Catatan:**
|
187 |
- **Model Spesialis (YOLOv8m):** Fokus pada helm, akurasi tinggi untuk 'Hardhat'/'Helmet'.
|
188 |
+
- **Model Generalis (YOLOv5m):** Deteksi berbagai objek, akurasi helm mungkin lebih rendah.
|
189 |
"""
|
190 |
|
191 |
return temp_output_path, f"Status: Video berhasil diproses! ({processing_time:.2f} detik)", analysis_text
|