OCR আসলে কী করে, আর কী পারে না
OCR আকৃতি চেনে আর অক্ষর ফেরত দেয়। এটি পড়ে না। পেছনের শব্দগুলোর কোনো বোধ এর নেই, তাই “l” ভেবে ভুল পড়া একটি “1” চারপাশের প্রতিটি সঠিক অক্ষরের মতোই নিশ্চিত চেহারায় ফিরে আসে। এ কারণেই এই পেজগুলো পরিষ্কার দেখতে একটি ফল হাতে দিয়ে ভুল খোঁজার দায় আপনার ওপর না ছেড়ে, লেখার পাশে রিডারের নিজের আস্থার মাত্রা দেখায়। সোজা করে তোলা, ফোকাসে থাকা পরিষ্কার ছাপা লেখায় ভুলের হার হাজারে কয়েকটি অক্ষর। ঝলক, ছায়া বা অস্বাভাবিক টাইপফেসে তা অনেক বেশি খারাপ হতে পারে — আর আউটপুট দেখে তার কিছুই বোঝা যাবে না।
এই পেজগুলোর পেছনে দুটি রিডার আছে। একটি পেজের যেখানেই লেখা থাকুক খুঁজে পায়, কোন লিপিতে লেখা তা না জেনেই, আর একটিমাত্র অভিধান থেকে পঞ্চাশটির মতো ভাষা পড়ে। অন্যটি, প্রতিটি ভাষার জন্য আলাদাভাবে প্রশিক্ষিত, প্রথমটির পেছনে থাকে এবং ১২০টিরও বেশি ভাষা সামলায়। ভাষা “স্বয়ংক্রিয়ভাবে শনাক্ত করুন”-এ রাখলে প্রথম রিডারটি চেষ্টা করে — এটা জরুরি, কারণ ভুল ভাষা বেছে দেওয়াই কিছু ফেরত না পাওয়ার চিরাচরিত কারণ: সিরিলিক ধরে নিয়ে রুশ হিসেবে পড়া একটি পোলিশ মেনু পূর্ণ আত্মবিশ্বাসে একটি ফাঁকা পেজ ফেরত দেয়। নিজে ভাষা বেছে দিলে কাজটি সেই ভাষার রিডারেই বাঁধা থাকে — আপনার কাছে ঠিক কী আছে তা জানলে আপনি এটাই চাইবেন।
রেজোলিউশনই আসল, ফাইল সাইজ নয়। রিডার অক্ষরের একটি নির্দিষ্ট উচ্চতা চায়, আর সবকিছু সেই উচ্চতা দিতে স্কেল করা হয়: স্ক্যান করা PDF-এর পেজ পড়ার জন্য ৩০০ DPI-তে রেন্ডার হয়, আর ছবির মাপ নয়, কালি থেকেই ছবিটি মাপা হয়, তারপর মানিয়ে নিতে বড় বা ছোট করা হয়। পর্দার লেখাতেই মানুষ ভুল করেন — স্বাভাবিক সাইজে একটি অক্ষর প্রায় দশ পিক্সেল উঁচু, রিডার যা চায় তার মোটামুটি এক-তৃতীয়াংশ, তাই পড়ার আগে স্ক্রিনশট বড় করে নেওয়া হয়। অক্ষর প্রায় আট পিক্সেলের নিচে হলে বড় করার মতো কোনো খুঁটিনাটিই থাকে না, আর কোনো প্রসেসিংই তা বানিয়ে দিতে পারে না। অন্য দিকে, একটি মেনুর ৪৮ মেগাপিক্সেলের ছবি একটি ঝকঝকে ছোট ছবির চেয়ে বেশি নির্ভুল নয়; একটা পর্যায়ের পর বাড়তি পিক্সেল শুধু সময় খায়, কিছু দেয় না।
বাঁকা ভাব আর অসমান আলো যতটা মনে হয় তার চেয়ে বেশি ক্ষতি করে। ছবি তোলা একটি পেজ এক-দুই ডিগ্রি বাঁকা থাকে এবং এক দিক থেকে আলো পায়, তাই “ছবি থেকে লেখা” আর “ডকুমেন্ট স্ক্যান” পুরো পেজজুড়ে সেই কোণ মেপে তা সরিয়ে দেয়, তারপর কালির পেছনের কাগজের উজ্জ্বলতা খণ্ড খণ্ড করে অনুমান করে সবটা এক রকম সাদা করে তোলে। এটা শুধু দেখার জন্য নয়। সোজা দাগই একটি টেবিলকে আদৌ গ্রিড হিসেবে খুঁজে পেতে দেয়, আর সমান কনট্রাস্টই আপনার হাতের ছায়াকে কালি হিসেবে পড়া থেকে আটকায়। স্ক্রিনশটের বেলায় ইচ্ছে করেই এর কোনোটিই করা হয় না: এটি আগে থেকেই সোজা ও সমান আলোয়, আর একে ছবির মতো করে প্রসেস করলে শুধু ভুলই বাড়ে।
টেবিল আর একাধিক কলামের লেআউটই সত্যিকারের কঠিন ক্ষেত্র, আর সংখ্যাগুলো জেনে রাখার মতো। পুরো পেজকে সাধারণ গদ্য হিসেবে পড়লে দাগ টানা একটি ফর্মে সেলের লেখা পাশের কলামে ঢুকে গিয়েছিল আর এক-তৃতীয়াংশ লেবেল বাদ পড়েছিল — পনেরো থেকে বিশ শতাংশ অক্ষর ভুল। আগে দাগগুলো খুঁজে নিয়ে প্রতিটি সেল আলাদা করে পড়ায় তা নেমে এসেছিল প্রায় পাঁচ শতাংশে। তাই দৃশ্যমান দাগওয়ালা টেবিল গ্রিড হিসেবে খুঁজে পাওয়া যায় এবং ট্যাব দিয়ে আলাদা করা সারি হিসেবে ফেরত আসে, যা সরাসরি স্প্রেডশিটে পেস্ট হয়; আর গদ্যের কলামগুলো পেজের এপার-ওপার সোজাসুজি নয়, পড়ার ক্রমেই পড়া হয়। শুধু ফাঁকা জায়গা দিয়ে সাজানো টেবিলে খোঁজার মতো কোনো দাগ নেই, তাই পেস্টে তা টিকে গেলে সেটা ভাগ্যের জোরে, পরিকল্পনায় নয়।
সার্চযোগ্য 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 নয়: কোড হলো জানা জ্যামিতির একটি প্রতীক, তাই ডিকোড করা মানে অক্ষরের আকৃতি নিয়ে আন্দাজ নয়, গাণিতিক হিসাব। এদের ব্যর্থতার ধরনও আলাদা। চৌকো কোডে ত্রুটি সংশোধনের ব্যবস্থা থাকে, তাই আঁচড় বা মাঝখানে ছাপা লোগো থাকলেও টিকে যায়; ডোরাকাটাগুলোতে তা একেবারেই নেই, তাই দাগগুলোর ওপর ঝলক পড়লে ভুল নম্বর নয়, কিছুই পড়া যায় না।