MANTAX bauen: Ein ethisches Gesichtserkennungssystem für NGOs
#Einleitung
Dies ist ein technischer Tiefeneinblick in MANTAX, ein ethisches Gesichtserkennungssystem für NGO-Anwendungsfälle. In diesem Blogpost erkunden wir die vollständige Architektur, Datenflüsse und Implementierungsdetails—alles, was ein Entwickler wissen muss, um zu verstehen, wie dieses System funktioniert.
#Systemarchitektur-Überblick
MANTAX folgt einer Drei-Schichten-Architektur mit klarer Trennung zwischen Präsentation, Geschäftslogik und maschinellem Lernen.
#Technologie-Stack
| Schicht | Technologie | Zweck | |---------|-------------|-------| | Frontend | Electron + Vanilla JS | Desktop-App mit Custom Titlebar | | Styling | SCSS → CSS | macOS Tahoe Liquid Glass Design | | Backend | Flask (Python) | REST API mit 31 Endpunkten | | ML-Laufzeit | ONNX Runtime (ArcFace) + PyTorch (FaceNet) | Dual-Modell-Embedding-Extraktion | | Gesichtserkennung | OpenCV DNN + MediaPipe | Gesichtslokalisierung + 468-Punkt-Landmarks |

#Die Daten-Pipeline
Wenn ein Benutzer ein Bild hochlädt, durchläuft es eine gut definierte Pipeline. Verfolgen wir diese Reise:
#Gesichtserkennungsmodul
Das Erkennungsmodul (src/detection/__init__.py) behandelt den ersten kritischen Schritt: Finden, wo sich Gesichter in einem Bild befinden.
#Erkennungsablauf
#Primäre Erkennungsmethode: OpenCV DNN
Das System verwendet ein vortrainiertes Caffe-Modell für Deep-Learning-basierte Gesichtserkennung:
Erforderliche Modell-Dateien:
deploy.prototxt.txt- Caffe-Architekturdefinitionres10_300x300_ssd_iter_140000.caffemodel- Vortrainierte Gewichte
#Fallback: Haar Cascade
Wenn DNN nicht geladen werden kann, fällt das System elegant auf Haar Cascade zurück:
#Gesicht-ROI-Extraktion
Sobald Gesichter erkannt wurden, extrahiert die API den Bereich von Interesse (ROI):

#Gesichtspunkt-Erkennung
Nach der Erkennung von Gesichtern extrahiert das System 468 Gesichtspunkte mit MediaPipe Face Mesh:
#Landmark-Extraktionscode
#Geometrische Merkmalsextraktion
Zu Vergleichszwecken extrahieren wir skaleninvariante geometrische Merkmale:

#Embedding-Extraktion (Dual-Modell)
Dies ist der Kern des Systems—Umwandlung von Gesichtsbildern in mathematische Embeddings, die verglichen werden können.
#ArcFace-Implementierung
ArcFace bietet überlegene Diskriminierung zwischen verschiedenen Gesichtern:
#FaceNet-Implementierung
FaceNet bietet sekundäre Signale und Visualisierungen neuronaler Aktivierungen:
#Neuronale Netzwerk-Aktivierungen
FaceNet extrahiert auch Zwischenschichten-Aktivierungen zur Visualisierung:
Extrahierte Aktivierungen: | Schicht | Ausgabeform | Zweck | |---------|-------------|-------| | conv1 | (64, 112, 112) | Erste Konvolutionen | | bn1 | (64, 112, 112) | Erste Batch-Norm | | layer1 | (64, 56, 56) | Niedrigstufige Merkmale | | layer2 | (128, 28, 28) | Mittelstufige Merkmale | | layer3 | (256, 14, 14) | Hochstufige Merkmale | | layer4 | (512, 7, 7) | Endgültige Merkmale | | embedding | (128,) | Endgültiges Embedding |

