# Protestswap

## Motivation

Fotos auf social media zu verbreiten ist für politische Gruppen ein zweischneidiges Schwert.
Einerseits möchte mensch die Identitäten der aktiven schützen, weswegen es gängig ist, die Gesichter zu verpixeln. 
Andererseits kommt das Verpixeln der Gesichter bei der bürgerlich geprägten Öffentlichkeit nicht sehr gut an.
Es macht den Eindruck, als wären nur Verbrechys und Tankies an der Organisation beteiligt.

## Lösungsansatz

Snapchat kann seit der Mitte der 2010er Jahre live Gesichter lokal auf dem Handy swappen. 
Mit den heute verfügbaren CV-tools und Machine-learning resourcen, sollte es möglich sein, Gesichter auf Fotos authentisch genug auszutauschen, um gleichzeitig die Identitäten von Aktivistys zu schützen und die Optik des zu teilenden Bildes nicht kaputt zu machen - und zwar ohne auf die turbokapitalistischen Unionbuster aus Silicon Valley, Redmond und Südafrika zurückzugreifen (OpenAI, Grok, Microsoft, usw.).

Im Idealfall werden die Gesichter von echten Personen mit KI-generierten menschlichen Gesichtern ausgetauscht, um keine Persönlichkeitsrechte von celebrities zu verletzen und sich damit rechtlich angreifbar zu machen. Zum Beispiel aus einem [Random-Face-Generator](https://this-person-does-not-exist.com/de).

## Requirements

- Faceswapping von allen Gesichtern auf einem Foto
- Lokal ausführbar auf einem PC

### Nice-To-Have
- *Prio A*: Einfache GUI vom Handy aus
- *Prio B*: Angeben von Bereichen, wo Gesichter nicht geswappt werden (z.B. um nicht Emma Goldman auf Plakaten zu faceswappen)
- *Prio C*: Lokal ausführbar auf einem Handy

## Technik

Disclaimer: Ich bin weder sehr bewandert in Machine-learning, noch darin eine fertige App zu entwickeln. Ich mache hauptsächlich devops und Linux-kram. 

### Backend

Als Backend wird [`insightface`](https://github.com/deepinsight/insightface) genutzt. Ich habe online ein älteres Repo gefunden, das die Funktionalität hat und das umgeschrieben.

Das Modell ist von Huggingface zu haben

## Demo

### Input
[![Input](./resources/five_faces.jpeg)]

### Target-Gesichter

[![Target](./resources/three_faces_template.png)]

### Ergebnis

[![Result]](./result.png)

