ক্যামেরা উবাচ

কিছুদিন আগে “cal comm” এর এক দৈনন্দিন থ্রেড এ বিশাল আলোচনা চলছিলো মোবাইল নিয়ে। কম মোবাইল ভালো, কোনটা ভালোনা, iPhone ছাড়া কেন জীবন বৃথা।ওয়ান প্লাস এর চেয়ে ভালো কোনো ফোন পৃথিবীতে হতেই পারেনা, মাই( ছি ছিঃ ) ফোন কত ভালো ইত্যাদি।এসবের মধ্যে অবধারিত ভাবে ক্যামেরা এর ছবি comparison এর কথা চলেই এলো. এবং যথারীতি আমি ঘরের খেয়ে বোনের মোষ তাড়ানোর জন্যে সেখানে হাজির হয়ে বলতে গেলাম গুগল এর pixel এদের মধ্যে সেরা।
এবং যা হয়ে থাকে। হৈ হৈ রৈ রৈ করে সবাই তেড়ে এলো যে কেন ওয়ান প্লাস ভালো নয়.
(পুরো থ্রেডটা পড়তে গেলে সেটা এখানে পড়ুন এবং বেশ কিছু মজার উবাচ, যেমন এটা এবং এটা :P )

তারপর ওখানে জল অনেক গড়িয়ে গঙ্গায় থেমেছে, এবং আমি কিছুক্ষন মজা করেই পালিয়ে গেছি। কিন্তু বার বার আমার কাছে পিক্সেল এর ক্যামেরা এর কনফিগারেশন চাওয়া হচ্ছিলো যেটা আমি দেইনি কারণ আমার মতে আজকাল হার্ডওয়্যার কনফিগারেশন এর সাথে ছবির সম্পর্ক সাধারণত কিছু থাকেনা।

কিন্তু বুঝতে পারলাম অনেকেই সেটাকেই মূলমন্ত্র এখনো ধরে থাকে। তাই আজকের এই প্যাঁচাল পাড়া। আজকের এই লেখার বক্তব্য গুগল পিক্সেল ২ এর ভিডিও stabilization নিয়ে কথা বলা. যারা জানেনা তাদের জন্যে বলা, বর্তমানের সমস্ত ফোন, iPhone X কে ধরলেও আপাতত গুগল পিক্সেল এর ক্যামেরা কেই সবচেয়ে ভালো বলা হচ্ছে। আমি বলছিনা, DXOmark জাতীয় ইন্ডাস্ট্রি টেস্টার রা বলছে যাদের আপেল, গুগল রা বেঞ্চমার্ক হিসেবে cite করে থাকে। আপনারা নিজেরাও একটু সার্চ করে দেখতে পারেন, শুধু যেকোনো ব্লগ না পরে একটু রেপুটেড ব্লগ বা পোস্ট পড়বেন।

তা যদি ধরেই নেই যে তারাই সবচেয়ে ভালো তাহলেও তাদের অন্যতম কীর্তি এর মধ্যে একটু হলো ভিডিও stabilization . হাতে ধরে তোলা ভিডিও তে jitter কমানো। সাধারণত আজকালকার সব দামি ফোনেই (iPhone সহো) এটা অপটিক্যাল ইমেজ stabilization বা হার্ডওয়্যার এর সাহায্যে করা হয়ে থাকে। গুগল তার সাথে ইলেকট্রনিক ইমেজ stabilization যুক্ত করেছে। তাদের রিলিজ এ এই তুলনামূলক ভিডিও টা তারা প্রকাশ করেছিল। তারপর যদিও অনেক ভিডিও ব্লগার রা এটা টেস্ট করেছে

এসব বলার পরে যাই আসলে তাহলে হচ্ছেটা কি. কিভাবে তারা বাকি সবার থেকে, এমনকি DSLR বা iPhone এর ভিডিও stabilization কে টেক্কা দিয়ে যাচ্ছে।

