CommunityBildgithub.com

pixelproof-image-forensics

Bestimmt, ob ein Bild KI-generiert, bearbeitet oder ein Duplikat ist. Drei Ebenen: Metadaten (AIGC-Standardkennung / C2PA / EXIF), Perceptual Hashing-Duplikatsprüfung, optionales Pixelmodell. Für E-Commerce-Liefernachweise, Materialquellenrückverfolgung und Massenprüfung.

Was ist pixelproof-image-forensics?

Dieses Skill bietet eine dreistufige Bildforensik zur Überprüfung von Bildern auf KI-Generierung, Bearbeitung oder Duplizität. Die erste Ebene analysiert Metadaten (AIGC-Standardkennungen nach TC260, C2PA, EXIF) millisekundenschnell. Die zweite Ebene verwendet pHash/dHash zum Duplikatsabgleich mit einer Schwelle von 10. Die dritte Ebene bietet optionale Pixelmodelle (ViT-S/384) zur Erkennung von KI-generierten Inhalten, ist jedoch auf bekannte Generatoren beschränkt. Das Skill wird über Python-Skripte (`probe.py`, `run_*.py`) gesteuert und unterstützt lokale Gewichte aus Hugging Face. Es ist ideal für E-Commerce, Materialquellen, Massenprüfungen und liefert klare Ergebnisse (AI-SIGNED, AI-LIKELY, DUPLICATE, NO-EVIDENCE) mit einer wichtigen Einschränkung: Fehlende Beweise bedeuten nicht, dass das Bild echt ist.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jan-My31/image-forensics-expert/tree/HEAD/skills/pixelproof-image-forensics

Installed? Explore more Bild skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

KI-Bildforensik

Wann verwenden

Wenn ein Benutzer fragt: „Ist dieses Bild KI-generiert / bearbeitet / wurde es schon einmal verwendet?", oder wenn eine große Menge von Bildern (Liefernachweise, Bewertungsbilder, Materialbilder) überprüft werden muss.

Ein Befehl

python3 scripts/probe.py Bildpfad...              # Nur Metadaten-Ebene
python3 scripts/probe.py --dir Verzeichnis --lib Bildbibliothek  # Mit Duplikatsprüfung
python3 scripts/probe.py --dir Verzeichnis --model <Gewichtsverzeichnis>  # Mit Pixel-Ebene, optional

Ausgabe in vier Stufen, sagen Sie NO-EVIDENCE nicht als „echtes Bild":

ErgebnisBedeutungVerwendung
AI-SIGNEDAIGC-Standardkennung oder C2PA-Zertifikat vorhandenKann direkt akzeptiert werden, ist ein Selbstnachweis des Erstellers
AI-LIKELYGenerator-Fingerabdruck oder hohe Punktzahl vom PixelmodellNur als Hinweis, manuelle Überprüfung erforderlich
DUPLICATEpHash-Distanz ≤ 10 zu einem Bild in der BibliothekKann direkt als Duplikat gewertet werden
NO-EVIDENCEKeine Ergebnisse in allen drei EbenenNicht als „echt" bezeichnen, nur „keine Beweise"

Tatsächliche Fähigkeiten der drei Ebenen (lokale Tests, nicht auf Basis von Versprechungen)

Erste Ebene: Metadaten – Am genauesten und günstigsten (Millisekunden, reines Python).

  • In China konform erstellte Bilder enthalten die TC260 AIGC-implizite Kennung: {"AIGC":{"Label":"1","ContentProducer":...,"ProduceID":...,"ReservedCode1":"...sm3...sm2..."}}. Diese befindet sich oft im eXIf-Chunk von PNGs in UserComment (0x9286), nicht in tEXt, daher übersehen Tools, die nur Textblöcke scannen, diese.
  • Aber ein erneutes Speichern entfernt sie: Beim Speichern als JPG oder PNG mit Pillow verschwinden die Felder. Diese Ebene erfasst daher nur Originalbilder und unverändert weitergeleitete Bilder, nicht bearbeitete oder Screenshots.
  • Vorhandene Kameradaten (Make/Model/DateTimeOriginal) deuten auf ein direktes Kamerabild hin; vollständig leere Felder weisen auf Social-Media-Bearbeitung oder Screenshots hin.

