KI-Bildkennzeichnung 2/6: Async C2PA-Upload-Scan (Subscriber + Messenger-Handler) #5
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Teil 2 von 6 der Serie "KI-Bildkennzeichnung" (Art. 50 Abs. 4 KI-VO). Baut auf #4 auf (braucht
FIELD_MEDIA_AI_STATUS).Ziel
Beim Medien-Upload asynchron prüfen, ob die Datei ein C2PA/Content-Credentials-Manifest mit
digitalSourceType-Assertion enthält, und bei Treffer automatischai_statussetzen — ohne den Upload-Vorgang zu blockieren.Komponenten
src/Subscriber/MediaUploadSubscriber.phpaufShopware\Core\Content\Media\Event\MediaUploadedEvent(Event-Namemedia.uploaded, wird sowohl vom Admin-Upload-Controller als auch vom API-Upload-Service ausgelöst — deckt beide Upload-Wege ab). Tut nichts Blockierendes — dispatcht nur eine Symfony-Messenger-Message mit dermediaIdund kehrt sofort zurück.ScanMediaForAiContentMessage/ScanMediaForAiContentHandler(#[AsMessageHandler]). Lädt dieMediaEntity, prüft die Datei auf ein eingebettetes C2PA-Manifest (digitalSourceType, z. B.trainedAlgorithmicMedia,compositeWithTrainedAlgorithmicMedia). Setzt bei TrefferFIELD_MEDIA_AI_STATUS = trueüber dasmedia.repository.falsezurück, damit eine manuellenot_ai_confirmed-Korrektur durch den Admin (ai_type, siehe #4) nicht vom nächsten Scan überschrieben wird.Wichtiger Fund: C2PA-Parsing in PHP
Es gibt keine etablierte PHP-native C2PA-Bibliothek (offiziell unterstützt sind nur Rust/JS/Python-SDKs). Empfohlener Ansatz: der Handler ruft das offizielle
c2patool-Binary (Content Authenticity Initiative) als Subprozess auf (c2patool --detailed <pfad>→ JSON) und parst dessen Ausgabe.→ Das Binary muss im Worker-Container verfügbar sein — siehe Infrastruktur-Issue "KI-Bildkennzeichnung 6/6" (separates Repo
Docker-Stacks/projekt-sw6).Infrastruktur
Kein neuer Worker-Service nötig —
projekt-sw6/docker-compose.ymlhat bereits einen laufendenworker-Service (php bin/console messenger:consume async low_priority). Die neue Message wird auf den bestehendenasync- oderlow_priority-Transport geroutet.Akzeptanzkriterien
ai_statuswird nach Worker-Durchlauf automatischtrueai_statusbleibt unverändertnot_ai_confirmedkorrigierte Bilder werden vom Scan nicht wieder überschrieben