OCR असल में क्या करता है, और क्या नहीं कर सकता
OCR आकार पहचानता है और अक्षर लौटाता है। वह पढ़ता नहीं। उसके पीछे शब्दों की कोई समझ नहीं होती, इसलिए “l” समझ लिया गया “1” भी उतने ही यक़ीन के साथ लौटता है जितने उसके आसपास के सही अक्षर। इसीलिए ये पेज आपको साफ़-सुथरा दिखने वाला नतीजा थमाकर ग़लतियां ढूंढने के लिए छोड़ देने के बजाय, टेक्स्ट के बगल में रीडर का अपना कॉन्फ़िडेंस दिखाते हैं। साफ़ छपे टेक्स्ट पर, जिसकी फ़ोटो सीधी और फ़ोकस में ली गई हो, ग़लती की दर हज़ार में कुछ अक्षर है। चमक, छाया या किसी अनोखे टाइपफ़ेस पर यह बहुत ज़्यादा बिगड़ सकती है, और आउटपुट देखने में ज़रा भी अलग नहीं लगेगा।
इन पेजों के पीछे दो रीडर हैं। एक पेज पर जहां भी टेक्स्ट हो उसे ढूंढता है, बिना यह जाने कि वह किस लिपि में है, और एक ही डिक्शनरी से पचास-एक भाषाएं पढ़ता है। दूसरा, हर भाषा के लिए अलग से ट्रेन किया गया, उसके पीछे रहता है और 120 से ज़्यादा भाषाएं कवर करता है। भाषा को ऑटोमैटिक पर छोड़ने से पहले रीडर को कोशिश करने का मौक़ा मिलता है, और यह मायने रखता है, क्योंकि ग़लत भाषा चुनना कुछ भी वापस न मिलने की सबसे आम वजह है — पोलिश मेन्यू को सिरिलिक समझकर रूसी की तरह पढ़ा जाए, तो पूरे यक़ीन के साथ ख़ाली पेज लौटता है। भाषा ख़ुद चुनने से काम उसी भाषा के रीडर पर टिक जाता है, और जब आपको ठीक-ठीक पता हो कि आपके पास क्या है, तो आप यही चाहते हैं।
रेज़ोल्यूशन मायने रखता है, फ़ाइल साइज़ नहीं। रीडर को अक्षरों की एक ख़ास ऊंचाई चाहिए और सब कुछ उसी हिसाब से स्केल किया जाता है: स्कैन किए गए PDF के पेज पढ़ने के लिए 300 DPI पर रेंडर होते हैं, और तस्वीर को उसके डाइमेंशन से नहीं, बल्कि ख़ुद स्याही से मापा जाता है, फिर ज़रूरत के हिसाब से बड़ा या छोटा किया जाता है। स्क्रीन का टेक्स्ट वह मामला है जिसमें लोग ग़लती करते हैं — सामान्य साइज़ पर एक अक्षर लगभग दस पिक्सेल ऊंचा होता है, रीडर की ज़रूरत का लगभग एक-तिहाई, इसलिए स्क्रीनशॉट को पढ़ने से पहले बड़ा किया जाता है। लगभग आठ पिक्सेल प्रति अक्षर से नीचे बड़ा करने लायक कोई बारीकी बचती ही नहीं, और कोई भी प्रोसेसिंग उसे गढ़ नहीं सकती। दूसरी तरफ़, मेन्यू की 48 मेगापिक्सेल फ़ोटो किसी छोटी, शार्प फ़ोटो से ज़्यादा सटीक नहीं होती; एक हद के बाद ज़्यादा पिक्सेल समय लेते हैं और कुछ नहीं देते।
टेढ़ापन और असमान रोशनी जितना नुक़सान दिखते हैं, उससे कहीं ज़्यादा करते हैं। फ़ोटो में लिया गया पेज एक-दो डिग्री टेढ़ा होता है और एक तरफ़ से रोशन होता है, इसलिए “इमेज से टेक्स्ट निकालें” और “डॉक्यूमेंट स्कैन करें” पूरे पेज में वह कोण मापकर उसे हटाते हैं, फिर स्याही के पीछे के कागज़ की चमक का हिस्सों-हिस्सों में अनुमान लगाकर उसे एक जैसे सफ़ेद तक ले आते हैं। यह सिर्फ़ सजावट नहीं है। सीधी रूलिंग लाइनें ही टेबल को ग्रिड के रूप में पहचानने देती हैं, और एक जैसा कंट्रास्ट ही आपके हाथ की छाया को स्याही समझे जाने से रोकता है। स्क्रीनशॉट पर जानबूझकर इनमें से कुछ नहीं किया जाता: वह पहले से सीधा और एक जैसा रोशन होता है, और उसे फ़ोटो की तरह तैयार करने से सिर्फ़ ग़लतियां बढ़ती हैं।
टेबल और कई कॉलम वाले लेआउट सचमुच मुश्किल मामले हैं, और आंकड़े जानने लायक हैं। पूरे पेज को गद्य की तरह पढ़ने पर, लाइनों वाले एक फ़ॉर्म में सेल का टेक्स्ट अगले कॉलम में घुस गया और एक-तिहाई लेबल छूट गए — पंद्रह से बीस प्रतिशत अक्षर ग़लत। पहले रूलिंग लाइनें ढूंढकर हर सेल को अलग पढ़ने से यह लगभग पांच प्रतिशत पर आ गया। इसलिए दिखने वाली लाइनों वाली टेबल ग्रिड के रूप में पहचानी जाती है और टैब से अलग की गई पंक्तियों के रूप में लौटती है, जो सीधे स्प्रेडशीट में पेस्ट हो जाती हैं, और गद्य के कॉलम पेज के आर-पार सीधे नहीं, पढ़ने के क्रम में पढ़े जाते हैं। सिर्फ़ ख़ाली जगह से बनी टेबल में ढूंढने को कोई लाइन नहीं होती, और वह पेस्ट में बचती है तो क़िस्मत से, डिज़ाइन से नहीं।
सर्च होने वाली PDF और निकाला गया टेक्स्ट अलग चीज़ें हैं। “PDF OCR करें” और “डॉक्यूमेंट स्कैन करें” तस्वीर को बिल्कुल वैसा ही छोड़ते हैं और पहचाने गए शब्दों को उसके ऊपर अदृश्य रूप से रखते हैं: पेज बिल्कुल वैसा ही दिखता है, Ctrl+F चीज़ें ढूंढने लगता है, और आप सेलेक्ट और कॉपी कर सकते हैं। पेज पर कभी कुछ पेंट नहीं किया जाता — जिसका मतलब यह भी है कि कोई ग़लत पढ़ाई एक परफ़ेक्ट दिखने वाले डॉक्यूमेंट के अंदर छिपी रहती है। “इमेज से टेक्स्ट निकालें” और “स्क्रीनशॉट से टेक्स्ट निकालें” इसका उल्टा करते हैं: आपको सिर्फ़ अक्षर मिलते हैं, और कुछ नहीं — न टाइपफ़ेस, न रंग, न बोल्ड, न तस्वीर। टेक्स्ट लेयर के बारे में एक बात, क्योंकि यह आसानी से छूट जाती है — वह सिर्फ़ वही अक्षर रख सकती है जो साथ आया कोई फ़ॉन्ट लिख सके, इसलिए चीनी, जापानी और कोरियन शब्द लिखे नहीं जाते, बल्कि आपके लिए गिने जाते हैं, जब तक उनके लिए कोई फ़ॉन्ट शामिल नहीं होता।
जहां ब्राउज़र सचमुच सही टूल नहीं है
तस्वीर का आपके डिवाइस से बाहर न जाना ही उसे यहां पढ़ने की पूरी वजह है, और मुश्किल डॉक्यूमेंट पर इसकी क़ीमत सटीकता में चुकानी पड़ती है। यह सौदा असली है, और इसे दबाने के बजाय साफ़-साफ़ कहना बेहतर है।
जुड़ी हुई (कर्सिव) लिखावट पहचानी नहीं जाती — न यहां, न किसी आम OCR टूल में। ये छपे अक्षरों के रीडर हैं: ये अक्षरों के आकार पहचानते हैं, और कर्सिव में पहचानने के लिए अलग-अलग अक्षर होते ही नहीं। हाथ से अलग-अलग लिखे अक्षर अक्सर इतने ठीक आ जाते हैं कि दोबारा टाइप करने के बजाय सुधारे जा सकें — बड़े अक्षर, हाथ से भरा फ़ॉर्म, ध्यान से लिखा नोट — इसीलिए “हाथ की लिखावट पढ़ें” मौजूद है और टेक्स्ट के बगल में कॉन्फ़िडेंस का आंकड़ा दिखाता है। कर्सिव को ठीक से पढ़ने के लिए ख़ास तौर पर लिखावट पर ट्रेन किया गया रीडर चाहिए, और अच्छे रीडर टैब में नहीं, सर्वर पर चलते हैं।
मुश्किल डॉक्यूमेंट पर क्लाउड OCR इससे बेहतर करेगा। Google, Amazon और Microsoft ऐसे रीडर चलाते हैं जो ब्राउज़र टैब में समा सकने वाले डेटा से कहीं ज़्यादा डेटा पर ट्रेन किए गए हैं, और ख़राब फ़ोटो, घने कई कॉलम वाले पेज, अनोखे टाइपफ़ेस या भरे हुए फ़ॉर्म पर वे साफ़ तौर पर ज़्यादा सटीक होंगे। ABBYY FineReader जैसा पैसे वाला डेस्कटॉप सॉफ़्टवेयर भी। अगर किसी मुश्किल डॉक्यूमेंट पर सटीकता इस बात से ज़्यादा मायने रखती है कि डॉक्यूमेंट आपकी मशीन पर ही रहे, तो इनमें से कोई इस्तेमाल करें — यही ईमानदार तुलना है, और यह फ़ैसला आपको ही करना चाहिए।
बड़ी संख्या का काम कमांड लाइन पर होता है। ये टूल तब एक डॉक्यूमेंट पढ़ते हैं जब कोई इंसान क्लिक करे। शेड्यूल पर दो हज़ार स्कैन OCRmyPDF जैसे डेस्कटॉप OCR टूल का काम है, जो एक ही कमांड में PDF के पूरे फ़ोल्डर में टेक्स्ट लेयर जोड़ देता है — मुफ़्त, उसी तरह की पढ़ाई, और क्लिक करने की कोई झंझट नहीं।
कुछ चीज़ें बस नहीं की जातीं। पर्सपेक्टिव ठीक नहीं किया जाता: बगल से फ़ोटो लिया गया पेज अपना समलंब (ट्रेपेज़ॉइड) आकार बनाए रखता है और सिर्फ़ घुमाव ठीक होता है, इसलिए ठीक ऊपर से फ़ोटो लेने में एक सेकंड ज़्यादा लगाना फ़ायदेमंद है। गहरी तह, या किताब की जिल्द के पास का मोड़, मुड़ा ही रहता है। और यहां कोई कैमरा नहीं है — कोड रीडर आपके पास पहले से मौजूद तस्वीर डिकोड करते हैं, लाइव फ़ीड नहीं।
लोकल चलाने की एक व्यावहारिक क़ीमत: किसी भाषा को पहली बार इस्तेमाल करने पर रीडर और भाषा पैक इसी साइट से डाउनलोड होते हैं, जो कुछ मेगाबाइट होते हैं और पहली बार को बाद वाली बार से धीमा बनाते हैं। कुछ भी किसी और के CDN से नहीं आता, और कुछ भी वापस नहीं जाता।
मिलते-जुलते नाम वाले टूल में से कैसे चुनें
इमेज से टेक्स्ट निकालें या स्क्रीनशॉट से टेक्स्ट निकालें। वही रीडर, अलग तरह से तैयार की गई तस्वीर, और यह फ़र्क़ सिर्फ़ दिखावटी नहीं है। फ़ोटो को सीधा किया जाता है और उसकी रोशनी बराबर की जाती है; स्क्रीनशॉट को बड़ा किया जाता है और बाक़ी वैसा ही छोड़ा जाता है, क्योंकि उसमें न टेढ़ापन है न असमान रोशनी, और उसे ऐसा मानकर चलने से वह बिगड़ता है। “स्क्रीनशॉट से टेक्स्ट निकालें” पेस्ट भी लेता है — Ctrl+V, या Mac पर Cmd+V, सीधे क्लिपबोर्ड से, पहले डिस्क पर कुछ सेव किए बिना।
इमेज से टेक्स्ट निकालें या डॉक्यूमेंट स्कैन करें। “इमेज से टेक्स्ट निकालें” आपको शब्द देता है और तस्वीर फेंक देता है। “डॉक्यूमेंट स्कैन करें” तस्वीर रखता है, उसे सीधा करता है, स्याही के पीछे का कागज़ सफ़ेद करता है और आपको स्कैन जैसी दिखने वाली PDF देता है — चाहें तो पीछे अदृश्य रूप से रखे टेक्स्ट के साथ। अगर टेक्स्ट कहीं पेस्ट करना है, तो पहला। अगर डॉक्यूमेंट किसी को भेजना है, तो दूसरा।
डॉक्यूमेंट स्कैन करें या PDF OCR करें। “डॉक्यूमेंट स्कैन करें” फ़ोटो से शुरू करके PDF बनाता है। “PDF OCR करें” पहले से मौजूद PDF से शुरू करता है और उसमें टेक्स्ट लेयर जोड़ता है। दोनों में से कोई पेजों की दिखावट नहीं बदलता। किसी कॉन्ट्रैक्ट की फ़ोटो ली है तो आपको पहला चाहिए; ईमेल में स्कैन मिला है तो दूसरा।
हाथ की लिखावट पढ़ें या इमेज से टेक्स्ट निकालें। वही रीडर, टेबल ढूंढने वाला हिस्सा बंद, और कॉन्फ़िडेंस के आंकड़े को वह अहमियत दी गई है जिसका वह हक़दार है, क्योंकि लिखावट में वही नंबर नतीजे का काम का हिस्सा है। अगर लिखावट जुड़ी हुई है, तो कोई भी पेज उसे नहीं पढ़ेगा, और लिखावट वाला पेज भरोसेमंद लगने वाली बकवास लौटाने के बजाय यह बात साफ़ कह देता है।
QR कोड स्कैन करें या बारकोड स्कैन करें। चौकोर कोड बनाम धारियों वाले, और यह जानना फ़ायदेमंद है कि आपके हाथ में कौन-सा है। QR वाला पेज QR, Micro QR, Data Matrix, Aztec और PDF417 पढ़ता है — जिनमें बोर्डिंग पास और ड्राइविंग लाइसेंस आ जाते हैं, जिनके कोड चौकोर फ़ॉर्मैट के होते हैं, भले ही वे बिंदुओं के धब्बे जैसे दिखें। बारकोड वाला पेज रिटेल और लॉजिस्टिक्स के धारियों वाले फ़ॉर्मैट पढ़ता है — EAN, UPC, Code 128, Code 39, ITF — और चेक डिजिट जांचता है, यानी वह आख़िरी अंक जो बाक़ी अंकों से कैलकुलेट होता है, और यही एक भरोसेमंद नंबर और सिर्फ़ सही दिखने वाले नंबर का फ़र्क़ है। दोनों में से कोई भी OCR नहीं है: कोड एक ज्ञात ज्यामिति वाला चिह्न है, इसलिए उसे डिकोड करना अक्षरों के आकार का अनुमान नहीं, गणित है। ये फ़ेल भी अलग-अलग तरह से होते हैं। चौकोर कोड में एरर करेक्शन होता है और वे खरोंच या बीच में छपे लोगो के बावजूद पढ़े जाते हैं; धारियों वाले कोड में यह बिल्कुल नहीं होता, इसलिए बार पर चमक का मतलब ग़लत नंबर नहीं, बल्कि कुछ भी न पढ़ा जाना है।