আগের পোস্টে দেখেছি কীভাবে স্ক্যান করা পাতাকে ঘুরিয়ে লাইনগুলোকে আনুভূমিক করা যায়। আজকের ধাপে আমরা প্রতিটি শব্দকে আলাদা আলাদাভাবে কেটে ফেলতে চাই। পরে একটা একটা করে শব্দ নিয়ে কাজ করা যাবে।
এ কাজে ইনপুট হিসাবে আমরা ব্যবহার করছি একটা সত্যিকারের বইয়ের স্ক্যান করা পাতা। শাহরিয়ার কবিরের লেখা জাহানারা ইমামের শেষ দিনগুলি বইটির ৬১ তম পৃষ্ঠার প্রথম প্যারা।
পাতাটি দেখতে বেশ ঝক ঝকে হলেও আসলে এর মধ্যে অনেক রকম খুত আছে, যেটা আমাদের কম্পিউটারকে বোকা বানিয়ে দিতে পারে। সেগুলো কেমন? একটু হিস্টোগ্রাম ইকুয়ালাইজ করে দেখি।
সবকিছু একেবারে সাদা কালোয় নিয়ে এলাম। এখানে পিক্সেলগুলোর মান হয় ২৫৫ (সাদা) অথবা ০ (কালো)। এখন লাইনগুলো আলাদা করা একেবারে সহজ।
এই ছবিতে প্রতিটি লাইনের উপরে আর নীচে একটা করে দাগ দেওয়া হয়েছে। কাজটা করতে পুরো ছবিটাকে একটা ম্যাট্রিক্স ভেবে নিয়ে সেটাকে এর প্রস্থের সমান একটা বিশেষ ভেক্টরের সাথে গুন দিইয়েছি। ভেক্টরটির প্রতিটি ইলিমেন্ট ১। ফলে আমরা আউটপুটে এই ছবির উচ্চতার সমান একটা ভেক্টর পাবো, যার প্রতিটি ইলিমেন্ট ঐ লাইন বরাবর কত্টি পিক্সেল সাদা সেটা নির্দেশ করে। সেখান থেকে লাইনগুলো বোঝা যায়। একইভাবে শব্দগুলোও নির্ণয় করে ফেলি।
চমৎকার! সহজ কাজগুলো মোটামুটি ভালোভাবেই হয়ে গেল। এখন ইন্টারেস্টিং ব্যাপার স্যাপার শুরু হবে। মানে প্রতিটি শব্দ থেকে বর্ণগুলো আলাদা করতে হবে। এবং নির্ণয় করতে হবে কোন বর্ণটি আসলে কী। আমরা ইংরেজী তে এ ধরনের প্রোগ্রাম দেখেছি। ওদের লেটারগুলো আলাদা আলাদা থাকে বলে কাজ অনেক সহজ হয়ে যায়। আমাদের শব্দে বর্ণগুলো মাত্রা দ্বারা যুক্ত। ফলে এদেরকে আলাদা করতে কম্পিউটারের কৃত্রিম বুদ্ধিমত্তাকেও অনেক বেশি বুদ্ধিমান হতে হবে।
ভাবতেই ভালো লাগছে যে সেই বুদ্ধিটা দিতে হবে আমাকেই!
সংযুক্তি: থ্রেশহোল্ডের মান পালটে একই কোড দিয়ে বর্ণগুলোকেও আলাদা করা যায়। যদিও তখন খুব একটা রোবাস্ট হয় না। এখানে তেমন একটা টেস্ট কেসের রেজাল্ট টাঙ্গিয়ে রাখি।
এ কাজে ইনপুট হিসাবে আমরা ব্যবহার করছি একটা সত্যিকারের বইয়ের স্ক্যান করা পাতা। শাহরিয়ার কবিরের লেখা জাহানারা ইমামের শেষ দিনগুলি বইটির ৬১ তম পৃষ্ঠার প্রথম প্যারা।
পাতাটি দেখতে বেশ ঝক ঝকে হলেও আসলে এর মধ্যে অনেক রকম খুত আছে, যেটা আমাদের কম্পিউটারকে বোকা বানিয়ে দিতে পারে। সেগুলো কেমন? একটু হিস্টোগ্রাম ইকুয়ালাইজ করে দেখি।
এটা করার ফলে, যদিও অনেক রকম খুত চোখে পড়ছে, একই সঙ্গে মূল লেখাটা আরো গাড় হয়ে গেছে। তাই আমরা এর থেকে শুধু গাড় পিক্সেলগুলো রেখে বাকি সব ফেলে দেব। কাজটা করব থ্রেশহোল্ড ফাংশনের সাহায্যে। একই সংগে ছবিটির রঙও উল্টে করে ফেলবো।
সবকিছু একেবারে সাদা কালোয় নিয়ে এলাম। এখানে পিক্সেলগুলোর মান হয় ২৫৫ (সাদা) অথবা ০ (কালো)। এখন লাইনগুলো আলাদা করা একেবারে সহজ।
এই ছবিতে প্রতিটি লাইনের উপরে আর নীচে একটা করে দাগ দেওয়া হয়েছে। কাজটা করতে পুরো ছবিটাকে একটা ম্যাট্রিক্স ভেবে নিয়ে সেটাকে এর প্রস্থের সমান একটা বিশেষ ভেক্টরের সাথে গুন দিইয়েছি। ভেক্টরটির প্রতিটি ইলিমেন্ট ১। ফলে আমরা আউটপুটে এই ছবির উচ্চতার সমান একটা ভেক্টর পাবো, যার প্রতিটি ইলিমেন্ট ঐ লাইন বরাবর কত্টি পিক্সেল সাদা সেটা নির্দেশ করে। সেখান থেকে লাইনগুলো বোঝা যায়। একইভাবে শব্দগুলোও নির্ণয় করে ফেলি।
এখন কোথাথেকে কতটুকুর মধ্যে শব্দগুলো আছে তা আমরা পেয়ে গেছি। এখন মূল ছবিতে শব্দগুলোকে লাল রঙের বক্সে বন্দী করে ফেলি।
চমৎকার! সহজ কাজগুলো মোটামুটি ভালোভাবেই হয়ে গেল। এখন ইন্টারেস্টিং ব্যাপার স্যাপার শুরু হবে। মানে প্রতিটি শব্দ থেকে বর্ণগুলো আলাদা করতে হবে। এবং নির্ণয় করতে হবে কোন বর্ণটি আসলে কী। আমরা ইংরেজী তে এ ধরনের প্রোগ্রাম দেখেছি। ওদের লেটারগুলো আলাদা আলাদা থাকে বলে কাজ অনেক সহজ হয়ে যায়। আমাদের শব্দে বর্ণগুলো মাত্রা দ্বারা যুক্ত। ফলে এদেরকে আলাদা করতে কম্পিউটারের কৃত্রিম বুদ্ধিমত্তাকেও অনেক বেশি বুদ্ধিমান হতে হবে।
ভাবতেই ভালো লাগছে যে সেই বুদ্ধিটা দিতে হবে আমাকেই!
সংযুক্তি: থ্রেশহোল্ডের মান পালটে একই কোড দিয়ে বর্ণগুলোকেও আলাদা করা যায়। যদিও তখন খুব একটা রোবাস্ট হয় না। এখানে তেমন একটা টেস্ট কেসের রেজাল্ট টাঙ্গিয়ে রাখি।
No comments:
Post a Comment