इस पेज का कोड चालू नहीं हुआ।

index.html को सीधे किसी फ़ोल्डर से खोलने पर ब्राउज़र JavaScript मॉड्यूल रोक देता है, इसलिए कागज़ की एक तस्वीर चुनने पर कुछ नहीं होगा। इसके बजाय फ़ोल्डर को http पर सर्व कीजिए:

powershell -ExecutionPolicy Bypass -File serve.ps1

फिर http://localhost:8080/ खोलिए।

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

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

भाषा: हिन्दी
कोड देखें
यह टूल डॉक्यूमेंट कभी अपलोड नहीं करता। यहाँ कोई सर्वर है ही नहीं।

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

लाइव जाँच: जाँच जारी…

ऑफ़लाइन: जाँच जारी…

हमारी बात पर यकीन मत कीजिए। डेवलपर टूल्स खोलिए, नेटवर्क टैब देखिए, और एक कागज़ स्कैन कीजिए। एक भी रिक्वेस्ट में न कोई तस्वीर जाती है, न थंबनेल, न फ़ाइल का नाम, न किसी एक कोने की जगह। या फिर इंटरनेट बंद कर दीजिए और तब भी स्कैन करके देखिए।

1 तस्वीरें चुनिए

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

2 कोनों को कागज़ पर बिठाइए

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

कोई तस्वीर चुनिए, वह यहाँ आ जाएगी और उसके चारों कोने आपके लिए ढूँढ़े हुए होंगे।

3 साफ़ कीजिए

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

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

ग्रेस्केल वही बराबर करना, बिना रंग के। रंग से छोटा, और किसी तस्वीर या दस्तखत के साथ काले-सफ़ेद से ज़्यादा नरम।

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

जैसा है वैसा रहने दें सीधा किया हुआ, और कुछ नहीं। उस पन्ने के लिए जहाँ कागज़ खुद मायने रखता है, जैसे कुछ पुराना, कुछ रंगीन, या कोई तस्वीर।

सीधा करने लायक कोई तस्वीर आते ही सीधा किया हुआ पन्ना यहाँ दिखने लगेगा।

4 डॉक्यूमेंट सेव कीजिए

PDF यहीं बनती है, इसी पेज की मेमोरी में, एक-एक पन्ना करके। इस टूल के दूसरी तरफ़ कोई सर्वर नहीं है जिसे सैलरी स्लिप, पासपोर्ट या अनुबंध भेजा जा सके, और कोड में ऐसा कुछ नहीं है जो होता तो भी ऐसा करता।

छपाई का रिज़ॉल्यूशन इतने पिक्सल वाले कागज़ को कितना बड़ा कहा जाएगा, बस यही। इससे यह बदलता है कि डॉक्यूमेंट किस नाप में छपेगा, और स्कैन का एक भी पिक्सल नहीं बदलता।

सबसे लंबी भुजा सीधे किए गए पन्ने की ऊपरी सीमा। कागज़ की तस्वीर में उस कागज़ की ज़रूरत से कहीं ज़्यादा पिक्सल होते हैं, और लंबी भुजा पर 2400 का मतलब A4 पर करीब 200 DPI है।

गुणवत्ता रंग और ग्रेस्केल मोड के लिए, जो JPEG में सेव होते हैं। काले-सफ़ेद पन्ने ठीक-ठीक सेव होते हैं, इसलिए उन पर इसका कोई असर नहीं होता।

डॉक्यूमेंट का शीर्षक (वैकल्पिक) पन्नों के अलावा डॉक्यूमेंट में लिखी जाने वाली यही एक चीज़ है। न तारीख, न लेखक, और न इस डिवाइस के बारे में कुछ। देखिए src/document.js।

82%

Markdown के रूप में देखें

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

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

विस्तार से

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

सवाल

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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