প্রকল্প সম্পর্কে
UniPlateTracker হল একটি স্ব-হোস্টেড, ব্যক্তিগত ড্যাশবোর্ড যা UniFi Protect ক্যামেরা দ্বারা ক্যাপচার করা লাইসেন্স প্লেট ট্র্যাক করার জন্য। এটি ওয়েব훅ের মাধ্যমে UniFi NVR থেকে পুশ করা ডিটেকশন ইভেন্ট গ্রহণ করে, সেগুলোকে একটি PostgreSQL ডাটাবেসে রেকর্ড করে, এবং সেগুলোকে দেখার, অনুসন্ধান করার এবং যানবাহন কার্যকলাপ বিশ্লেষণ করার জন্য একটি ওয়েব ইন্টারফেসের মাধ্যমে উপস্থাপন করে। থাম্বনেইল এবং ভিডিও ফাইল ব্যবহারকারীর নিজস্ব সার্ভারে থাকে, যেখানে একমাত্র বর্ণিত বাহ্যিক ডেটা উৎস হল ঐচ্ছিক UK DVLA লুকআপ।
এটি কী করে
- রিয়েল-টাইম ইভেন্ট প্রসেসিং: লাইসেন্স প্লেট ডিটেকশন UniFi Protect ওয়েব훅 থেকে আসে এবং তাৎক্ষণিকভাবে প্রসেস করা হয়।
- অন-ডিমান্ড ভিডিও ক্যাপচার: একটি স্বতন্ত্র Node.js ওয়ার্কার প্রতিটি ডিটেকশনের জন্য ক্যামেরার RTSP স্ট্রিম থেকে একটি সংক্ষিপ্ত ক্লিপ রেকর্ড করে, যেখানে প্রি- এবং পোস্ট-ইভেন্ট বাফারিং একটি পৃথক বাফার ম্যানেজার প্রসেস দ্বারা পরিচালিত হয়।
- ঐচ্ছিক DVLA ইন্টিগ্রেশন (UK): মেক, কালার, ট্যাক্স এবং MOT স্ট্যাটাসের মতো যানবাহন বিবরণ ফ্রেচ করে। একটি আন্তর্জাতিক মোড UK-specific ফিচারগুলো নিষ্ক্রিয় করে যাতে অ্যাপটি অন্যান্য অঞ্চলে চলতে পারে, যদিও ENABLE_INTERNATIONAL_API কনফিগার না করা থাকলে নন-UK প্লেটগুলো "Unknown" দেখাবে।
- অ্যাডমিন ড্যাশবোর্ড: চার্ট এবং ব্যবহার পরিসংখ্যান সহ একটি সুরক্ষিত অ্যাডমিন এলাকা, পাশাপাশি হায়ারার্কিকাল অ্যাডমিন অ্যাকাউন্ট যেখানে প্রাথমিক অ্যাডমিন অন্যান্য অ্যাডমিনের জন্য অ্যাক্সেস মঞ্জুর বা প্রত্যাহার করতে পারে; সেই অ্যাকশনগুলো পর্যালোচনার জন্য একটি অডিট ট্রেইলে লেখা হয়।
- ডিটেকশন টেবিল: ঘন এবং সর্টেবল, দ্রুত পড়ার জন্য তৈরি। সর্টিং এবং ফিল্টারিং ডাটাবেসে চলে, তাই অর্ডারিং শুধুমাত্র বর্তমান পৃষ্ঠার জন্য নয়, পুরো রেজাল্ট সেটের জন্য প্রযোজ্য, এবং টেবিলটি সরু স্ক্রিনে কার্ড লিস্টে রিফ্লো হয়।
- স্ট্যাটাস হাইলাইটিং: বৈধ MOT সহ ট্যাক্সড যানবাহনগুলো visually quiet থাকে, যখন expired, untaxed এবং SORN যানবাহনগুলো হাইলাইট করা হয়; "no DVLA record" একটি স্বতন্ত্র ফাঁপা, ড্যাশড চিপ হিসেবে দেখানো হয় যাতে অনুপস্থিত তথ্য একটি clean result হিসেবে না পড়ে।
- অ্যাক্সেসিবিলিটি: লেবেলযুক্ত কন্ট্রোল, কীবোর্ড-অপারেবল সর্টিং এবং পেজিং, টেবিলের aria-sort, এবং prefers-reduced-motion সাপোর্ট। প্রজেক্টটি বলেছে যে এটিতে zero violations সহ একটি অডিট করা হয়েছে। লাইট এবং ডার্ক মোড সিস্টেম প্রেফারেন্স অনুসরণ করে।
টেক স্ট্যাক
Next.js 16 (App Router) with TypeScript, React 19, Tailwind CSS v4 এবং shadcn/ui; Next.js API routes alongside a standalone Node.js worker/buffer manager; PostgreSQL for storage; FFmpeg for video processing; integrations with UniFi Protect webhooks and the DVLA API. যেহেতু Tailwind v4 এর থিম CSS থেকে আসে, তাই tailwind.config.ts নেই — ডিজাইন টোকেন, প্লেট এবং স্ট্যাটাস স্টাইল src/app/globals.css এর @theme ব্লকে বাস করে।
ডিপ্লয়মেন্ট
ডকুমেন্টেড বেসলাইন হল Debian 12 with a UVC-AI-Pro camera (device version 5.1.57) এবং UniFi Protect 9.4.19, যেখানে বলা হয়েছে যে অন্যান্য কনফিগারেশনও কাজ করার কথা। দুটি পদ্ধতি বর্ণিত আছে:
- ম্যানুয়াল ইনস্টলেশন: Node.js 20+, PostgreSQL এবং FFmpeg ইনস্টল করুন; উদাহরণ এনভায়রনমেন্ট ফাইলটিকে .env.local-এ কপি করুন এবং POSTGRES_URL এবং SESSION_SECRET এর মতো মান পূরণ করুন; যদি ভিডিও ক্যাপচার এনাবল করা থাকে তবে বাফার এবং ফাইনাল ক্যাপচার ডিরেক্টরি তৈরি করুন; অ্যাপ এবং ওয়ার্কার উভয়ের জন্য ডিপেনডেন্সি ইনস্টল করুন; প্রথম অ্যাডমিন ইমেল তৈরি করতে এবং নিবন্ধন করতে npm run db:init চালান; অ্যাপটি বিল্ড করুন এবং স্টার্ট করুন, ঐচ্ছিকভাবে PM2 দিয়ে এটিকে পারসিস্টেন্ট রাখুন।
- Docker: কম্পোজ ফাইল এবং এনভায়রনমেন্ট টেমপ্লেট ডাউনলোড করুন, এটিকে .env.local-এ রিনেম করুন, POSTGRES_URL, SESSION_SECRET এবং NEXTAUTH_URL (localhost এর পরিবর্তে সার্ভারের নেটওয়ার্ক IP ব্যবহার করে) সরবরাহ করুন, ডাটাবেস ইনিশিয়ালাইজ করতে এবং প্রথম অ্যাডমিন তৈরি করতে একটি one-off কন্টেইনার চালান, তারপর Docker Compose দিয়ে পুল করুন এবং স্টার্ট করুন। ওয়েব ইন্টারফেসটি পোর্ট 3000-এ এবং ওয়েব훅 এন্ডপয়েন্টটি পোর্ট 4000-এ ডকুমেন্ট করা হয়েছে।
UniFi Protect-এ, একটি অ্যালার্ম Settings > System > Other Settings > Alarm Manager-এর অধীনে তৈরি করা হয়, যা unknown এবং known vehicle-এর জন্য ID > LPR-এ ট্রিগার হয়, LPR ক্যামেরাগুলোর জন্য স্কোপ করা হয়, এবং অ্যাপের /webhook URL-এ পয়েন্ট করা হয়, যেখানে থাম্বনেইল এনাবল করা থাকে।
README থেকে ট্রাবলশুটিং নোট
ডিটেকশনগুলো "No clip" দেখাতে পারে কারণ ডিটেকশন এবং ক্যাপচার আলাদা পথ: ওয়েব훅টি রো লেখা while the worker records from RTSP, তাই ক্যাপচার ব্যর্থ হতে পারে while detections keep arriving. প্রস্তাবিত চেকগুলো হল VIDEO_FINAL_CAPTURE_PATH-এ newest file date, whether FFmpeg is still installed and on its expected path, whether camera credentials or the RTSP URL are still valid, whether both background processes are alive, এবং whether the user running the app can read the capture directory. একটি ড্যাশড "No clip" টাইল মানে একটি ক্লিপ আশা করা হয়েছিল কিন্তু অনুপস্থিত, while a plain camera icon means the detection never referenced one. Video and thumbnail requests return 404 unless filenames contain only letters, digits, dots, hyphens and underscores with .mp4 or .jpg extensions, এবং any path that changes when normalised is refused, so directory traversal fails rather than escaping the capture directory. Vehicle details showing "Unknown" mean the DVLA holds no record for that registration or the lookup failed.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.