#Der Compare-Endpunkt (Vollständiger Ablauf)
Hier ist der vollständige Vergleichsablauf vom /api/compare-Endpunkt:
#Dual-Modell-Bewertung
Die Bewertung kombiniert mehrere Signale mit gelernten Gewichten:
#Konfidenzbänder
Anstelle von Binärentscheidungen gibt das System Konfidenzbänder aus:
#API-Endpunkte-Referenz
Die Flask-API expose 31 Endpunkte für alle Operationen:
| Endpunkt | Methode | Zweck |
|----------|---------|-------|
| /api/health | GET | System-Gesundheitscheck |
| /api/embedding-info | GET | Aktuelle Modellinfo |
| /api/diagnostics | GET | System-Diagnose |
| /api/detect | POST | Gesichtserkennung |
| /api/extract | POST | Embedding-Extraktion |
| /api/add-reference | POST | Referenzbild hinzufügen |
| /api/references | GET | Alle Referenzen auflisten |
| /api/references/<id> | DELETE | Referenz entfernen |
| /api/compare | POST | Embeddings vergleichen |
| /api/visualizations/<type> | GET | Visualisierung abrufen |
| /api/clear | POST | Sitzung löschen |
#Visualisierungen (14 Typen)
Das System bietet 14 verschiedene KI-Visualisierungen, um Ermittlern zu helfen zu verstehen, warum Scores berechnet wurden:
#Visualisierungsimplementierung-Beispiel

#Sitzungszustandsverwaltung
Die API verwaltet den In-Memory-Sitzungszustand:
#Persistenz
Referenzen werden zur Persistenz über Neustarts hinweg in JSON gespeichert:
#Testinfrastruktur
Das System umfasst umfassende Tests:
#Tests ausführen
#Dateistruktur
#Wichtige Designentscheidungen
#1. Dual-Modell-Architektur
Die Verwendung sowohl von ArcFace (512-dim) als auch FaceNet (128-dim) zusammen bietet bessere Diskriminierung als jedes allein. ArcFace bewältigt den primären Abgleich, während FaceNet sekundäre Signale und Aktivierungsvisualisierungen bietet.
#2. Konfidenzbänder, keine Binärentscheidungen
Das System gibt Konfidenzbänder (Sehr Hoch/Hoch/Mittel/Unzureichend) statt "Match/Kein Match" aus. Dies stellt sicher, dass menschliche Ermittler immer die endgültige Entscheidung treffen.
#3. Lokale Verarbeitung
Keine Bilder werden an externe Server gesendet. Alle Berechnungen finden auf dem Computer des Benutzers statt, was die Datenschutzbedenken der NGOs adressiert.
#4. Nicht umkehrbare Embeddings
Gesichtserkennungs-Embeddings können nicht verwendet werden, um das ursprüngliche Gesicht zu rekonstruieren—was eine zusätzliche Schutzebene bietet.
#5. Einwilligungsverfolgung
Jedes Referenzbild enthält Metadaten über Einwilligungsstatus, Quelle und Zweck—wesentlich für NGO-Dokumentationsanforderungen.
#Zusammenfassung
MANTAX ist ein vollständig funktionsfähiges ethisches Gesichtserkennungssystem, gebaut mit:
- Flask API (2.131 Zeilen) mit 31 Endpunkten
- Dual-Modell-Embedding (ArcFace 512-dim + FaceNet 128-dim)
- OpenCV DNN Gesichtserkennung mit MediaPipe-Landmarks
- Electron Desktop-App mit macOS Tahoe Liquid Glass UI
- Umfassende Tests (E2E, Grenzfälle, Frontend)
Das System ist für NGO-Anwendungsfälle konzipiert mit:
- Lokaler Verarbeitung (kein Cloud)
- Mensch-in-the-loop Verifizierung
- Einwilligungsverfolgung
- Konfidenzbändern statt Binärentscheidungen
Im nächsten Blogpost erkunden wir die JavaScript-Refactoring-Reise—wie wir eine 3.429-Zeilen monolithische app.js übernommen und sie in 7 modulare Dateien nach Best Practices aufgeteilt haben.
#Demo-Video
Hier ist eine Demo, die ein No-Match-Szenario zeigt:
Als Nächstes: Die JavaScript-Refactoring-Geschichte