1 Punkte von GN⁺ 4 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Rust-Crate, das Swastika-Muster erkennt, die zufällig in QR-Codes entstehen können, und optional QR-Codes ohne solche Muster erzeugt
  • Rendert alle 8 Maskenmuster des QR-Standards, filtert Kandidaten ohne solche Muster heraus und wählt dann die Maske mit der niedrigsten ISO/IEC-18004-Strafe
  • Schließt Finder-, Timing-, Alignment-, Format- und Versionsmodule von der Prüfung aus und berücksichtigt den Umgebungskontrast, damit Funktionselemente oder unsichtbare Formen nicht fälschlich erkannt werden
  • Der Standard-Detektor ist ohne externe Abhängigkeiten aufgebaut, verbietet unsafe-Code und unterstützt mehrere QR-Bibliotheken sowie die Darstellung als Vec<Vec<bool>>
  • Der Erkennungsbereich ist auf achsenbündige 5×5- und 7×7-Hakenkreuzformen in beiden Richtungen und mit beiden Farbpolaritäten beschränkt; 45°-, diagonale und beliebig gedrehte Formen werden nicht unterstützt

Warum versehentliche Muster vermieden werden sollten

  • qr-swastika-avoider erkennt und vermeidet Swastika-Muster, die zufällig in QR-Codes erscheinen können
  • QR-Codes wählen normalerweise aus 8 austauschbaren Maskenmustern das mit der besten Lesbarkeitsbewertung aus, prüfen aber nicht auf Symbole, die Anstoß erregen könnten
  • Kleine und schmale Muster lassen sich im Bewertungsprozess des QR-Standards nur schwer herausfiltern und können deshalb zufällig im endgültigen Code verbleiben

Erkennung unter Berücksichtigung von Funktionselementen und Kontrast

  • Der Standard-Detektor kommt ohne externe Abhängigkeiten aus und verwendet #![forbid(unsafe_code)]
  • Über ein kleines QrModules-Trait mit zwei Methoden lassen sich verschiedene QR-Darstellungsformate prüfen
  • Finder-, Timing-, Alignment-, Format- und Versionsmodule werden von der Erkennung ausgeschlossen, damit z. B. Finder-Ecken nicht fälschlich als Swastika erkannt werden
  • Muster, die im gleichfarbigen Modulbereich eingebettet und tatsächlich nicht sichtbar sind, werden anhand des Umgebungskontrasts ignoriert; dieser Schwellenwert ist anpassbar
  • Bestehende QR-Codes lassen sich mit contains_swastika prüfen; wird ein Muster gefunden, kann der Code neu erzeugt oder der Nutzer gewarnt werden

Unterstützte QR-Darstellungen und Bibliotheken

  • Per Cargo-Feature werden folgende Adapter bereitgestellt
    • qrcodegen: qrcodegen::QrCode-QrModules
    • qrcode: qrcode::QrCode-QrModules
    • fast_qr: fast_qr::QRCode-QrModules
  • Die rohe Modulmatrix Vec<Vec<bool>> wird ebenfalls ohne separaten Adapter unterstützt; true steht für ein dunkles Modul

Erzeugung musterfreier QR-Codes

  • encode_safe aus dem generate-Feature nimmt Inhalt und Fehlerkorrekturstufe entgegen und gibt einen scanbaren QR-Code ohne solche Muster zurück; ist das nicht möglich, wird ein expliziter Fehler zurückgegeben
  • Während der Erzeugung werden alle 8 Masken gerendert, danach bleiben nur Kandidaten ohne die erkannten Muster übrig
  • Unter den verbleibenden Kandidaten wird die Maske mit der niedrigsten ISO/IEC-18004-Strafe zurückgegeben, sodass die Lesbarkeitsoptimierung des Standards erhalten bleibt
  • Über matrix() lässt sich die Modulmatrix abrufen und mit mask() die gewählte Maske prüfen

Cargo-Feature-Konfiguration

  • Die Standard-Features enthalten nur den abhängigkeitsfreien Detektor
  • Die Features qrcodegen, qrcode und fast_qr fügen Adapter für die jeweiligen Bibliotheken hinzu
  • Das Feature generate bringt qrcodegen als Abhängigkeit mit und stellt encode_safe bereit

Erkennungsbereich und Lizenz

  • Erkannt werden klassische achsenbündige Hakenkreuzformen in 5×5 und 7×7, in beiden Richtungen und mit heller wie dunkler Farbpolarität, innerhalb einer kleinen Toleranz
  • 45°- oder diagonale Muster sowie beliebig gedrehte Formen fallen nicht in den Erkennungsbereich
  • Veröffentlicht unter der MIT License