এটা বুঝতে হলে আমাদের শুরু করতে হবে ক্যামেরা shake থেকে।
লোকেরা সাধারণত ভিডিও রেকর্ড তাদের ফোন হাতে ধরেই করে. কিন্তু তার মানে আমরা যখন ভিডিও রেকর্ড করি তখন সেটা হাতের ঝাকুনি সময় রেকর্ড হয়. অনেক সময়েই এই ঝাকুনি সেই ভিডিও গুলোর বারোটা বাজিয়ে দেয়. হাতে ধরে তোলা ভিডিও কখনোই ট্রাইপড এ তোলা ভিডিও এর মতো সুন্দর স্টেবল হয়না।
এর সঙ্গে এসে যুক্ত হয় মোশন blur .
ভিডিও করার সময় হয় ক্যামেরা বা ছবির সাবজেক্ট নড়া চড়া করলেই ভিডিও blurry হবে. আমরা ধরেই নেইএটা হচ্ছে কারণ ফোকাস হচ্ছেনা।কিন্তু আসলে আমরা যদি প্রত্যেক তা ইন্ডিভিজুয়াল ফ্রেম কে ফোকাস করেও consecutive ফ্রেম কে stablize করি তাহলেও মোশন ব্লার মোবাইল এ যায়না। একটা খুব কমন সাইড ইফেক্ট হয় ভিডিও rapidly শার্প এবং blurry হওয়া। যেটা আমরা ভেবেনেই যে অটো ফোকাস করতে পারছেনা (যেখানে আসলে দোষ অন্য জাগায়).
লো লাইট কন্ডিশন এ মোশন ব্লার এর উদাহরণ

আপনারা অনেকেই আপনার তোলা ভিডিও তে এরকম দেখে থাকবেন।

আমাদের চোখেরমণি যেমন সব কিছুর ছাপ আমাদের মস্তিষ্কে ছেড়ে যাই, তেমনি ডিজিটাল ক্যামেরা এর ক্ষেত্রে CMOS ইমেজ সেন্সর একই কাজ তা করে. সব ক্যামেরা তাই এটা থাকে।কিন্তু CMOS পুরো দৃশ্য এক সাথে দেখেনা। এক একটা পিক্সেল এর রো (যাকে scanline বলা হয়) একবারে করে “দেখতে দেখতে” পুরো দৃশ্যটা দেখে। (একে আপনি টাইপ রাইটার এ এক এক লাইন করে টাইপ করে পুরোটা টাইপ করার সঙ্গে তুলনা করতে পারেন।)এটা খুবই তাড়াতাড়ি হয়, ১ মিলিসেকেন্ড এর ১০ ভাগের ১ ভাগ সময় নেই পুরো কাজ সম্পন্ন হতে. কিন্তু তাও যদি এর মধ্যে ছবির কোনো অংশ “চলমান” হয় তাহলে সেই অংশ সামান্য ডিস্টর্টেড আসবে।ক্যামেরার পরিভাষায় একে শাটার ডিস্টর্শন বলে. এবং সব ক্যামেরা তাই কম বেশি এর অস্তিত্ব আছে. হাত যতই stable হোক, এটা এড়ানো সম্ভব নোই ভিডিও এর ক্ষেত্রে।
এটা একটা গ্লোবাল এবং রোলিং শাটার এর মধ্যে তুলনা

ডানদিকের টা রোলিং শাটার

অনেক সময় ভিডিও রেকর্ড করার সময় হঠাৎ করে একদম কাছে কোনো কিছু বা বস্তু চলে আসে, ক্যামেরা তার ওপর ফোকাস করে , এবং সে হঠাৎ করে চলে যাওয়ার পর আবার দূরের বস্তুতে ফোকাস করে.এই সময় একটা ওয়াইড অ্যাঙ্গেল এর চেঞ্জ দেখা যাই.একে ফোকাস breathing বলে. নিচের ভিডিও তে দেখা যাচ্ছে

একটা ভালো stabilization সিস্টেম ওপরের সব কটা প্রব্লেম কেই সমাধান করবে।
আজকালকার বেশিরভাগ প্রফেশনাল ভিডিওগ্রাফার রা হয় মেকানিকাল স্ট্যাবিলাইজার ব্যবহার করেন যা এক্টিভলি ওপরের চেঞ্জেস গুলোকে ডিটেক্ট করে কাউন্টার করতে পারে। কিন্তু সেসব এর দাম সাধারণত বেশ বেশি হয়.

