deepfake_filter / database.py
alinurnuraliyev's picture
Upload 22 files
3dbd7d4 verified
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()