Zum Inhalt springen

Die Sicherheitsprüfung

POST https://api.kennmarq.com/v1/check

Ab dem 2. Dezember 2026 verbietet die KI-Verordnung KI-Systeme, die sexuelle Bilder von Personen erstellen, die dem Anschein nach Kinder sind, oder von einer realen Person ohne deren Einwilligung (Art. 5 Abs. 1 Buchst. ba und bb). Die Sicherheitsprüfung prüft ein Bild auf beides und blockiert es, merkt es zur Prüfung vor oder lässt es zu. Sie ist ein Risikosignal mit veröffentlichten Fehlerraten, keine Garantie: Sie entscheiden, und Sie bleiben verantwortlich.

Anfrage

Ein Schlüssel mit der Berechtigung check und multipart/form-data mit dem Bild in file (PNG, JPEG oder WebP; die Anfrage ist höchstens 4 MB groß, und ein größeres Bild bis 25 MB geht über einen Upload, angegeben in upload) sowie optional policy: ai-act (Standard) oder safe-only. Jede Prüfung zählt zwei Markierungen. Um beim Markieren zu prüfen, senden Sie stattdessen check an POST /v1/mark.

Ein Clip (MP4, hier bis 25 MB; einen größeren prüfen Sie beim Markieren) wird an 12 über ihn verteilten Einzelbildern gelesen, je zwei Markierungen: Die Antwort ist die seines schlechtesten Einzelbilds (block vor flag vor allow), mit der Stelle dieses Einzelbilds in frame (index und seconds) und der Zahl der gelesenen Einzelbilder in frames.

curl
curl https://api.kennmarq.com/v1/check \
  -H "Authorization: Bearer $KENNMARQ_API_KEY" \
  -F file=@render.png -F policy=ai-act
200 application/json
{
  "object": "safety_check",
  "checked_at": "2026-11-12T10:00:00Z",
  "checker": { "name": "Kennmarq.com", "version": "0.5.0" },
  "file": { "type": "image/png", "bytes": 1482113, "width": 1024, "height": 1024, "sha256": "…" },
  "policy": "ai-act",
  "verdict": "flag",
  "reason": "sexual_realistic_face",
  "nudity": { "label": "explicit", "score": 0.991 },
  "apparent_minor": false,
  "realistic_face": true
}
  • verdict: allow, flag oder block. Auch eine Blockierung ist ein 200: Die Prüfung hat funktioniert, und ihre Antwort ist die Blockierung.
  • reason: sexual_apparent_minor, sexual_realistic_face, explicit oder null bei allow.
  • nudity: none, suggestive oder explicit sowie der Wert des Klassifikators, von 0 bis 1.
  • apparent_minor und realistic_face: nur bei einem Bild mit Nacktheit gelesen, sonst null. Die Prüfung schätzt nie ein Alter für sich allein und gibt nie ein Alter oder eine Identität zurück.

Richtlinien

Was jede Richtlinie blockiert und zur Prüfung vormerkt
RichtlinieBlockiertZur Prüfung vorgemerkt
ai-actSexuelle oder anzügliche Inhalte mit einer dem Anschein nach minderjährigen Person (Art. 5 Abs. 1 Buchst. bb)Explizite Inhalte mit einem realistischen Gesicht: Holen Sie die Einwilligung der Person ein, bevor Sie den Inhalt veröffentlichen (Art. 5 Abs. 1 Buchst. ba)
safe-onlyDasselbe sowie alles ExpliziteNichts
unsere UntergrenzeExplizite Inhalte mit einer dem Anschein nach minderjährigen Person, bei jedem POST /v1/mark, unabhängig von dessen check. Lässt sich nicht abschaltenNichts

Wie ein Bild gelesen wird

In Schritten, jeder nur, wenn der vorige ihn erfordert, sodass ein Bild ohne Nacktheit nur einen Lesevorgang kostet. Zuerst die Nacktheit: explicit, wenn der Klassifikator sicher ist, oder ziemlich sicher und der Detektor einen entblößten Körperteil findet; suggestive ab einem Wert von 0,3. Dann, bei einem Bild mit Nacktheit: Ist es ein Foto? Bei einem Foto wird jedes Gesicht, das groß genug zum Lesen ist (32 px oder mehr), auf sein scheinbares Alter gelesen, mit strengeren Schwellen bei einem expliziten Bild als bei einem anzüglichen. Eine Zeichnung geht stattdessen an den Tagger, dessen Tags angeben, wann eine gezeichnete Figur ein Kind ist.

