Als Entwickler, der täglich mit benutzergenerierten Inhalten arbeitet, stand ich vor der Herausforderung, tausende Bilder automatisch auf unerlaubte Inhalte zu prüfen. Nach vielen Experimenten mit verschiedenen Lösungen habe ich einen effektiven Workflow entwickelt, den ich in diesem Tutorial mit Ihnen teilen möchte.

Was ist AI-Bildinhaltsmoderation?

Unter Bildinhaltsmoderation versteht man die automatische Erkennung von unangemessenen oder policy-verstoßenden Inhalten in Bildern. Dies umfasst:

Warum multimodale Modelle ideal geeignet sind

Traditionelle Bildmoderation nutzte nur Bildklassifikatoren. Multimodale Modelle wie GPT-4.1 mit Vision oder Claude 3.5 Sonnet verstehen sowohl Bildinhalte als auch Textkontext gleichzeitig. Das bedeutet:

Voraussetzungen

pip install requests pillow

Schritt 1: Grundlegende API-Verbindung herstellen

Zunächst richten wir die grundlegende Verbindung zur HolySheep API ein. Die Basis-URL ist https://api.holysheep.ai/v1.

import requests
import json
from typing import Dict, List, Optional
from enum import Enum

============================================

KONFIGURATION

============================================

HOLYSHEEP_API_KEY = "YOUR_HOLYSHEEP_API_KEY" BASE_URL = "https://api.holysheep.ai/v1" class ContentCategory(Enum): """Definiert die zu prüfenden Inhaltskategorien""" SEXUAL = "sexual_content" VIOLENCE = "violence" HATE = "hate_speech" ILLEGAL = "illegal_content" SELF_HARM = "self_harm" SPAM = "spam" class ModerationResult: def __init__(self, category: str, confidence: float, flagged: bool, reason: str): self.category = category self.confidence = confidence self.flagged = flagged self.reason = reason def __repr__(self): status = "🚫 VERSTOSS" if self.flagged else "✓ OK" return f"{status} | {self.category}: {self.confidence:.2%} - {self.reason}" def check_api_connection() -> bool: """Testet die API-Verbindung""" headers = { "Authorization": f"Bearer {HOLYSHEEP_API_KEY}", "Content-Type": "application/json" } try: response = requests.get( f"{BASE_URL}/models", headers=headers, timeout=10 ) return response.status_code == 200 except Exception as e: print(f"Verbindungsfehler: {e}") return False

Verbindung testen

if check_api_connection(): print("✓ API-Verbindung erfolgreich!") else: print("✗ Bitte API-Key überprüfen")

Schritt 2: Bildmoderation mit Vision-Modellen

Jetzt kommt der spannende Teil – die eigentliche Bildanalyse. Ich nutze GPT-4.1 Vision, das hervorragende Ergebnisse bei der Inhaltserkennung liefert.

import base64
from pathlib import Path

def encode_image_to_base64(image_path: str) -> str:
    """Konvertiert ein Bild in Base64 für die API-Übertragung"""
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode('utf-8')

def moderate_image(image_path: str, strictness: str = "balanced") -> Dict:
    """
    Analysiert ein Bild auf policy-verstoßende Inhalte.
    
    Args:
        image_path: Pfad zum Bild
        strictness: 'strict', 'balanced', 'permissive'
    """
    # Bild in Base64 konvertieren
    image_base64 = encode_image_to_base64(image_path)
    
    # System-Prompt für Moderation
    moderation_prompt = f"""Analysiere dieses Bild strikt auf folgende Verstöße:
1. SEXUAL: Nacktheit, pornografische Inhalte, sexuelle Handlungen
2. VIOLENCE: Gewalt, Blut, Waffen, Brutalität
3. HATE: Hasssymbole, diskriminierende Inhalte, NS-Symbole
4. ILLEGAL: Drogen, illegale Aktivitäten, Betrug
5. SELF_HARM: Selbstverletzung, Suizid
6. SPAM: Irreführende Inhalte, Werbebetrug

Gib JSON zurück im Format:
{{
  "flagged": true/false,
  "categories": [
    {{"name": "KATEGORIE", "confidence": 0.0-1.0, "reason": "Erklärung"}}
  ],
  "overall_confidence": 0.0-1.0,
  "recommended_action": "block/warn/allow"
}}
"""
    
    headers = {
        "Authorization": f"Bearer {HOLYSHEEP_API_KEY}",
        "Content-Type": "application/json"
    }
    
    payload = {
        "model": "gpt-4.1",  # Vision-Modell für Bildanalyse
        "messages": [
            {
                "role": "system",
                "content": moderation_prompt
            },
            {
                "role": "user",
                "content