- यह एक Rust crate है जो QR कोड में संयोग से बन सकने वाले स्वस्तिक पैटर्न का पता लगाता है और वैकल्पिक रूप से ऐसे QR कोड बनाता है जिनमें यह पैटर्न न हो
- यह QR मानक के 8 mask patterns को रेंडर करके बिना पैटर्न वाले उम्मीदवार चुनता है, फिर ISO/IEC 18004 penalty सबसे कम वाले mask को चुनता है
- finder·timing·alignment·format·version modules को जाँच से बाहर रखकर और आसपास के contrast को ध्यान में रखकर यह functional elements या दिखाई न देने वाले आकारों को गलत पहचानने से बचाता है
- डिफ़ॉल्ट detector में कोई external dependency नहीं है और
unsafecode निषिद्ध है, तथा यह कई QR libraries औरVec<Vec<bool>>representation को support करता है - detection scope axis-aligned 5×5·7×7 hooked cross shapes की दोनों दिशाओं और दोनों color polarities तक सीमित है; 45-degree·diagonal shapes और arbitrary rotation समर्थित नहीं हैं
अनजाने पैटर्न से बचना क्यों ज़रूरी है
- qr-swastika-avoider QR कोड में यादृच्छिक रूप से दिखाई दे सकने वाले स्वस्तिक पैटर्न का पता लगाता है और उनसे बचाव करता है
- QR कोड आपस में बदले जा सकने वाले 8 mask patterns में से readability score सबसे अच्छा वाला चुनते हैं, लेकिन असहजता पैदा करने वाले symbols की जाँच नहीं करते
- छोटे और पतले पैटर्न QR मानक की evaluation प्रक्रिया में छँट पाना कठिन होते हैं, इसलिए वे संयोग से अंतिम कोड में रह सकते हैं
functional elements और contrast को ध्यान में रखकर detection
- डिफ़ॉल्ट detector में कोई external dependency नहीं है और
#![forbid(unsafe_code)]लागू है - दो methods वाले छोटे
QrModulestrait के ज़रिए विभिन्न QR representation formats की जाँच की जा सकती है - finder·timing·alignment·format·version modules को detection target से बाहर रखकर finder के corners को स्वस्तिक समझने की गलती से बचा जाता है
- एक ही रंग के modules में दबा हुआ, वास्तव में दिखाई न देने वाला पैटर्न आसपास के contrast के आधार पर अनदेखा किया जाता है, और यह मानदंड समायोज्य है
- मौजूदा QR कोड को
contains_swastikaसे जाँचा जा सकता है, और पैटर्न मिलने पर उसे फिर से generate किया जा सकता है या user को warning दी जा सकती है
समर्थित QR representations और libraries
- Cargo features के रूप में निम्न adapters दिए गए हैं
qrcodegen:qrcodegen::QrCodeके लिएQrModulesqrcode:qrcode::QrCodeके लिएQrModulesfast_qr:fast_qr::QRCodeके लिएQrModules
- raw module matrix
Vec<Vec<bool>>भी अलग adapter के बिना समर्थित है, औरtrueका अर्थ dark module है
पैटर्न-रहित QR कोड बनाना
generatefeature काencode_safecontent और error correction level लेकर पैटर्न-रहित, scan होने योग्य QR code लौटाता है; यदि बनाना संभव न हो तो यह स्पष्ट error लौटाता है- generation प्रक्रिया में सभी 8 masks को रेंडर किया जाता है, फिर केवल वे उम्मीदवार रखे जाते हैं जिनमें target pattern नहीं होता
- बचे हुए उम्मीदवारों में से ISO/IEC 18004 penalty सबसे कम वाला mask लौटाया जाता है ताकि मानक की readability optimization बनी रहे
- return value के
matrix()से module matrix लिया जा सकता है औरmask()से चुना गया mask देखा जा सकता है
Cargo feature configuration
- डिफ़ॉल्ट features में dependency-free detector ही शामिल है
qrcodegen,qrcode,fast_qrfeatures संबंधित libraries के लिए adapters जोड़ते हैंgeneratefeatureqrcodegenको dependency के रूप में लाता है औरencode_safeप्रदान करता है
detection scope और लाइसेंस
- पारंपरिक axis-aligned hooked cross shape में 5×5 और 7×7 आकार, दोनों दिशाएँ, और हल्के व गहरे दोनों color polarities को छोटे tolerance के भीतर detect किया जाता है
- 45-degree या diagonal patterns और arbitrary angle पर rotate किए गए आकार detection scope में शामिल नहीं हैं
- यह MIT License के तहत वितरित किया जाता है
1 टिप्पणियां
Lobste.rs पर राय
यह बात उलझाने वाली है कि यह प्रोजेक्ट धार्मिक स्वस्तिक से तो बचता है, लेकिन नाज़ियों द्वारा इस्तेमाल किए गए स्वस्तिक से नहीं बचता। नाज़ी प्रतीक 45 डिग्री घुमाया हुआ रूप है, जबकि प्रोजेक्ट साफ़ कहता है कि “45 डिग्री/तिरछे motifs और arbitrary rotations scope से बाहर हैं”
QR code में संयोग से बनने वाली image low-resolution होती है, इसलिए उलटे बिना घुमाया हुआ रूप random pixel pattern नहीं, बल्कि स्वस्तिक के रूप में ज़्यादा साफ़ पहचाने जाने की संभावना रखता है। इस पर ध्यान देना समझदारी है
साथ ही यह कहा गया है कि “finder, timing, alignment, format और version modules को exclude किया जाता है ताकि finder corners को स्वस्तिक समझने की गलती न हो”, लेकिन जब कोई व्यक्ति QR code में कोई आपत्तिजनक symbol देखता है, तो उसकी प्रतिक्रिया इस पर निर्भर नहीं करेगी कि वह pixel data है या timing pattern। finder corner तो बस square होता है; उसे analysis से exclude करने की ज़रूरत क्यों है, यह भी समझ नहीं आता। जितना गहराई में जाएँ, बात उतनी ही असंगत लगती है, इसलिए शक होता है कि यह AI से जल्दबाज़ी में generate किया गया output है
दुख की बात है कि ऐसा project मौजूद है। मैंने कभी सोचा भी नहीं था कि QR code के अंदर कोई आपत्तिजनक symbol संयोग से दिखाई दे सकता है
मैंने खुद calculate किया कि “एक साधारण QR code बनाते समय संयोग से कोई बड़ा नाज़ी symbol आखिर कितनी बार बनता होगा?” QR code पूरी तरह random नहीं होता, लेकिन यहाँ मैंने उसे ignore किया।
5×5 और 7×7 स्वस्तिक को स्वतंत्र रूप से देखें तो प्रत्येक में left/right दो दिशाएँ, दो polarities, और inverted/normal forms हैं, यानी कुल 8 patterns बनते हैं। कुल patterns 5×5 में 2^25=3.3 करोड़ और 7×7 में 2^49=562 लाख करोड़ हैं, इसलिए स्वस्तिक शामिल होने की probability क्रमशः 2.38e-7 और 1.42e-14 है। QR code के अंदर 5×5 regions 289 और 7×7 regions 225 होते हैं, इसलिए random QR-code-जैसे रूप में कम-से-कम एक स्वस्तिक निकलने की कुल probability लगभग 0.00006, यानी 14,500 में 1 है। 9×9 या उससे बड़े भी calculate किए जा सकते हैं, लेकिन किसी खास pixel combination की probability इतनी कम है कि result पर meaningful असर नहीं पड़ता। अफसोस, source देखने पर लगता है कि यह project vibe coding से बना है, लेकिन calculation मैंने खुद हाथ से की
इतना specific project है, तो इसके पीछे कोई कहानी या joke है क्या, यह जानने की उत्सुकता होती है।
हालांकि Microsoft photoDNA के perceptual hash में इतनी खामियाँ हैं कि training data में भरे CSAM thumbnail grids से ठीक से deal नहीं कर पाया और सिर्फ spreadsheets और Minecraft crafting grid screenshots की वजह से Discord user accounts suspend करवा दिए; ऐसे flawed AI के इस्तेमाल को देखते हुए, ज्यादा general-purpose dangerous-pattern avoidance tool काफी आकर्षक लगता है
अतीत की समस्या को नए तरीके से दोहराने के बजाय वास्तविक समस्याएँ हल करनी चाहिए। दुनिया में बहुत से जरूरत से ज़्यादा sensitive लोग हैं जिन्हें ऐसा project interesting लगेगा
भले ही मकसद data patterns में स्वस्तिक से बचना हो, website खुद symbol दिखाती है, इसलिए क्या यह Germany में illegal हो सकता है, यह जानने की उत्सुकता है
German Federal Court of Justice के उस decision के अनुसार, काटकर हटाया गया स्वस्तिक allowed है; और बाकी भी code द्वारा filter किए जाने वाले patterns के samples के रूप में दिखाए गए हैं, इसलिए समस्या होने की संभावना कम लगती है
https://en.wikipedia.org/wiki/Strafgesetzbuch_section_86a