1 poin oleh GN⁺ 4 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Ini adalah crate Rust yang mendeteksi pola swastika yang dapat muncul secara kebetulan pada kode QR, dan secara opsional menghasilkan kode QR tanpa pola tersebut
  • Merender semua 8 pola mask dalam standar QR untuk menyaring kandidat tanpa pola, lalu memilih mask dengan penalti ISO/IEC 18004 terendah
  • Dengan mengecualikan modul finder, timing, alignment, format, dan version dari pemeriksaan serta mempertimbangkan kontras sekeliling, alat ini menghindari salah mengira elemen fungsional atau bentuk yang tidak terlihat sebagai pola target
  • Detektor bawaan tidak memiliki dependensi eksternal dan melarang kode unsafe, serta mendukung berbagai pustaka QR dan representasi Vec<Vec<bool>>
  • Cakupan deteksi dibatasi pada bentuk kait silang 5×5 dan 7×7 yang sejajar sumbu, dalam kedua arah dan dua polaritas warna; bentuk 45 derajat, diagonal, dan rotasi sewenang-wenang tidak didukung

Alasan perlu menghindari pola yang muncul tidak sengaja

  • qr-swastika-avoider mendeteksi dan menghindari pola swastika yang bisa muncul secara acak pada kode QR
  • Kode QR memilih salah satu dari 8 pola mask yang saling dapat dipertukarkan berdasarkan skor keterbacaan terbaik, tetapi tidak memeriksa simbol yang dapat menimbulkan ketidaknyamanan
  • Pola yang kecil dan tipis sulit tersaring dalam proses evaluasi standar QR, sehingga dapat tersisa secara kebetulan pada kode akhir

Deteksi yang mempertimbangkan elemen fungsional dan kontras

  • Detektor bawaan tidak memiliki dependensi eksternal dan menerapkan #![forbid(unsafe_code)]
  • Melalui trait kecil QrModules yang terdiri dari dua metode, berbagai format representasi QR dapat diperiksa
  • Modul finder, timing, alignment, format, dan version dikecualikan dari target deteksi agar sudut finder tidak keliru dikenali sebagai swastika
  • Pola yang tertanam dalam modul dengan warna sama sehingga tidak benar-benar terlihat diabaikan berdasarkan kontras sekeliling, dan ambang ini dapat disesuaikan
  • Kode QR yang sudah ada dapat diperiksa dengan contains_swastika, lalu jika pola ditemukan dapat dibuat ulang atau pengguna diberi peringatan

Representasi QR dan pustaka yang didukung

  • Melalui fitur Cargo, adaptor berikut disediakan
    • qrcodegen: QrModules untuk qrcodegen::QrCode
    • qrcode: QrModules untuk qrcode::QrCode
    • fast_qr: QrModules untuk fast_qr::QRCode
  • Matriks modul mentah Vec<Vec<bool>> juga didukung tanpa adaptor terpisah, dan true berarti modul gelap

Menghasilkan kode QR tanpa pola

  • encode_safe dalam fitur generate menerima konten dan tingkat koreksi kesalahan lalu mengembalikan kode QR yang dapat dipindai tanpa pola tersebut; jika tidak dapat dibuat, fungsi ini mengembalikan error yang eksplisit
  • Dalam proses pembuatan, semua 8 mask dirender lalu hanya kandidat tanpa pola target yang dipertahankan
  • Di antara kandidat yang tersisa, mask dengan penalti ISO/IEC 18004 terendah dikembalikan agar optimisasi keterbacaan standar tetap terjaga
  • Dengan matrix() Anda dapat mengambil matriks modul, dan dengan mask() Anda dapat memeriksa mask yang dipilih

Susunan fitur Cargo

  • Fitur bawaan hanya mencakup detektor tanpa dependensi
  • Fitur qrcodegen, qrcode, dan fast_qr menambahkan adaptor untuk masing-masing pustaka
  • Fitur generate menambahkan qrcodegen sebagai dependensi dan menyediakan encode_safe

Cakupan deteksi dan lisensi

  • Di antara bentuk kait silang klasik yang sejajar sumbu, alat ini mendeteksi ukuran 5×5 dan 7×7, kedua arah, serta dua polaritas warna terang dan gelap dalam toleransi kecil
  • Bentuk 45 derajat atau diagonal, serta bentuk yang diputar pada sudut sewenang-wenang, tidak termasuk dalam cakupan deteksi
  • Didistribusikan di bawah MIT License

