# डॉक्यूमेंट स्कैनर — कागज़ की तस्वीर, सीधी की हुई

कागज़ की तस्वीर लीजिए। वापस वह मिलता है जो स्कैन जैसा दिखता है।

> फ़ोन से लिए गए कागज़ के फ़ोटो को सीधी और एक जैसी रोशनी वाली PDF में बदलिए। कोने खुद ढूँढ़ लिए जाते हैं, तिरछापन हटा दिया जाता है, और छाया भाग देकर निकाल दी जाती है। सब कुछ आपके ब्राउज़र में ही चलता है और कुछ भी अपलोड नहीं होता।

यह पेज एक इंटरैक्टिव टूल है जो पूरी तरह आपके ब्राउज़र में चलता है, https://abox.tools/hi/document-scanner/ पर — आप इसे जो भी देते हैं, वह कहीं अपलोड नहीं होता। आगे वह सब कुछ है जो यह पेज इस टूल के बारे में शब्दों में कहता है; इसे इस्तेमाल करने के लिए यह पता खोलें।

## यह टूल डॉक्यूमेंट **कभी अपलोड नहीं करता**। यहाँ कोई सर्वर है ही नहीं।

तस्वीर को डीकोड करना, सीधा करना, साफ़ करना और PDF में लिखना, यह सब आपका अपना ब्राउज़र करता है, सिर्फ़ गणित और उन कोडेक से जो उसमें पहले से हैं। इस टूल में नेटवर्क का कोई काम है ही नहीं, न कुछ मँगाने का और न कुछ भेजने का। यहाँ यह बात इसलिए मायने रखती है कि लोग किन कागज़ों की तस्वीर लेते हैं। पासपोर्ट, सैलरी स्लिप, किराए का अनुबंध, या वह फ़ॉर्म जिसे किसी दफ़्तर ने ‘स्कैन करके भेजने’ को कहा है।

- ✗ कोई अपलोड नहीं
- ✗ कोई अकाउंट नहीं
- ✗ कोई वॉटरमार्क नहीं
- ✓ ऑफ़लाइन चलता है
- ✓ ओपन सोर्स

## फ़ोन के कैमरे से डॉक्यूमेंट कैसे स्कैन करें

1. **कागज़ की तस्वीर लीजिए।** ऊपर से, ताकि पूरा कागज़ फ़्रेम में आ जाए और चारों कोने दिखें या लगभग दिखें। न इसे बिलकुल सामने से होना ज़रूरी है, न रोशनी का एक जैसा होना। तिरछापन और छाया तो वही हैं जिनके लिए यह टूल बना है। जो ज़रूरी है वह है फ़्रेम भरना, क्योंकि कमरे के उस पार से ली गई तस्वीर में लौटाने लायक बारीकी बचती ही नहीं।
2. **चारों कोने जाँच लीजिए।** तस्वीर पढ़ते ही वे आपके लिए ढूँढ़ लिए जाते हैं, और जब भरोसा न हो तो पेज बता देता है। कागज़ के ही रंग की मेज़ पर रखे कागज़ का किनारा वाकई मुश्किल से दिखता है। तस्वीर पर कहीं भी दबाइए और सबसे पास वाला कोना आपकी उँगली के पास आ जाएगा, या `Tab` से किसी एक तक पहुँचकर तीर की कुंजियों से उसे सरकाइए।
3. **तय कीजिए कि रोशनी का क्या करना है।** ‘रंग, बराबर किया हुआ’ कागज़ की चमक को पूरे पन्ने पर नापकर भाग देता है, जिससे छाया चली जाती है और मुहर या दस्तखत अपना रंग बनाए रखते हैं। ‘काला-सफ़ेद’ इससे आगे जाता है और वही स्कैन को इतना छोटा बनाता है कि ईमेल से भेजा जा सके। स्क्रीन पर जो दिख रहा है वही असली नतीजा है, उसी कोड का बनाया हुआ जो फ़ाइल लिखता है।
4. **बाकी पन्ने भी जोड़िए।** आप जो भी तस्वीर जोड़ते हैं वह उसी डॉक्यूमेंट का अगला पन्ना बन जाती है, उसी क्रम में जिसमें वे सूची में हैं, और हर तस्वीर अपने कोने खुद रखती है। पट्टी में किसी पन्ने पर लगे तीर उसे आगे या पीछे कर देते हैं।
5. **PDF सेव कीजिए, और भेजने से पहले खोलकर देखिए।** डॉक्यूमेंट यहीं बनता है, इसी पेज की मेमोरी में। उसे बनाने के लिए कुछ अपलोड नहीं हुआ, और उसके बारे में कहीं कुछ बताया नहीं गया।

