Spaces:
Configuration error
Configuration error
| import sqlite3 | |
| import pandas as pd | |
| from config import DB_PATH | |
| def get_conn(): | |
| return sqlite3.connect(DB_PATH, check_same_thread=False) | |
| def init_db(): | |
| conn = get_conn() | |
| cur = conn.cursor() | |
| cur.execute(""" | |
| CREATE TABLE IF NOT EXISTS analysis_results ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| timestamp TEXT NOT NULL, | |
| file_name TEXT NOT NULL, | |
| file_type TEXT NOT NULL, | |
| label TEXT NOT NULL, | |
| score REAL NOT NULL, | |
| saved_to TEXT NOT NULL, | |
| source TEXT DEFAULT '' | |
| ) | |
| """) | |
| conn.commit() | |
| conn.close() | |
| def insert_result(timestamp, file_name, file_type, label, score, saved_to, source=""): | |
| conn = get_conn() | |
| cur = conn.cursor() | |
| cur.execute(""" | |
| INSERT INTO analysis_results | |
| (timestamp, file_name, file_type, label, score, saved_to, source) | |
| VALUES (?, ?, ?, ?, ?, ?, ?) | |
| """, ( | |
| str(timestamp), | |
| str(file_name), | |
| str(file_type), | |
| str(label), | |
| float(score), | |
| str(saved_to), | |
| str(source) | |
| )) | |
| conn.commit() | |
| conn.close() | |
| def read_results_df(): | |
| conn = get_conn() | |
| try: | |
| df = pd.read_sql_query(""" | |
| SELECT | |
| timestamp, | |
| file_name, | |
| file_type, | |
| label, | |
| score, | |
| saved_to, | |
| source | |
| FROM analysis_results | |
| ORDER BY id DESC | |
| """, conn) | |
| return df | |
| except Exception: | |
| return pd.DataFrame(columns=[ | |
| "timestamp", | |
| "file_name", | |
| "file_type", | |
| "label", | |
| "score", | |
| "saved_to", | |
| "source" | |
| ]) | |
| finally: | |
| conn.close() | |
| def delete_all_results(): | |
| conn = get_conn() | |
| cur = conn.cursor() | |
| cur.execute("DELETE FROM analysis_results") | |
| conn.commit() | |
| conn.close() | |
| def export_results_csv(csv_path="results_export.csv"): | |
| df = read_results_df() | |
| df.to_csv(csv_path, index=False, encoding="utf-8-sig") | |
| return csv_path | |
| def get_stats(): | |
| conn = get_conn() | |
| cur = conn.cursor() | |
| stats = { | |
| "total": 0, | |
| "fake_count": 0, | |
| "real_count": 0, | |
| "image_count": 0, | |
| "audio_count": 0, | |
| "video_count": 0, | |
| "avg_score": 0.0 | |
| } | |
| try: | |
| cur.execute("SELECT COUNT(*) FROM analysis_results") | |
| stats["total"] = cur.fetchone()[0] or 0 | |
| cur.execute(""" | |
| SELECT COUNT(*) | |
| FROM analysis_results | |
| WHERE lower(label) LIKE '%fake%' | |
| OR lower(label) LIKE '%deepfake%' | |
| OR lower(label) LIKE '%synthetic%' | |
| OR lower(label) LIKE '%suspicious%' | |
| """) | |
| stats["fake_count"] = cur.fetchone()[0] or 0 | |
| stats["real_count"] = stats["total"] - stats["fake_count"] | |
| cur.execute(""" | |
| SELECT COUNT(*) | |
| FROM analysis_results | |
| WHERE lower(file_type) = 'image' | |
| """) | |
| stats["image_count"] = cur.fetchone()[0] or 0 | |
| cur.execute(""" | |
| SELECT COUNT(*) | |
| FROM analysis_results | |
| WHERE lower(file_type) = 'audio' | |
| """) | |
| stats["audio_count"] = cur.fetchone()[0] or 0 | |
| cur.execute(""" | |
| SELECT COUNT(*) | |
| FROM analysis_results | |
| WHERE lower(file_type) = 'video' | |
| """) | |
| stats["video_count"] = cur.fetchone()[0] or 0 | |
| cur.execute(""" | |
| SELECT AVG(score) | |
| FROM analysis_results | |
| """) | |
| avg_score = cur.fetchone()[0] | |
| stats["avg_score"] = round(float(avg_score), 4) if avg_score is not None else 0.0 | |
| return stats | |
| except Exception: | |
| return stats | |
| finally: | |
| conn.close() |