1 Kommentare

 
GN⁺ 4 시간 전
Meinungen auf Lobste.rs
  • Verwirrend ist, dass dieses Projekt zwar religiöse Swastika-Symbole vermeidet, aber ausgerechnet nicht das von den Nazis verwendete Hakenkreuz. Das Nazi-Symbol ist um 45 Grad gedreht, doch das Projekt stellt ausdrücklich klar, dass „45-Grad-/diagonale Motive und beliebige Rotationen außerhalb des Umfangs“ liegen.

    • Auch ein nicht gedrehtes Hakenkreuz wird genauso als Nazi-Symbol wahrgenommen. Wer das nicht glaubt, kann sich ein nicht gedrehtes Hakenkreuz als temporäres Tattoo gut sichtbar aufkleben und damit auf die Straße gehen.
      Zufällig entstehende Bilder in QR-Codes haben eine niedrige Auflösung; dadurch ist es eher wahrscheinlich, dass gerade die nicht gedrehte Form klar als Hakenkreuz erkannt wird und nicht bloß als zufälliges Pixelmuster. Sich darauf zu konzentrieren, ist sinnvoll.
    • Das ist mir auch aufgefallen. Ich frage mich, ob der Erkennungsalgorithmus im Kern so aufgebaut ist, dass er nur rechteckige Muster verarbeitet, etwa wie eine Rolling Checksum, die Zeilen und Spalten abtastet.
      Außerdem heißt es, „Finder-, Timing-, Ausrichtungs-, Format- und Versionsmodule werden ausgeschlossen, damit Finder-Ecken nicht fälschlich als Hakenkreuze erkannt werden“. Wenn jemand in einem QR-Code ein anstößiges Symbol sieht, wird sich die Reaktion aber nicht danach unterscheiden, ob die Pixel Daten oder ein Timing-Muster sind. Finder-Ecken sind einfach Quadrate; ich sehe auch keinen Grund, warum man sie unbedingt aus der Analyse ausschließen müsste. Je tiefer man sich damit befasst, desto weniger passt es zusammen, sodass ich vermute, dass es sich um ein von KI grob generiertes Ergebnis handelt.
  • Es macht mich traurig, dass es so ein Projekt überhaupt gibt. Ich hatte nicht einmal daran gedacht, dass in einem QR-Code zufällig ein anstößiges Symbol auftauchen könnte.

  • Ich habe selbst nachgerechnet, „wie oft entsteht beim Erstellen eines einfachen QR-Codes zufällig ein riesiges Nazi-Symbol?“ QR-Codes sind nicht völlig zufällig, aber das ignoriere ich hier.
    Betrachtet man 5×5- und 7×7-Hakenkreuze unabhängig, gibt es jeweils zwei Links-rechts-Richtungen, zwei Polaritäten sowie gespiegelte und normale Formen, also insgesamt 8 Muster. Die Gesamtzahl der Muster beträgt bei 5×5 2^25 = 33 Millionen und bei 7×7 2^49 = 562 Billionen; damit liegt die Wahrscheinlichkeit, dass ein Hakenkreuz enthalten ist, bei 2,38e-7 bzw. 1,42e-14. In einem QR-Code gibt es 289 Bereiche mit 5×5 und 225 Bereiche mit 7×7, daher liegt die Gesamtwahrscheinlichkeit, dass in einer zufälligen QR-Code-Form mindestens ein Hakenkreuz auftaucht, bei etwa 0,00006, also 1 von 14.500. 9×9 und größer könnte man ebenfalls berechnen, aber die Wahrscheinlichkeit einer bestimmten Pixelkombination ist so niedrig, dass sie das Ergebnis nicht sinnvoll beeinflusst. Leider sieht es im Source so aus, als sei dieses Projekt per Vibe Coding entstanden, aber die Berechnung habe ich selbst von Hand gemacht.

    • Wenn so ein Muster in einem QR-Code auftaucht, der gut sichtbar verwendet werden soll, kann man einfach einige Pixel übermalen; der Code funktioniert weiterhin. Wenn der Code nur von einer Person gesehen wird oder praktisch nie gescannt werden dürfte, gibt es keinen Grund, sich darum zu kümmern, und die meisten werden verstehen, dass solche Muster in QR-Codes zufällig entstehen können.
  • Bei einem so speziellen Projekt frage ich mich, ob es dazu eine Hintergrundgeschichte oder einen Witz gibt.
    Andererseits: Wenn man sieht, dass fehleranfällige KI eingesetzt wird – etwa der Perceptual Hash von Microsoft photoDNA, der mit Gittern aus CSAM-Thumbnails in Trainingsdaten schlecht zurechtkommt und dadurch Discord-Nutzerkonten allein wegen Screenshots von Tabellen und Minecraft-Crafting-Gittern sperrt –, wirkt ein allgemeineres Tool zur Vermeidung riskanter Muster durchaus attraktiv.

  • Man sollte reale Probleme lösen, statt Probleme der Vergangenheit auf neue Weise zu wiederholen. Es gibt zu viele überempfindliche Menschen auf der Welt, die so ein Projekt interessant finden würden.

  • Selbst wenn das Ziel ist, Hakenkreuze in Datenmustern zu vermeiden: Da die Webseite das Symbol selbst anzeigt, frage ich mich, ob das in Deutschland illegal sein könnte.

    • Wenn es der Information dient, ist das bloße Anzeigen an sich nicht illegal. In einer Dokumentation mit historischem Filmmaterial aus dem Zweiten Weltkrieg müsste man Hakenkreuze zum Beispiel nicht zensieren, aber ein Disclaimer könnte sicherer sein.
    • Ob es verboten ist, hängt grundsätzlich vom Kontext ab: https://bundesgerichtshof.de/SharedDocs/Pressemitteilungen/…
      Nach diesem Urteil des Bundesgerichtshofs sind durchgestrichene Hakenkreuze zulässig; und da die übrigen offenbar als Beispiele für Muster gezeigt werden, die der Code herausfiltern soll, scheint es eher unwahrscheinlich, dass es Probleme gibt.
    • Ich bin kein Jurist, aber kurz gesagt: Es ist nicht illegal; ausführlicher gesagt: Es kommt auf den Kontext an. Der Kontext dieser Seite wirkt unproblematisch.
      https://en.wikipedia.org/wiki/Strafgesetzbuch_section_86a