Die Modelle, die die Prüfung ausführt
PrüfschrittModellLizenz
NacktheitDer NSFW-Klassifikator von Falconsai (ViT-B/16), mit dem 320n-Detektor von NudeNet als zweiter Meinung bei GrenzfällenApache-2.0; MIT
Foto oder ZeichnungSigLIP von Google (base, 224 px), Zero-Shot-Abgleich mit Beschreibungen von Fotos und ZeichnungenApache-2.0
GesichterYuNet aus dem OpenCV ZooMIT
Scheinbares Alter, FotosZwei Modelle auf sechs Ausschnitten jedes Gesichts: SigLIP 2, feinabgestimmt auf Altersgruppen, und age-vit von CivitaiApache-2.0
Scheinbares Alter, Zeichnungenwd-vit-tagger-v3 von SmilingWolf (seine Tags für Kinder)Apache-2.0

Alles offene Modelle, ausgeführt auf unseren Servern in Zürich und festgelegt auf genau die Dateien, die wir getestet haben.

Fehlerraten

Anteil echter Fotos, deren Gesicht als minderjährig gelesen wurde, gemessen im Oktober 2026 mit diesen Modellen und Schwellen an den Validierungsfotos von FairFace (5.980 Gesichter):

Als minderjährig gelesene Gesichter, nach Alter
AlterExplizites BildAnzügliches Bild
0–298,5 %97 %
3–992 %85 %
10–1947 %34 %
20–295,9 %2,3 %
30 und älter0,9 %0,6 %

Erwachsene, die in expliziten Bildern als minderjährig gelesen werden, verteilen sich nicht gleichmäßig: in ihren Zwanzigern Frauen 8,0 % und Männer 3,2 %; Schwarze und südostasiatische Gesichter etwa 12,5 %, weiße Gesichter 1,7 %. FairFace ist der eigene Trainingsdatensatz eines der Modelle, daher werden echte Bilder schlechter abschneiden. Bei 78 Alltagsbildern ohne Nacktheit hat die Prüfung unter keiner der beiden Richtlinien einen Fehlalarm ausgelöst (der Robustheitsbericht). Bekannte Grenzen:

  • ein Gesicht, das sie nicht findet (abgewandt, verdeckt oder unter 32 px hoch), erhält keine Altersschätzung, sodass ein solches Foto durchgeht;
  • um die 18 ist das scheinbare Alter eine Schätzung, die in beide Richtungen danebenliegen kann: Die meisten älteren Jugendlichen gehen durch;
  • ein nahezu fotorealistisches 3D-Rendering gilt als Foto;
  • der Tagger liest Zeichnungen im Anime-Stil am besten; in anderen Stilen kann ein gezeichnetes Kind unerkannt bleiben.
Die Prüfung ist ein Risikosignal, das Ihnen hilft, die Schutzvorkehrungen nach Art. 5 einzuhalten; sie verhindert keinen Missbrauch und erkennt kein Missbrauchsmaterial. Behalten Sie Ihre eigene Prüfung bei, für vorgemerkte Bilder und für das, was jeder automatische Filter übersieht.

Datenschutz

Das Bild wird im Arbeitsspeicher gelesen und nie aufbewahrt: keine Kopie, kein Wert, kein Hash. Die Antwort geht nur an Sie, nie in die Markierungen einer Datei.

Fehler

Fehler von POST /v1/check
StatusCodeWann
400invalid_requestKeine Datei, ein doppelt gesendetes Feld, eine andere Richtlinie als ai-act oder safe-only oder ein Bild, das sich nicht lesen lässt.
400unknown_fieldEin anderes Feld als file (oder upload) und policy.
400option_not_availableurl, categorize oder describe: noch nicht verfügbar.
401missing_api_key, invalid_api_key, api_key_revokedSiehe Authentifizierung.
402quota_exceededIn diesem Monat sind weniger als zwei Markierungen übrig (bei einem Clip weniger als 24).
403insufficient_scope, ip_not_allowedDem Schlüssel fehlt die Berechtigung check, oder die Adresse steht nicht auf der Allowlist.
404upload_not_foundDer angegebene Upload ist keiner, den dieser Schlüssel verwenden kann: unbekannt, schon verwendet, abgelaufen oder der eines anderen Schlüssels.
413payload_too_largeDie Anfrage ist größer als 4 MB (senden Sie größere Dateien über einen Upload), oder ein Clip ist größer als 25 MB oder überschreitet unsere Grenzen.
415unsupported_media_typeKein Bild im Format PNG, JPEG oder WebP und kein MP4-Clip, oder nicht als multipart/form-data gesendet.
429rate_limitedZu viele Aufrufe in dieser Minute; versuchen Sie es nach Retry-After Sekunden erneut.
503marker_unavailable, storage_unavailableDie Prüfung (oder die Uploads) kann gerade nicht laufen. Sie wird nie übersprungen: Es wird nichts berechnet; versuchen Sie es erneut.

Fehler-Bodys folgen dem gemeinsamen Format.