File size: 6,746 Bytes
e2c35e2 7fd37ac e2c35e2 7fd37ac e2c35e2 7fd37ac e2c35e2 7fd37ac e2c35e2 7fd37ac e2c35e2 7fd37ac e2c35e2 7fd37ac e2c35e2 7fd37ac e2c35e2 7fd37ac e2c35e2 7fd37ac e2c35e2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
#!/usr/bin/env python3
"""
SecureX - Version Gradio
Détection de fraude téléphonique avec interface web
"""
import re
from datetime import datetime
import gradio as gr
class FraudDetector:
def __init__(self):
self.patterns = [
{
"name": "fake_advisor",
"keywords": ["conseiller", "banque", "urgent", "code", "confirmer"],
"weight": 0.9,
"description": "Imitation de conseiller bancaire"
},
{
"name": "fake_refund",
"keywords": ["remboursement", "argent", "erreur", "virement"],
"weight": 0.8,
"description": "Promesse de remboursement suspecte"
},
{
"name": "credential_theft",
"keywords": ["mot de passe", "identifiant", "code secret", "pin"],
"weight": 0.95,
"description": "Demande d'informations sensibles"
}
]
def analyze(self, text):
"""Analyse le texte et retourne les résultats"""
if not text.strip():
return 0.0, [], "Erreur: Veuillez entrer un texte à analyser"
text_lower = text.lower()
total_score = 0.0
detected_patterns = []
# Analyse des motifs
for pattern in self.patterns:
matches = [word for word in pattern["keywords"] if word in text_lower]
if matches:
score = (len(matches) / len(pattern["keywords"])) * pattern["weight"]
total_score += score
detected_patterns.append({
"pattern": pattern["name"],
"description": pattern["description"],
"keywords": matches,
"score": f"+{score:.2f}"
})
# Détection d'urgence
urgency_words = ["urgent", "immédiat", "vite", "maintenant"]
urgency_count = sum(1 for word in urgency_words if word in text_lower)
if urgency_count >= 2:
urgency_score = min(0.3, urgency_count * 0.1)
total_score += urgency_score
detected_patterns.append({
"pattern": "high_urgency",
"description": f"Langage urgent ({urgency_count} mots)",
"keywords": [],
"score": f"+{urgency_score:.2f}"
})
total_score = min(total_score, 1.0)
# Génération du rapport
report = self.generate_report(total_score, detected_patterns)
return total_score, detected_patterns, report
def generate_report(self, score, patterns):
"""Génère un rapport détaillé"""
report = f"# 📊 Rapport d'analyse - Score: {score:.0%}\n\n"
if score > 0.75:
report += "## 🚨 ALERTE FRAUDE ÉLEVÉE\n"
report += "**Action recommandée:**\n"
report += "- Terminez immédiatement l'appel\n"
report += "- Contactez votre banque au numéro officiel\n"
report += "- Ne donnez aucune information\n"
elif score > 0.5:
report += "## ⚠️ RISQUE MODÉRÉ\n"
report += "**Soyez vigilant:**\n"
report += "- Vérifiez l'identité de l'interlocuteur\n"
report += "- Ne confirmez pas d'informations sensibles\n"
else:
report += "## ✅ RISQUE FAIBLE\n"
report += "Aucun indicateur de fraude majeur détecté\n"
if patterns:
report += "\n## 🔍 Détections spécifiques:\n"
for p in patterns:
report += f"\n- **{p['description']}** {p['score']}\n"
if p['keywords']:
report += f" - Mots-clés: {', '.join(p['keywords'])}\n"
report += f"\n_Analyse effectuée le {datetime.now().strftime('%d/%m/%Y à %H:%M')}_"
return report
# Création de l'instance
detector = FraudDetector()
# Exemples prédéfinis
examples = [
["Bonjour je suis votre conseiller bancaire. Confirmez votre code secret URGENT pour éviter le blocage!"],
["Félicitations! Vous avez droit à un remboursement. Donnez votre numéro de carte pour le traitement."],
["Rappel: votre rendez-vous en agence est confirmé pour demain 14h."]
]
# Interface Gradio
with gr.Blocks(title="SecureX - Détection de Fraude", theme=gr.themes.Soft()) as app:
gr.Markdown("# 🛡️ SecureX - Détection de Fraude Téléphonique")
with gr.Row():
with gr.Column():
input_text = gr.Textbox(
label="Transcript de l'appel",
placeholder="Collez le contenu de l'appel ici...",
lines=7,
max_lines=15
)
with gr.Row():
analyze_btn = gr.Button("Analyser", variant="primary")
clear_btn = gr.Button("Effacer")
gr.Examples(
examples=examples,
inputs=[input_text],
label="Exemples rapides"
)
with gr.Column():
risk_score = gr.Label(
label="Score de risque",
value=0
)
risk_level = gr.Textbox(
label="Niveau de risque",
value="Non analysé",
interactive=False
)
risk_gauge = gr.Slider(
label="Niveau de risque (Jauge)",
minimum=0,
maximum=1,
value=0,
step=0.01,
interactive=False
)
report = gr.Markdown(
value="## Résultats s'afficheront ici"
)
# Fonction de mise à jour des résultats
def update_results(text):
score, patterns, report_text = detector.analyze(text)
# Mise à jour du score
if score > 0.75:
level = "Élevé"
elif score > 0.5:
level = "Modéré"
else:
level = "Faible"
return score, level, score, report_text
analyze_btn.click(
fn=update_results,
inputs=input_text,
outputs=[risk_score, risk_level, risk_gauge, report]
)
clear_btn.click(
fn=lambda: [
0,
"Non analysé",
0,
"## Résultats s'afficheront ici"
],
outputs=[risk_score, risk_level, risk_gauge, report]
)
# Lancement de l'application
if __name__ == "__main__":
app.launch(
server_name="0.0.0.0",
server_port=7860,
share=False
) |