একটা খুব কমন সমাধান যা প্রায় সব মোবাইল প্রস্তুতকরক রা তাদের দামি মোবাইল এ ব্যবহার করে তা হলো অপটিক্যাল ইমেজ stabilization বা সংক্ষেপে OIS . সাধারণত সেক্ষেত্রে ক্যামেরা এর লেন্স তা কতগুলো স্প্রিং এবং ইলেক্ট্রোমেগনেট এর মধ্যে ঝুলে (সাসপেন্ডেড) থাকে। এই পুরো সিস্টেম তা হাতের ঝাকুনি সেন্স করে তার এগেইনস্ট এ কম্পেন্সেট করে. সুতরাং মোশন ব্লার এর মোকাবিলা খুব ভালো ভাবে করতে পারে। কিন্তু এর ক্ষমতা খুবই সীমিত। OSS সাধারণত ১-২ ডিগ্ৰী এর মধ্যে ভাইব্রেশন কে কম্পেন্সেট করতে পরে. তার বেশি না. এবং উল্টে এটা “জেলো ইফেক্ট” বলে একটা জিনিস ইন্ট্রোডিউস করে যেরকম নিচের ভিডিও তে গুগল অফিস এ দেখা যাচ্ছে

এছাড়া আছে EIS বা ইলেকট্রনিক ইমেজ stabilization যেটা ওপরের কাজ গুলোই সম্পূর্ণ সফটওয়্যার এর সাহায্যে করতে চেষ্টা করে. কিন্তু খুব স্বাভাবিক ভাবেই মোবাইল এর প্রসেসর এ সেটা রিয়েল-টাইম এ compute করা সম্ভব হয়ে ওঠেনা।

গুগল এর রাস্তা:

গুগল ঠিক করেছে তাদের দুই রাস্তারই ই ভালো জিনিস গুলো চাই. কিভাবে? তিন স্টেজ এ.
স্টেজ ১ এ গুগল ছবিতে মোশনanalyze করে এবংgyroscope এর ডাটা বার করে যাতে সঠিক ভাবে “ইউসার” তার ক্যামেরাটা কোনদিকে ঘোরাচ্ছে সেটা আন্দাজ করা যাই.
স্টেজ ২ এ মোশন ফিল্টারিং, মেশিন লার্নিং এবং সিগন্যাল প্রসেসিং এর সাহায্যে প্রেডিক্ট করে ব্যবহারকারী কতটা কোনো বিশেষ দিকে ঘোরাচ্ছে ক্যামেরা।
স্টেজ ৩ এ ফ্রেম সিন্থেসিস করা হয়.
সংক্ষেপে

এবারে বিশদে।

