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:
5/21/2026