1 komentar

 
GN⁺ 4 jam lalu
Opini di Lobste.rs
  • Membingungkan bahwa proyek ini menghindari simbol manji religius tetapi justru tidak menghindari swastika yang digunakan Nazi. Simbol Nazi berbentuk rotasi 45 derajat, tetapi proyek ini secara eksplisit menyatakan bahwa “motif 45 derajat/diagonal dan rotasi arbitrer berada di luar cakupan”

    • Manji yang tidak diputar pun tetap akan diterima sebagai simbol Nazi. Jika tidak percaya, tempelkan manji yang tidak diputar sebagai tato sementara di tempat yang mudah terlihat lalu berjalanlah ke jalan
      Gambar yang kebetulan muncul di QR code beresolusi rendah, sehingga justru bentuk yang tidak diputar lebih mungkin dikenali jelas sebagai manji ketimbang sekadar pola piksel acak. Masuk akal untuk fokus pada hal itu
    • Saya juga memperhatikan hal itu. Saya penasaran apakah algoritme deteksinya pada dasarnya memang hanya menangani pola persegi panjang, seperti rolling checksum yang menyapu baris dan kolom
      Lalu ada pernyataan bahwa “modul finder, timing, alignment, format, dan version dikecualikan agar sudut finder tidak salah dikenali sebagai manji”, tetapi ketika seseorang melihat simbol yang mengganggu di QR code, reaksinya tidak akan berubah tergantung apakah piksel itu data atau pola timing. Sudut finder itu sendiri hanya kotak biasa; saya juga tidak paham mengapa harus dikecualikan dari analisis, dan makin ditelusuri makin terasa tidak konsisten, sampai curiga ini hasil buatan AI seadanya
  • Menyedihkan bahwa proyek seperti ini ada. Saya bahkan tidak pernah terpikir bahwa simbol yang mengganggu bisa kebetulan muncul di dalam QR code

  • Saya mencoba menghitung langsung untuk pertanyaan “seberapa sering sih saat membuat QR code sederhana tiba-tiba muncul simbol Nazi raksasa secara acak?”. QR code tidak sepenuhnya acak, tetapi itu diabaikan di sini
    Jika manji 5×5 dan 7×7 dilihat secara independen, masing-masing punya dua arah kiri-kanan, dua polaritas, serta bentuk normal dan terbalik, jadi total ada 8 pola. Total seluruh pola adalah 2^25=33 juta untuk 5×5 dan 2^49=562 triliun untuk 7×7, sehingga peluang mengandung manji masing-masing 2.38e-7 dan 1.42e-14. Di dalam QR code ada 289 area 5×5 dan 225 area 7×7, jadi total peluang setidaknya satu manji muncul dalam bentuk QR code acak adalah sekitar 0,00006, yaitu 1 dari 14.500. Ukuran 9×9 ke atas juga bisa dihitung, tetapi karena probabilitas kombinasi piksel tertentu terlalu rendah, dampaknya tidak berarti pada hasil. Sayangnya, setelah melihat source code-nya, proyek ini tampaknya dibuat dengan vibe coding, tetapi perhitungannya saya lakukan sendiri secara manual

    • Jika pola seperti itu muncul pada QR code yang akan digunakan secara mencolok, Anda bisa mewarnai beberapa piksel saja dan kodenya tetap akan berfungsi. Jika kodenya hanya akan dilihat satu orang atau hampir pasti tidak akan dipindai, tidak ada alasan untuk peduli, dan kebanyakan orang akan memahami bahwa pola seperti itu bisa muncul secara kebetulan pada sebagian besar QR code
  • Untuk proyek yang sespesifik ini, saya penasaran apakah ada latar belakang cerita atau lelucon tertentu
    Namun, melihat bagaimana AI yang cacat digunakan dalam situasi seperti perceptual hash Microsoft photoDNA yang gagal menangani kisi thumbnail CSAM yang memenuhi data latih, sampai menangguhkan akun pengguna Discord hanya dengan screenshot spreadsheet dan kisi pembuatan Minecraft, alat penghindar pola berisiko yang lebih umum justru terlihat cukup menarik

  • Daripada mengulang masalah lama dengan cara baru, kita seharusnya menyelesaikan masalah nyata. Ada terlalu banyak orang yang terlalu sensitif sehingga akan menganggap proyek seperti ini menarik

  • Meski tujuannya untuk menghindari manji dalam pola data, saya penasaran apakah menampilkan pola itu di halaman web itu sendiri bisa menjadi ilegal di Jerman

    • Jika untuk tujuan informatif, sekadar menampilkannya sendiri bukan tindakan ilegal. Misalnya, dalam dokumenter yang menggunakan rekaman arsip Perang Dunia II, swastika tidak harus disensor, meski menambahkan pemberitahuan penafian mungkin lebih aman
    • Boleh atau tidaknya pada dasarnya bergantung pada konteks: https://bundesgerichtshof.de/SharedDocs/Pressemitteilungen/…
      Menurut putusan Mahkamah Federal Jerman tersebut, swastika yang dicoret diperbolehkan, dan yang lain pun tampaknya kecil kemungkinan menimbulkan masalah karena hanya ditampilkan sebagai contoh pola yang akan difilter oleh kode
    • Saya bukan ahli hukum, tetapi jawaban singkatnya bukan ilegal, dan jawaban panjangnya bergantung pada konteks. Konteks halaman ini tampaknya tidak bermasalah
      https://en.wikipedia.org/wiki/Strafgesetzbuch_section_86a