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.

Loading diagram...

#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 |

MANTAX Interface


#Die Daten-Pipeline

Wenn ein Benutzer ein Bild hochlädt, durchläuft es eine gut definierte Pipeline. Verfolgen wir diese Reise:

Loading diagram...

#Gesichtserkennungsmodul

Das Erkennungsmodul (src/detection/__init__.py) behandelt den ersten kritischen Schritt: Finden, wo sich Gesichter in einem Bild befinden.

#Erkennungsablauf

Loading diagram...

#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-Architekturdefinition
  • res10_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):

Gesichtserkennung Visualisierung


#Gesichtspunkt-Erkennung

Nach der Erkennung von Gesichtern extrahiert das System 468 Gesichtspunkte mit MediaPipe Face Mesh:

Loading diagram...

#Landmark-Extraktionscode

#Geometrische Merkmalsextraktion

Zu Vergleichszwecken extrahieren wir skaleninvariante geometrische Merkmale:

Landmark-Erkennung


#Embedding-Extraktion (Dual-Modell)

Dies ist der Kern des Systems—Umwandlung von Gesichtsbildern in mathematische Embeddings, die verglichen werden können.

Loading diagram...

#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 |

ArcFace Embedding


#Der Compare-Endpunkt (Vollständiger Ablauf)

Hier ist der vollständige Vergleichsablauf vom /api/compare-Endpunkt:

Loading diagram...

#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:

Loading diagram...

| 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:

Loading diagram...

#Visualisierungsimplementierung-Beispiel

Neural Activationen


#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:

Loading diagram...

#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

Created:
4/10/2026
Last Updated:
4/10/2026