Spaces:
Sleeping
Sleeping
| """ | |
| Export Utilities | |
| Fungsi-fungsi untuk export hasil counting ke CSV | |
| dan membuat DataFrame summary untuk ditampilkan di Streamlit. | |
| """ | |
| import pandas as pd | |
| from pathlib import Path | |
| from datetime import datetime | |
| def export_counts_to_csv(counts_data, output_path="outputs/counting_results.csv"): | |
| """ | |
| Export data counting ke file CSV. | |
| Args: | |
| counts_data: dict dengan format: | |
| { | |
| "total": int, | |
| "per_class": { | |
| "Car": int, | |
| "Motorcycle": int, | |
| "Bus": int, | |
| "Truck": int | |
| } | |
| } | |
| output_path: path untuk menyimpan CSV | |
| Returns: | |
| str: path file yang dibuat | |
| """ | |
| output_path = Path(output_path) | |
| output_path.parent.mkdir(parents=True, exist_ok=True) | |
| rows = [] | |
| # baris per kelas (ambil dari data, tidak hardcode) | |
| per_class = counts_data.get("per_class", {}) | |
| for cls_name, count in sorted(per_class.items()): | |
| rows.append({ | |
| "Kelas": cls_name, | |
| "Jumlah": count | |
| }) | |
| # baris total | |
| rows.append({ | |
| "Kelas": "TOTAL", | |
| "Jumlah": counts_data.get("total", 0) | |
| }) | |
| df = pd.DataFrame(rows) | |
| # tambahkan metadata | |
| timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") | |
| # save ke CSV | |
| df.to_csv(output_path, index=False) | |
| # append timestamp ke file | |
| with open(output_path, "a") as f: | |
| f.write(f"\n# Timestamp: {timestamp}\n") | |
| return str(output_path) | |
| def create_summary_dataframe(counts_data): | |
| """ | |
| Buat DataFrame summary untuk ditampilkan di UI Streamlit. | |
| Args: | |
| counts_data: dict hasil dari counter.get_counts() | |
| Returns: | |
| pandas DataFrame | |
| """ | |
| per_class = counts_data.get("per_class", {}) | |
| rows = [] | |
| for cls_name, count in sorted(per_class.items()): | |
| rows.append({ | |
| "Kelas Kendaraan": cls_name, | |
| "Jumlah Terdeteksi": count | |
| }) | |
| df = pd.DataFrame(rows) | |
| return df | |
| def export_detailed_log(frame_logs, output_path="outputs/detailed_log.csv"): | |
| """ | |
| Export log detail per-frame ke CSV. | |
| Berguna untuk analisis lebih lanjut. | |
| Args: | |
| frame_logs: list of dict, setiap dict berisi info per frame: | |
| { | |
| "frame_number": int, | |
| "num_detections": int, | |
| "num_tracked": int, | |
| "cumulative_count": int, | |
| "fps": float | |
| } | |
| output_path: path output | |
| Returns: | |
| str: path file | |
| """ | |
| output_path = Path(output_path) | |
| output_path.parent.mkdir(parents=True, exist_ok=True) | |
| df = pd.DataFrame(frame_logs) | |
| df.to_csv(output_path, index=False) | |
| return str(output_path) | |