Zweite Ebene: Duplikatsprüfung – pHash + dHash, 20 ms pro Bild.

  • Plattformkomprimierung, Skalierung, Screenshots: Distanz 0–2, nahezu unmerklich.
  • 7,5 % Randbeschnitt: Distanz 8–24, teilweise übersehen.
  • Minimale Distanz zwischen verschiedenen Bildern: 24, daher Schwelle von 10 sicher.

Dritte Ebene: Pixelmodell – Langsam und instabil, nur bei Bedarf einschalten.

  • Community-Forensics ViT-S/384 (CVPR 2025): CPU 0,2–0,6 s pro Bild. Sehr effektiv für ältere Generatoren im Trainingsbereich (5/5 offizielle DALL·E 2-Testbilder erkannt), aber bei neuen Generatoren völlig wirkungslos (7 von 7 generierten Bildern von 2026 wurden als echt eingestuft, Konfidenz 0,0000–0,0019).
  • Daher: „Treffer sind aussagekräftig, kein Treffer sagt nichts aus."
  • Gewichte nicht im Repository, zuerst OwensLab/commfor-model-384 (HF, 87 MB) in models/commfor384/ herunterladen.

Aufgabenverteilung der drei Modelle (nicht verwechseln)

SkriptModellEinsatzbereichNicht geeignet für
scripts/run_commfor.pyViT-S/16 384 (CVPR'25, allgemeine KI-Bilderkennung)Allgemeine KI-generierte Bilder, Standard --size 384Nicht mit 224er Gewichten verwenden, Tests zeigen nur 3/5 Treffer
scripts/run_raiw.pyRAIW source-classify (10 Anbieter + unknown)Bestimmung des Generators („Von wem generiert?")Nicht als Diskriminator verwenden, Tests zeigen 17/17 Enthaltungen
scripts/run_xai.pyEfficientNetV2-B0 5-Klassen (FF++ Gesichtsersetzung)Nur GesichtsbilderProduktbilder/Liefernachweise, Tests zeigen 5/10 Fehlalarme
python3 scripts/run_commfor.py Bild.jpg --size 384 --weights /pfad/model.safetensors
python3 scripts/run_raiw.py     Bild.jpg --weights /pfad/multi-provider-source-v3.npz
python3 scripts/run_xai.py      Gesicht.jpg --weights /pfad/ff_attribution.ckpt

Alle drei Skripte unterstützen --weights für Gewichte, --out für Ausgabedateien (sonst nur Konsole). Suchreihenfolge: --weights > Umgebungsvariable > scripts/../models/<Modellname>/. Gewichte nicht im Repository, selbst herunterladen:

ModellQuelleGröße
commfor384HF OwensLab/commfor-model-38487 MB
commfor224HF OwensLab/commfor-model-22486 MB
RAIWHF wiltodelta/raiw-source-classify2,03 GB
XAI-DeepfakesRepository model/checkpoint/ff_attribution.ckpt70 MB

Für Inlandsdownload: HF_ENDPOINT=https://hf-mirror.com; große Dateien mit aria2c -x16 -s16.

Lassen Sie den Benutzer nicht eigene Download-Befehle bauen, es gibt ein fertiges Skript (Standard: hf-mirror, aria2c multithread, Überprüfung von Größe und SHA256):

python3 scripts/fetch_weights.py --list           # Liste + aktueller Status
python3 scripts/fetch_weights.py commfor384       # 87 MB, nur Pixel-Ebene ausreichend
python3 scripts/fetch_weights.py --all --jobs 16  # Alle vier, insgesamt 2,2 GB
python3 scripts/fetch_weights.py --all --check    # Nur vorhandene Dateien prüfen

Skript unterstützt Fortsetzen; durch Proxy abgeschnittene Dateien werden von Größe + SHA256 abgefangen (reale Erfahrung: GitHub-Tarball fehlte 70 MB ckpt, Fehler erst beim Entpacken). Heruntergeladene Dateien landen in models/<Modellname>/, dem Standardpfad der drei run_*.py, daher kein --weights mehr nötig.

Wenn der Download fehlschlägt, genau angeben, wo es hakt – nicht mit „theoretisch möglich" die tatsächlichen Ergebnisse ersetzen.

Wie die Ausgabe aussieht (diesem Format folgen)

Tatsächliche Ausgabe von probe.py, je ein Beispiel für drei Stufen:

samples/ai/Handyfoto_Logistikstation.png   ->   AI-SIGNED
  Grund: Datei enthält AIGC-Kennung (Label=1), Selbstnachweis des Erstellers
  Metadaten: aigc_label | Format PNG 1024x1536

samples/variants/real01__p75.jpg   ->   DUPLICATE
  Grund: pHash-Distanz zu real01.jpg = 0, Schwelle 10
  Metadaten: Kein positives Merkmal | Format JPEG 1280x853
  Duplikat: Nächstes real01.jpg Distanz 0 ≤10 als Duplikat

samples/real/real02.jpg   ->   NO-EVIDENCE
  Grund: Keine Kennung in allen drei Ebenen; bedeutet nicht „echt", andere Beweise nötig
  Metadaten: Kein positives Merkmal | Format JPEG 4500x3000

Bei der Wiedergabe an den Benutzer: Ergebnisstufe in Großbuchstaben originalgetreu angeben, nicht übersetzen (z. B. nicht „verdächtig KI"); die Grundzeile nicht umschreiben, sie ist die Entscheidungsbasis; hinter NO-EVIDENCE sofort „bedeutet nicht echt" einfügen, um Missverständnisse zu vermeiden.

Schwellenwerte zum Nachschlagen

KriteriumSchwelleBegründung
pHash-Duplikat≤10Minimale Distanz zwischen verschiedenen Bildern 24, ausreichend Spielraum
Pixel p_fake>0,6 gilt als Hinweis0,1–0,6 meist Rauschen
AIGC-KennungVorhanden = TrefferStandardfeld, keine Schwelle

Drei Grenzen (müssen dem Benutzer mitgeteilt werden)

  1. Keine Kennung ≠ echtes Bild. Ein erneutes Speichern entfernt sie; Zwischenablage, WeChat-Weiterleitung, Screenshots entfernen sie alle.
  2. Pixelmodell kann nicht allein verurteilen. Bei unbekanntem Generator = Nulltreffer, Fehlalarme (z. B. iPhone-Kartonfoto von 384er Version als 0,896 eingestuft).
  3. Für Rückverfolgbarkeit sind technische Maßnahmen nötig: Speichern des ursprünglichen Byte-Hashs beim Hochladen, Geräte-Fingerabdruck, Vergleich mit Verlaufsbildern – zuverlässiger als jedes Erkennungsmodell.

Negativbeispiele

  • image-provenance (Client-Webtool): Schöne Oberfläche, vollständige Frequenzanalyse, aber Quellcode enthält keine AIGC/TC260-Schlüsselwörter, ignoriert chinesische Kennungen; Metadaten-Parsing hängt von CDN-geladenem exifr ab, offline nur Byte-Heuristik. Ein Bild mit vollständiger AIGC-Kennung zeigte „Keine KI-Quelle gefunden".
  • XAI-Deepfakes: Gesichtsersetzungs-(FaceForensics++)-Mehrklassen-Klassifikator, erkennt nur Gesichter. Liefernachweise führen zu 5/10 Fehlalarmen als Face2Face/DeepFakes/NeuralTextures.
  • LAID: Leichte Architektur (ShuffleNet 0,34M Parameter, CPU 20 ms), aber Gewichte auf Google Drive, in China nicht herunterladbar.

Verwandte Skills