এই নিবন্ধে, আমি রাস্তার সম্ভাব্য বিপদ সনাক্ত করতে এবং সংঘর্ষ প্রতিরোধ করতে একটি উন্নত কম্পিউটার ভিশন অ্যালগরিদম সহ সাইকেল চালকদের জন্য একটি স্মার্ট ক্যামেরা তৈরি করার আমার নিজের অভিজ্ঞতা শেয়ার করতে চাই৷ আমি নীচে স্ক্র্যাচ থেকে প্রোটোটাইপিং এবং ভিডিও ডেটা সংগ্রহের পুরো প্রক্রিয়াটি সংক্ষেপে বর্ণনা করেছি। এটি এমবেডেড এবং মেশিন লার্নিং ইঞ্জিনিয়ার উভয়ের জন্যই আকর্ষণীয় হতে পারে। আমরা শুরু করার আগে একটু স্পয়লার: সংগৃহীত ডেটাসেটটি পরে ওপেন সোর্স করা হয়েছিল।
আমি একজন আগ্রহী সাইক্লিস্ট যার 30 বছরের অভিজ্ঞতা আছে, তাদের মধ্যে 20 জন পাবলিক রাস্তায়। একবার আমি রাস্তায় একটি ট্র্যাফিক দুর্ঘটনায় পড়েছিলাম: পাশ থেকে একটি গাড়ি আমার বাইকের উপর দিয়ে চলে গেল। সৌভাগ্যবশত, আমি সামান্য ক্ষত এবং মোচ দিয়ে পালিয়ে গিয়েছিলাম। তাই, আমি বিশেষ করে পাবলিক রাস্তায় সাইকেল চালকদের নিরাপত্তার সমস্যাগুলো বুঝি।
সমস্যার একটি সমাধান হল ঘটনা ক্যাপচার করার জন্য বাইক ক্যামেরা ব্যবহার করা। রাস্তায় সাইকেল চালানো, যেমনটি আমরা জানি, আপনার দৃষ্টিভঙ্গি ক্যাপচার করে এমন একটি ক্যামেরা দিয়ে সজ্জিত হলে নিরাপদ হয়ে ওঠে৷ ড্রাইভারের সাথে ঝগড়ার ক্ষেত্রে, ফুটেজ থাকা একটি অতিরিক্ত প্রতিরক্ষামূলক স্তর হিসাবে কাজ করতে পারে। প্রমাণ ব্যতীত, একজন অনৈতিক চালক দায় অস্বীকার করতে পারে, তবে সাইকেল চালকদের জন্য একটি ক্যামেরা থাকা এমন পরিস্থিতিতে জীবন রক্ষাকারী হিসাবে কাজ করতে পারে। যুক্তরাজ্যে, নেক্সটবেস নামে একটি ওয়েবসাইটও রয়েছে যা পুলিশের কাছে অ্যাকশন ক্যামেরা ফুটেজ জমা দিতে, প্রক্রিয়াটিকে সুগম করে এবং জটিলতাগুলি হ্রাস করতে সহায়তা করে।
অন্য কথায়, আপনি ক্যামেরায় দুর্ঘটনাটি ধরতে পারেন, তবে আপনাকে অবশ্যই স্বীকার করতে হবে, একটি বিপজ্জনক পরিস্থিতি এড়ানো সর্বদা ভাল। আমি যখন প্রকল্পটি শুরু করি তখন রাস্তায় বিপজ্জনক পরিস্থিতি প্রতিরোধের জন্য কোনও সক্রিয় সমাধান ছিল না। তাই আমি একটি ক্যামেরা দিয়ে আমার স্মার্ট সাইকেল ব্যাকলাইট তৈরি করার সিদ্ধান্ত নিয়েছি। প্রকল্পের লক্ষ্য ছিল সাইক্লিস্টদের মধ্যে মৃত্যু এবং আঘাত কমানো।
মূলত, ডিভাইসটিকে একটি উন্নত কম্পিউটার ভিশন অ্যালগরিদম দিয়ে সেট করার পরিকল্পনা করা হয়েছিল, যা প্রায়ই মিডিয়াতে "কৃত্রিম বুদ্ধিমত্তা" হিসাবে উল্লেখ করা হয়, যা সাইকেল চালকদের জন্য রাস্তায় সম্ভাব্য বিপদ সনাক্ত করতে পারে। আমাকে সহজ কথায় ধারণাটি ব্যাখ্যা করতে দিন: যদি সফ্টওয়্যারটি বিপদ সনাক্ত করে, ডিভাইসটি ড্রাইভারদের দৃষ্টি আকর্ষণ করার জন্য একটি ঝলকানি আলো নির্গত করে। উপরন্তু, নিরাপত্তা ব্যবস্থা সংঘর্ষের আগে গাড়ির পিছনে একটি উচ্চ শব্দ নির্গত করে, এটি প্রতিরোধ করতে সাহায্য করে।
আমার অবজেক্ট ডিটেকশন নিউরাল নেটওয়ার্ক (কম্পিউটার ভিশন অ্যালগরিদমের অংশ, উপলব্ধির জন্য ব্যবহৃত) প্রশিক্ষণ দেওয়ার জন্য, আমাকে রিয়ার-ভিউ ক্যামেরা দ্বারা ক্যাপচার করা পাবলিক রাস্তা থেকে বিভিন্ন দৃশ্যের একটি বড় ডেটাসেট খুঁজে বের করতে হবে। দুর্ভাগ্যবশত, আমি যখন শুরু করি তখন এই ধরনের ওপেন-সোর্স ডেটাসেটগুলি ওয়েবে উপলব্ধ ছিল না।
ড্রাইভিং আচরণের সম্পূর্ণ অধ্যয়ন পরিবহণ প্রকৌশলে অত্যন্ত উপযোগী, পরিসংখ্যানগত বিশ্লেষণের জন্য ডেটা সংগ্রহ, ড্রাইভিং মডেল সনাক্তকরণ এবং মডেলিং পরামিতিগুলির অনুমানের মতো বিভিন্ন উদ্দেশ্যে পরিবেশন করা। সড়ক নিরাপত্তা বিশ্লেষণ, ট্র্যাফিক সিমুলেশনের জন্য মাইক্রোস্কোপিক মডেল, পূর্বাভাস এবং নিয়ন্ত্রণ এবং উন্নত ড্রাইভিং সহায়তা ব্যবস্থার জন্য নিয়ন্ত্রণ যুক্তি সহ বিভিন্ন ক্ষেত্রে ডেটা এবং মডেলগুলি প্রয়োগ করা যেতে পারে।
এগিয়ে চলছি, এটা বলা উচিত যে এই প্রকল্পে কাজ করার সময় আমি 2021 সালে প্রথম MVP ব্যবহারকারীদের রিয়ার-ভিউ ক্যামেরা দ্বারা ক্যাপচার করা ইউক্রেনীয় পাবলিক রাস্তা থেকে ডেটাসেট তৈরি করেছি।
পাবলিক ডোমেনে এই ধরনের ডেটাসেট থাকার সর্বজনীন এবং সামাজিক গুরুত্ব সম্পূর্ণরূপে বোঝার জন্য, আমি এখানে আমার কাজের ফলাফল আপলোড করেছি।
দুর্ঘটনার পূর্বাভাস দেওয়া নিউরাল নেটওয়ার্ক শেখানোর জন্য আমাকে প্রচুর ডেটা সংগ্রহ করতে হয়েছিল। এই ক্ষেত্রে, আমার প্রথম বিটা পরীক্ষকদের তাদের রাইড রেকর্ড করার জন্য ক্যামেরা প্রোটোটাইপ তৈরি করতে হবে। সৌভাগ্যবশত, আমার সাইক্লিং কমিউনিটি নেটওয়ার্কে অনেক নিরাপত্তা কর্মী রয়েছে। আমার প্রথম ব্যবহারকারীদের কাছে সেগুলি হস্তান্তর করার জন্য কয়েকটি ডিভাইস একত্রিত করা বাকি ছিল।
আমাকে সংক্ষেপে উন্নয়নশীল প্রক্রিয়া বর্ণনা করতে দিন এবং নীচে নির্দিষ্ট প্রযুক্তিগত সমাধান বেছে নেওয়ার যুক্তি ব্যাখ্যা করুন।
হার্ডওয়্যার কনফিগারেশন: কেসটি 3D-মুদ্রিত ছিল। রাস্পবেরি পাই 3B+ কম্পিউটার মডিউলটিকে প্ল্যাটফর্ম হিসাবে বেছে নেওয়া হয়েছিল এবং কেসটিকে কমপ্যাক্ট এবং হালকা রাখার জন্য কাস্টম PCB তৈরি করা হয়েছিল।
আমি ক্যামেরার জন্য একটি স্ট্যান্ডার্ড রাস্পবেরি পাই IMX219 সেন্সর ব্যবহার করেছি, কিন্তু আমি একটি 120-ডিগ্রি লেন্স নিযুক্ত করেছি। রাস্তায় আরও ভাল দৃশ্যমানতার জন্য উচ্চ-ক্ষমতাসম্পন্ন LED লাইট এবং একটি লাল রঙের লেন্স (এছাড়াও 3D-প্রিন্টেড) যোগ করা হয়েছে।
আমি ডিভাইসে নিউরাল নেটওয়ার্ক চালানোর জন্য Google Coral Edge TPU (ফটো অন্তর্ভুক্ত), একটি কম খরচে এবং শক্তিশালী 4 TOPs নিউরাল এক্সিলারেটর ব্যবহার করেছি। TPU USB এর মাধ্যমে সংযুক্ত ছিল।
এই সমস্ত ইলেকট্রনিক্স সর্বোচ্চ লোডে (ভিডিও রেকর্ডিং, রিয়েল-টাইম নিউরাল নেটওয়ার্ক অপারেশন, এবং LED ফ্ল্যাশিং) 7-8W ব্যবহার করে। 4-5 ঘন্টা অপারেশন নিশ্চিত করতে একটি 8Ah লি-আয়ন ব্যাটারি (কেসিংয়ের ভিতরের ফটোগ্রাফ অন্তর্ভুক্ত) ব্যবহার করা হয়েছিল।
ওএসের জন্য, আমি স্ট্যান্ডার্ড রাস্পবিয়ান ব্যবহার করেছি কারণ এটি আরও ভাল সমর্থিত এবং আমার প্রয়োজনীয় সমস্ত ড্রাইভার সহজেই কোনও সমস্যা ছাড়াই ইনস্টল করা হয়েছিল। OS বুট করার পরে আমি যে প্রধান কোডটি লেখার সিদ্ধান্ত নিয়েছিলাম তা ছিল C++ এ।
আমি এটি দিয়ে শুরু করার পরামর্শ দিই না - পরীক্ষার উদ্দেশ্যে, আমি বিশ্বাস করি পাইথন নতুনদের জন্য একটি ভাল বিকল্প হতে পারে। যাইহোক, আপনি যদি রাস্পবেরি পাইতে সর্বাধিক হার্ডওয়্যার ক্ষমতা সহ সমস্ত সীমিত সংস্থানগুলিকে কার্যকরভাবে এবং সঠিকভাবে নিয়ন্ত্রণ করতে চান তবে এটি C/C++ এ লেখার মূল্যবান।
এই প্রজেক্টে আমার করা সবচেয়ে আকর্ষণীয় সমাধানগুলির মধ্যে একটি হল OTA (ওভার-দ্য-এয়ার আপডেট) প্রক্রিয়া এবং ডিভাইসগুলি থেকে ভিডিও রেকর্ডিং সংগ্রহ করার পদ্ধতি।
প্রক্রিয়াটি এইরকম দেখায়: যখন একজন ব্যবহারকারী একটি যাত্রা শেষ করে এবং বাড়িতে আসে, তখন তারা একটি USB ওয়াইফাই অ্যাডাপ্টার সন্নিবেশ করে, যা হোম ওয়াই-ফাইয়ের সাথে সংযোগ করে এবং ডিভাইসটি সিঙ্ক্রোনাইজেশন শুরু করে।
সমস্ত ভিডিও Google ড্রাইভের মাধ্যমে সিঙ্ক্রোনাইজ করা হয়েছিল - আমি প্রতিটি ডিভাইসের জন্য একটি পৃথক Google অ্যাকাউন্ট তৈরি করেছি৷ আমার ক্ষেত্রে গুগল ড্রাইভের অনেক সুবিধা রয়েছে: আমি গুগল ড্রাইভ ওয়েব ইন্টারফেসের মাধ্যমে তাৎক্ষণিকভাবে ভিডিওগুলি দেখতে সক্ষম হয়েছি, ম্যানুয়ালি মুছে ফেলা বা নতুন ফাইল যুক্ত করা সহজ, এবং শেষ পর্যন্ত নয়, এটি আমার পরীক্ষার জন্য বিনামূল্যে ছিল ( প্রতিটি অ্যাকাউন্টের জন্য 20GB পর্যন্ত)। ( Google , অনুগ্রহ করে, খারাপ হবেন না, আমার নবজাতক স্টার্টআপে মাত্র চারটি MVP ছিল)।
H.264 ভিডিও এনকোডিং ব্যবহার করে একটি Google ড্রাইভে শত শত ভিডিও ধারণ ক্ষমতার শেষ ছাড়াই সাহায্য করে৷
আমাকে OTA প্রক্রিয়া বর্ণনা করতে দিন: একটি নতুন ফার্মওয়্যার কম্পাইল করার পরে, আমি এটি একটি Google ড্রাইভে আপলোড করি। পরের বার Google ড্রাইভের সাথে সিঙ্ক্রোনাইজ করার সময়, একটি ডিভাইস নতুন ফার্মওয়্যার সংস্করণ ডাউনলোড করে এবং পুরানোটিকে প্রতিস্থাপন করে।
আমি এর জন্য একটি সাধারণ জিড্রাইভ ইউটিলিটি ব্যবহার করেছি। একটি নতুন ফার্মওয়্যার ফাইল আপলোড করতে আমি যে কোডটি ব্যবহার করি তা এখানে:
gdrive upload -p “gdrive folder id” “file”
নীচে আমি একটি ডিভাইসে নতুন ফার্মওয়্যার লোড করার জন্য কোডের একটি লাইন দিচ্ছি:
gdrive update “id” “file”
ফার্মওয়্যার সংস্করণ চেক করার পরে, ভিডিও সিঙ্ক্রোনাইজেশন ঘটে এবং সমস্ত নতুন রেকর্ডিং Google ড্রাইভে আপলোড হয়।
এইভাবে ভিডিওগুলি একটি ডিভাইস থেকে ডিস্কে ডাউনলোড হয়:
gdrive sync upload “local folder” “gdrive folder id”
দিনে একবার, আমি আমার স্থানীয় ফোল্ডারগুলির সাথে সমস্ত Google ড্রাইভ সিঙ্ক্রোনাইজ করার জন্য আমার সার্ভারে একটি স্ক্রিপ্ট চালাতাম এবং সমস্ত নতুন ভিডিও ডাউনলোড করেছিলাম৷
gdrive sync download “gdrive folder id” “local folder”
এইভাবে, কয়েক মাস কাজ করার পরে, আমার ডিভাইসগুলি লেবেলিংয়ের জন্য প্রস্তুত 200+ ভিডিও সংগ্রহ করেছে।
ভিডিওটি সংগ্রহ করার পরে, আমি এটি প্রক্রিয়া করেছি, এটি ফিল্টার করেছি এবং ডেটাসেট তৈরি করেছি। তারপর আমি ম্যানুয়াল লেবেলিংয়ের জন্য একটি ছোট দল সংগ্রহ করেছি। দলটিতে 4 জন লোক অন্তর্ভুক্ত ছিল যারা প্রতিটি ফটোতে লেবেল দিয়েছে।
অবশেষে, যেমন আগে উল্লেখ করা হয়েছিল, আমি ওপেন সোর্সে ডেটাসেট দিয়েছি। আপনি লিঙ্কের মাধ্যমে এটি খুঁজে পেতে পারেন: GitHub লিঙ্ক।
আমি বিশ্বাস করি যে ওপেন-সোর্স ডেটাসেটগুলি গবেষণা সম্প্রদায়ের জন্য একটি মূল্যবান সম্পদ, এবং তারা সড়ক নিরাপত্তার ক্ষেত্রে নতুন অ্যালগরিদম এবং মডেলগুলির বিকাশে ব্যাপকভাবে অবদান রাখতে পারে৷