## विस्तार से

[फ़ोन से डॉक्यूमेंट कैसे स्कैन करें](https://abox.tools/hi/guides/scan-a-document-with-your-phone/): किसी पन्ने की तस्वीर और उसी पन्ने के स्कैन में फ़र्क क्या है: तिरछापन, असमान रोशनी और फ़ाइल का साइज़। तस्वीर कैसे लें, बाद में क्या ठीक करें, और इसमें से किसी को भी सर्वर की ज़रूरत क्यों नहीं।

## बॉक्स में और भी टूल

- [वीडियो से ऑडियो निकालें](https://abox.tools/hi/extract-audio-from-video/): वीडियो छोड़िए और आवाज़ निकाल लीजिए। तस्वीर कभी डिकोड नहीं होती, और कुछ भी अपलोड नहीं होता।
- [ऑडियो ट्रिमर](https://abox.tools/hi/trim-audio/): बजते-बजते वे हिस्से निशान लगाइए जो रखने लायक हैं। वे एक ही फ़ाइल बनकर लौटते हैं, ठीक वहीं कटे जहाँ आपने कहा।
- [ऑडियो एडिटर](https://abox.tools/hi/edit-audio/): उलटी दिशा में चलाइए, रफ़्तार बदलिए, धीमी रिकॉर्डिंग को उठाइए। यह सब यहीं, आपकी अपनी मशीन पर।
- [PDF मर्जर और स्प्लिटर](https://abox.tools/hi/merge-pdf/): पेज इधर-उधर कीजिए, बिना किसी सर्वर तक गए।

## सवाल

### क्या मेरा डॉक्यूमेंट कहीं अपलोड होता है?

नहीं। तस्वीर को डीकोड करना, सीधा करना, साफ़ करना और PDF में लिखना, यह सब आपका अपना ब्राउज़र आपके अपने हार्डवेयर पर करता है। इस टूल में नेटवर्क का कोई काम है ही नहीं, न यह कभी कुछ मँगाता है और न कभी कुछ भेजता है। और पेज की `Content-Security-Policy` में हर वह पता लिखा है जिससे वह बात कर सकता है, जिनमें से एक भी इस साइट का नहीं है। पेज एक बार लोड कीजिए, इंटरनेट बंद कीजिए, और यह फिर भी चलता है।

### बिना मॉडल के यह कागज़ के कोने कैसे ढूँढ़ता है?

उन चार लंबी सीधी किनारों को ढूँढ़कर जिनसे एक चतुर्भुज बनता है। तस्वीर छोटी की जाती है, ग्रेडिएंट निकाला जाता है, यानी यह कि तस्वीर कहाँ बदलती है और किस दिशा में, और किनारे पर पड़ने वाला हर पिक्सल उस सीधी रेखा को वोट देता है जिस पर वह होता। मज़बूत रेखाओं को जोड़कर संभावित चतुर्भुज बनाए जाते हैं, और हर संभावना को इस तरह अंक मिलते हैं कि उसकी चारों भुजाओं पर चलकर पूछा जाता है कि हर भुजा के नीचे वाकई कितना किनारा है, और क्या ये चारों मिलकर एक ही चीज़ की सीमा हैं। कागज़ अपने आसपास से या तो हल्का होता है या गहरा, पर चारों भुजाओं पर एक ही तरह से, और यही बात टेक्स्ट की एक लाइन को कागज़ का निचला किनारा समझ लेने से रोकती है। न कोई वेट है, न कुछ डाउनलोड होता है, और गणित हर डॉक्यूमेंट के लिए वही गणित रहता है।

### इसने जो कोने ढूँढ़े वे गलत हैं। अब क्या?

उन्हें खींचकर ठीक कर दीजिए। कोने एक शुरुआती जगह भर हैं, फ़ैसला कभी नहीं। स्कैन वहीं से लिया जाता है जहाँ चारों कोने आखिर में पहुँचते हैं। तस्वीर पर कहीं भी दबाइए और सबसे पास वाला कोना आपकी उँगली पर आ जाता है, जो किसी छोटी-सी पकड़ को ठीक-ठीक छूने से आसान है, और तीर की कुंजियाँ जिस कोने पर फ़ोकस है उसे एक-एक पिक्सल सरकाती हैं। जब कोने ढूँढ़े नहीं बल्कि अंदाज़े से लगाए गए हों तब भी पेज बता देता है और उस पन्ने को पट्टी में निशान लगा देता है। इसकी आम वजह यह होती है कि कागज़ लगभग अपने ही रंग की मेज़ पर रखा है, जहाँ ढूँढ़ने लायक किनारा वाकई है ही नहीं।

### सीधा किया हुआ कागज़ सही आकार में क्यों आता है, दबा हुआ क्यों नहीं?

क्योंकि आकार किनारों से नापा नहीं जाता, परिप्रेक्ष्य से वापस निकाला जाता है। तिरछे से ली गई तस्वीर में दूर वाला किनारा छोटा दिखता है, इसलिए सीधा-सा तरीका, यानी आमने-सामने की सबसे लंबी जोड़ी को लेकर उसी को अनुपात मान लेना, एक ऐसा A4 बनाता है जो साफ़ दिखने लायक दबा हुआ होता है। वेब पर ज़्यादातर स्कैनर यही देते हैं। सच यह है कि किसी चतुर्भुज की तस्वीर में इतनी जानकारी होती है कि उससे उस चतुर्भुज का अनुपात और कैमरे की फ़ोकल लंबाई दोनों वापस निकाले जा सकते हैं, बशर्ते कैमरा कोई आम कैमरा हो। यह 2003 में Zhang और He का नतीजा है, और यही `src/geometry.js` करता है। जहाँ तस्वीर बिलकुल सामने से ली गई हो वहाँ परिप्रेक्ष्य होता ही नहीं और उसकी ज़रूरत भी नहीं, क्योंकि तब किनारे सटीक होते हैं। ऐसे में वह किनारों पर लौट आता है, और पेज बता देता है कि दोनों में से किसने जवाब दिया।

### ‘साफ़ करना’ तस्वीर के साथ असल में करता क्या है?

वह रोशनी को भाग देकर निकाल देता है। कागज़ की अपनी चमक पूरे पन्ने पर नापी जाती है, यानी छोटे-छोटे खानों की एक जाली और हर खाने में चमक का कोई ऊँचा प्रतिशतक, जिसे हिलाने के लिए टेक्स्ट बहुत गहरा और बहुत बिखरा हुआ होता है। फिर हर पिक्सल को उसी जगह के अनुमानित कागज़ से भाग दिया जाता है। जो बचता है वह स्याही है, एक जैसी रोशनी में, बिना छाया और बिना किनारों के मद्धिम पड़ने के। यह कंट्रास्ट बढ़ाने जैसा नहीं है। ली गई तस्वीर का कंट्रास्ट बढ़ाने से हल्का हिस्सा सफ़ेद और गहरा हिस्सा काला हो जाता है, और गहरे हिस्से में लिखा हुआ पढ़ा ही नहीं जाता। इसीलिए ‘ऑटो लेवल’ ऐसी तस्वीरों को बेहतर करने के बजाय बिगाड़ देता है।

### काला-सफ़ेद मोड इतना छोटा क्यों होता है?

क्योंकि दो रंगों वाली तस्वीर वाकई एक करोड़ साठ लाख रंगों वाली तस्वीर के डेटा का एक अंश भर होती है, और यहाँ उसे उसी तरह रखा भी जाता है। हर पिक्सल पर एक बिट, आठ-आठ को एक बाइट में बाँधकर और ठीक-ठीक कंप्रेस करके, न कि किसी काले-सफ़ेद चित्र की JPEG की तरह। उन्हीं पन्नों पर यह रंगीन मोड से करीब अठारह गुना छोटा निकलता है, इसलिए बीस पन्ने का अनुबंध पंद्रह मेगाबाइट के आसपास जाने के बजाय एक मेगाबाइट से नीचे रह जाता है। सीमा Sauvola की है, जो हर पिक्सल का फ़ैसला पूरे पन्ने के किसी एक नंबर के बजाय उसके अपने पड़ोस के औसत और फैलाव से करती है, और यही छाया के भीतर लिखे को पढ़ने लायक रखता है। इसमें मध्यम छायाएँ नहीं होतीं, इसलिए जिस पन्ने पर तस्वीर हो उसके लिए कोई दूसरा मोड चुनना चाहिए।

### क्या मैं कई पन्ने एक ही PDF में रख सकता हूँ?

हाँ। आप जो भी तस्वीर जोड़ते हैं वह अगला पन्ना बन जाती है, उसी क्रम में जिसमें वे सूची में हैं, और हर पन्ना अपने कोने खुद रखता है, इसलिए एक के बाद एक ली गई कागज़ों की ढेरी एक ही डॉक्यूमेंट बन जाती है। पट्टी में हर पन्ने पर लगे तीर उसे आगे या पीछे कर देते हैं। साफ़ करने की सेटिंग सभी पन्नों पर एक साथ लागू होती है और यह जान-बूझकर है, क्योंकि एक ही डॉक्यूमेंट के अलग-अलग तरह से साफ़ किए गए पन्ने दो डॉक्यूमेंट जैसे दिखते हैं।

### क्या यह टेक्स्ट पढ़ता है, ताकि मैं PDF में खोज सकूँ?

नहीं। न कोई टेक्स्ट लेयर है और न अक्षर पहचानने की सुविधा। जो निकलता है वह पन्ने की तस्वीर है, एक पन्ने पर रखी हुई। इसे ठीक से करने का मतलब होता कोई OCR इंजन, यानी दसियों मेगाबाइट का मॉडल डाउनलोड करना, और जो डॉक्यूमेंट स्कैनर आपकी सैलरी स्लिप पढ़ने से पहले कोई मॉडल मँगाता, वह सैलरी स्लिप के बारे में घर फ़ोन करने की वजह रखने वाला स्कैनर होता। अगर आपको टेक्स्ट चाहिए, तो काला-सफ़ेद मोड ठीक वैसी ही फ़ाइल बनाता है जिस पर आपकी अपनी मशीन का OCR सॉफ़्टवेयर सबसे अच्छा काम करता है।

### यह धुँधली आई है। क्यों?

लगभग हमेशा इसलिए कि तस्वीर में कागज़ छोटा था। झलक के नीचे वाला पैनल बताता है कि कागज़ ने फ़्रेम का कितना हिस्सा भरा और उस नाप के कागज़ पर यह मोटे तौर पर कितने डॉट प्रति इंच बैठता है। करीब 150 DPI से नीचे छपा हुआ स्कैन ढीला दिखता है, और जो बारीकी फ़ाइल में कभी थी ही नहीं उसके बारे में कोई टूल कुछ नहीं कर सकता। ज़ूम करने के बजाय पास जाइए, स्थिर रहिए, और बटन दबाने से पहले कैमरे को कागज़ पर फ़ोकस कर लेने दीजिए। दूसरी वजह कैमरे का हिलना है, और वह भी वापस नहीं आती।

### क्या यह मुफ़्त है, और क्या अकाउंट चाहिए?

यह मुफ़्त है, और न अकाउंट है, न साइन-इन, न ट्रायल, न पन्नों की सीमा, न कोई वॉटरमार्क। तस्वीरों के साइज़ पर भी कोई सीमा नहीं है, क्योंकि इसका खर्च उठाने वाला कोई सर्वर ही नहीं है। काम आपकी अपनी मशीन पर होता है। साइट पर विज्ञापन चलते हैं और उन्हीं से इसका खर्च निकलता है, और विज्ञापनों को आपके डॉक्यूमेंट के बारे में कुछ नहीं दिया जाता।

## प्राइवेसी का यह दावा कैसे जाँचा जा सकता है

- **आपके डॉक्यूमेंट के जाने के लिए कोई जगह ही नहीं है।** Content-Security-Policy में हर वह पता लिखा है जिससे यह पेज बात कर सकता है, और उनमें से एक भी इस साइट का नहीं है। यहाँ कोई ऐसा एंडपॉइंट नहीं है जहाँ आपकी तस्वीरें जमा हो सकें, और कोड में ऐसा कुछ नहीं है जो होता तो भी उन्हें भेजता।
- **कोई मॉडल है ही नहीं, इसलिए न कुछ डाउनलोड करना है और न किसी से पूछना है।** कागज़ के चारों कोने ढूँढ़ने का काम गणित से होता है। तस्वीर का ग्रेडिएंट, उसमें मौजूद सीधी रेखाओं के लिए एक वोट, और यह जाँच कि जीतने वाले चतुर्भुज की हर भुजा के नीचे वाकई क्या है। न कोई वेट, न कोई इन्फ़रेंस रनटाइम, न पहली बार इस्तेमाल पर कुछ मँगाया जाना, और न ऐसा कुछ जो किसी और के डॉक्यूमेंट पर अलग बर्ताव करे। देखिए `src/detect.js`।
- **डॉक्यूमेंट में न तारीख जाती है, न लेखक, न मशीन का नाम।** स्कैन वह चीज़ है जो लोग दूसरों को भेजते हैं, और अक्सर इसलिए भेजते हैं कि किसी दफ़्तर ने माँगा है। PDF में पन्नों के अलावा सिर्फ़ इस टूल का नाम लिखा जाता है, और अगर आप कोई शीर्षक टाइप करें तो वह। न बनने की तारीख, न लेखक, न सीरियल नंबर, और न आपकी घड़ी, आपकी फ़ाइलों के नाम या आपके कंप्यूटर से निकला हुआ कुछ। देखिए `src/document.js`।
- **यहाँ कुछ भी कहीं से कुछ नहीं मँगाता।** `src/` में कहीं भी न `fetch` है, न `XMLHttpRequest`, न `sendBeacon`। काम बस `getImageData` है, बाइट पर चलने वाले कुछ लूप, और ब्राउज़र का अपना JPEG एन्कोडर। ये सब पहले से आपकी मशीन पर हैं।
- **यह ऑफ़लाइन चलता है।** नेटवर्क काट दीजिए और टूल वैसा ही रहेगा, क्योंकि इसमें नेटवर्क वाला कोई कदम कभी था ही नहीं। यही सबसे आसान सबूत है, और पासपोर्ट स्कैन करने से पहले इसे एक बार आज़मा लेना चाहिए।

**खुद जाँच लीजिए।** ऊपर लिखी किसी भी बात को भरोसे पर मानने की ज़रूरत नहीं। यह पेज रिपॉज़िटरी के टेम्पलेट और कॉन्फ़िग से बनता है, एक ऐसी बिल्ड स्क्रिप्ट के ज़रिए जिसे आप पढ़ भी सकते हैं और खुद चला भी सकते हैं। उसका नतीजा `dist` ब्रांच पर कमिट रहता है, यानी जो सर्व हो रहा है और सोर्स से बिल्ड करने पर जो बनता है, दोनों का फ़र्क आप खुद देख सकते हैं: https://github.com/A-Box-of-Tools/website

सबसे पहले पढ़ने लायक फ़ाइलें ये हैं — Content-Security-Policy के लिए `config/site.toml`, कोने बिना किसी मॉडल के कैसे ढूँढ़े जाते हैं इसके लिए `src/detect.js`, सीधा करने के लिए `src/warp.js`, और असमान रोशनी को भाग देकर निकालने के लिए `src/clean.js`।