১. মোশন এনালাইসিস:
এই স্টেজ এ গুগল, ফোন এর হাই স্পিড gyroscope ব্যবহার করে ভিডিও রেকর্ডার এর হাতের ঘূর্ণন কোন এক্সিস এ কত সেটা আন্দাজ করে. মোশন ২০০H z এ এস্টিমেট করার জন্যে CMOS এর প্রত্যেক তা scanline এর জন্যে গুগল একটা করে ডেন্স মোশন ভেক্টর নির্ধারণ করতে পারে।এই করেই অবশ্য গুগল ক্ষান্ত থাকেনা।তারা এর সঙ্গে ফোকাস অ্যাডজাস্টমেন্ট এবং OIS এর মুভমেন্ট এর তথ্য ও কালেক্ট করে যাতে তার সাথে ক্যালকুলেশন এবং মুভমেন্ট প্রেডিকশন ক্যালিব্রেটে করা যাই. ১ মিলিসেকেন্ড এর মিসক্যালিব্রেশন এই সব চেষ্টাই জল ঢেলে দেয়ার জন্যে যথেষ্ট।
২. মোশন ফিল্টারিং:
খুব সহজ ভাষায় আগের সমত তথ্য সহকারে এই স্টেজ এ গুগল ব্যবহার করি এর “ইনটেনশন” বা ইচ্ছে “প্রেডিক্ট” করে. একটু জটিল ভাষায় বললে, এই স্টেজ এ ক্যামেরা এর সেন্সর থেকে আসা আসল মোশন তথ্য এর সাথে আগের ধাপে আসা তথ্য অনুসারে বানানো মডেল মিলিয়ে একটা ভার্চুয়াল ক্যামেরা মোশন তৈরী করে. যা সাহায্য করে “ফিউচার ফ্রেম এর লুকহেড” এ.
সাদা বাংলায় গুগল কোন ছবি বা ভিডিও তা পরবর্তী কি হতে যাচ্ছে (আমাদের হাত কোন দিকে কাঁপবে) তা আগে থেকে প্রেডিক্ট করছে। এই পদ্ধতি OIS এর ক্ষেত্রে কোনোদিন সম্ভব নয়.
৩. ফ্রেম সিনথেসিস:
শেষ এই স্টেজ এ গুগল অনেক কোষে বার করে আগের দুই ধাপের তথ্য অবলম্বনে যে কি কি ডিস্টর্শন আস্তে পারে আমাদের পরবর্তী কয়েক মিলিসেকেন্ড এর হাতের প্রেডিক্টেড কাঁপুনি এর জন্যে।সেই হিসেবে আমাদের CMOS দিয়ে আসা ছবিকে মেশ এ ডিভাইড করে প্রত্যেক তা ফ্রেম কে কারেকশন এলগোরিদম এর মধ্যে দিয়ে পাস করায় 
নিচে দেখা যাচ্ছে

এবং এই পুরো পদ্ধতি তা Pixel ২ এর ক্যামেরা তে realtime এ হয়ে থাকে ভিডিও তোলার সময়.

মজার বিষয়?
গুগল এর পুরো পদ্ধতিটার মধ্যে সবচেয়ে অসাধারণ কার্য টা হচ্ছে এদের লুকহেড মোশন ফিল্টারিং, বা সহজে বললে ভবিষ্যৎ এর আন্দাজ করে মোশনে র ফিল্টারিং করা. গুগল এর এলগোরিদম আমাদের ছোটোখাটো wrist মোশন, হাতের নড়াচড়া থেকে মোশন প্যাটার্ন আন্দাজ করে এবং তা থেকে ভবিষ্যতে ওর ক্যামেরা কি কি ছবি দকেহতে পারে তার সব ছবি নেই. সেই সব ছবি (অতীত এন্ড ভবিষ্যৎ) মিশিয়ে তৈরী করে ভিডিও। যাতে অতীত এবং ভবিষ্যৎ এর অবজেক্ট প্লেসমেন্ট থেকে প্রেডিক্ট করে বর্তমানে অবজেক্টটির কোথায় থাকা উচিত সেটা এস্টিমেট করে মোশন blur এ সাথে মোশন এর স্পিড ক্যালকুলেট করে accurate অবজেক্ট প্লেসমেন্ট করা যায়। 
আবার, কিকরে?
বিশদে বললে,

প্রথম ধাপে আসল ক্যামেরা ইমেজ এ গাউসিয়ান ফিল্টার ব্যবহার করে ৩ স্টেপ এর ছবি fuse করা হয়. প্রত্যেক মুহূর্ত এর অতীত,বর্তমান এবং perceived ভবিষ্যৎ এর.
ছবির কোয়ালিটি আরো ভালো করার জন্যে গুগল এর মেশিন লার্নিং এলগোরিদম আমাদের ক্যামেরা এর noisy motion ডাটা থেকে শুধু ডাইরেকশন না, আমাদের ইনটেনশন ক্যালকুলেট করে। সেই প্রেডিক্টেড ইন্টেনডেড মোশন এর ওপরে ফিল্টার এপলাই করা হয়. যেমন যদি তারা প্রেডিক্ট করে যে ক্যামেরা হরাইজন্টাল প্যান করছে তাহলে যেকোনো রকমের ভার্টিকাল subtle মোশন কে ক্যামেরা রিজেক্ট এবং কাউন্টার করবে।

ফলাফল?

এই ভিডিও টাই ক্যামেরা ম্যান খালি হাতে ফোন ধরে(দুটো ফোন একটা মাউন্ট এ বসিয়ে) ওই লোক তার সঙ্গে লাফাচ্ছে বালির স্তুপ এর ওপরে। বা দিকের টাই উপরোক্ত পদ্ধতি ছাড়া ফলাফল, এবং দেন দিকের টাই উপরোক্ত পদ্ধতিসহ ফলাফল।

ওহ হ্যা। আমি নিজেও অসংখ্য ভিডিও তুলেছি এবংএটা নোটিশ করেছি আমার ওয়ান প্লাস ওয়ান, বন্ধুর iPhone ৮ এবং ওয়ান প্লাস ৫ এর সঙ্গেও (এবং আরো অনেক কটা ফোন এর সঙ্গেও যদিও).

এলগোরিদম গুলোর ব্যাখ্যা বাংলায় কিকরে ফর্মুলা লিখে করে আমার জানা নেই. তাই আজ ঘুমোতে গেলাম। কিন্তু প্রশ্ন থাকলে আমার ক্ষমতা অনুসারে উত্তর দেয়ার চেষ্টা করবো।
আরো মজার মজার জিন্স জানতে চাইলে এনাকে ফলো করতে পারেন

https://scholar.google.com/citations?hl=en&user=CpkBapgAAAAJ&view_op=list_works&sortby=pubdate

উপসংহার এবং ডিসক্লেইমার:

ট্যাগিত (https://www.facebook.com/groups/thisiscalcomm/permalink/1613806425347134/?comment_id=1614026638658446&comment_tracking=%7B%22tn%22%3A%22R9%22%7D) উক্তি থাকা সত্বেও বলতে চাই আমি কোনো ভাবেই TCS এর সাথে যুক্ত নোই. আমি এক সামান্য গরিব দুঃখী এবং বর্তমানে বেকার ছাত্র। (ছাত্র বলেই এরম করে সবাই TCS এর নাম নিয়ে হ্যাটা করে). আমি শুধু এক নন-প্রফিট organization র সাথে গরু খোঁজার কাজে যুক্ত আছি আমার ছাত্র বৃত্তি এর কাজ বাদে। সেখানেও আমার কাজ ছদ্ম, প্রভাবিত এবং মিশ্র বাস্তব নিয়ে (প্রায় স্বপ্ন এ বলতে পারেন). আমরা browser বানাই :(
এখনো আমাদের ফক্স কে ভালোবেসে কেউ ব্যবহার করে থাকলে তার URL বার এ about:credits টাইপ করে এন্টার মারলে R এর সেকশন এ দ্বিতীয় বোধয়।

কিন্তু তা বলে এরকম করে নিরীহ বেকার ছাত্র কে হ্যাটা করার প্রতিবাদ জানিয়ে গেলুম।

পুনশ্চ : আমার এরম পাগলামি আরো পড়তে চাইলে আমার ব্লগ ফলো করতে পারেন blog.rabimba.com এ।

উপসংহার এবং ডিসক্লেইমার:

ট্যাগিত উক্তি থাকা সত্বেও বলতে চাই আমি কোনো ভাবেই TCS এর সাথে যুক্ত নোই. আমি এক সামান্য গরিব দুঃখী এবং বর্তমানে বেকার ছাত্র। (ছাত্র বলেই এরম করে সত্যি TCS এর নাম নিয়ে হ্যাটা করে). আমি শুধু এক নন-প্রফিট অর্গানিজশ্নে র সাথে গরু খোঁজার কাজে যুক্ত আছি আমার ছাত্র বৃত্তি এর কাজ বাদে। সেখানেও আমার কাজ ছদ্ম, প্রভাবিত এবং মিশ্র বাস্তব নিয়ে (প্রায় স্বপ্ন এ বলতে পারেন). আমরা browser বানাই :( এখনো আমাদের ফক্স কে ভালোবেসে কেউ ব্যবহার করে থাকলে তার URL বার এ about:credits টাইপ করে এন্টার মারলে R এর সেকশন এ দ্বিতীয় বোধয়। কিন্তু তা বলে এরকম করে নিরীহ বেকার ছাত্র কে হ্যাটা করার প্রতিবাদ জানিয়ে গেলুম।