تشخیص پلاک خودرو در یک تصویر

پروژه Course object

پیدا کردن پلاک خودرو

۱. چکیده:

با توجه به ازدیاد خودرو های شخصی , مدیریت و کنترل این حجم از خودرو امری بسیار زمان بر و همچنین پرهزینه میباشد.به همین دلیل ارائه ی راه حلی مناسب برای کاهش این هزینه های زمانی و مالی , امری بسیار مهم و ضروری میباشد.
در این پروژه به پیدا کردن و خواندن پلاک خودرو در تصویر به صورت اتوماتیک پرداخته شده است.

۲. مقدمه:

پلاک خودرو مهم ترین عنصری است که در این پروژه با آن در ارتباط هستیم.پلاک خودرو در ایران با اندازه تقریبی ۱۲ اینچ طول و ۶ اینچ عرض(۱) تولید و بر روی خودروها نصب میگردد.در این پروژه برای پیدا کردن پلاک خودرو از بینایی ماشین استفاده شده است به این صورت که با استفاده از فیلترها و عملگرهای مورفولوژیکی پلاک خودرو پیدا شده و سپس با استفاده از یادگیری ماشین دیتاستی که از اعداد فارسی داریم را می آموزیم و بعد از این مراحل نوبت به قطعه قطعه کردن عکس و فرستادن آن به ماژول ماشین لرنینگ میباشد که اعداد را بخواند و برگرداند.

۳. کارهای مرتبط:

با توجه به مطالعاتی که انجام شد برای پیدا کردن پلاک روش های زیر مطرح هستند و بعضی از آنها قابل استفاده و بعضی دیگر بلا استفاده میباشند که به اختصار به هریک از آنها میپردازیم.
استفاده از رنگ:
در این روش به دلیل خاص بودن رنگ پلاک نسبت به سایر اعضای خودرو میتواند مورد استفاده قرار بگیرد.اما ایراد این روش این است که در صورت تغییر رنگ های جزئی توانایی تشخیص خود را از دست میدهد و عملا بلا استفاده میباشد.و همچنین بعضی از پلاک های خاص مانند خودرو های دولتی که رنگ متفاوتی دارند هم نمی تواند تشخیص دهد.در بعضی موارد خاص نیز که چند ماشین در عکس وجود دارد میتواند دچار مشکل شود و قدرت تشخیص خود را از دست بدهد یا در موارد بهتر زمان پردازش افزایش پیدا کند.
استفاده از یک الگوی خاص در پلاک (تطبیق کلیشه):
در این روش یه الگوی خاص در پلاک پیدا میکنیم در تصویر به دنبال آن میگردیم.مثلا در پلاک های ایرانی یک قسمت آبی در سمت چپ پلاک وجود دارد که در بالای آن یک پرچم وجود دارد.با استفاده از این روش میتوان این الگو را در عکس جستجو کرد.لازم به ذکر است که در این روش عکس ها باید رنگی باشند و همچنین عمومیت ندارد و اگر پلاک خودرو در کشوری دیگر به آن داده شود توانایی پیدا کردن آن را ندارد.(۲)
استفاده از سیستم های چند گزاره ای:
در روشی دیگر به معرفی یک سیستم چند کارگزاره برای تشخیص پلاک خودرو پرداخته است. درسیستم پیشنهادی از سه کارگزار دقت، سرعت و قاضی استفاده شده است. کارگزار دقت با اعمال فیلتر گیبر و کنکاش بیشتر بر روی تصاویری که کارگزار سرعت قادر به بافت پلاک خودرو در آن‌ها نیست، محل پلاک را باسرعت و دقت بالایی پیدا می‌نماید.(۳)
استفاده از لبه یابی:
لبه ها عبارت اند از تغییر ناگهانی روشنایی در تصویر.با استفاده از فیلتر هایی همچون کنی ,پرویت, روبرت ... میتوان لبه ها را پیدا کرد و از آنها برای پیدا کردن پلاک استفاده کرد.(۴)
استفاده از فیلتر ها و عملگرهای مورفولوژیکی:
از این روش در سیستم های بلادرنگ استفاده ی چندانی نمیشود ، چرا که به نسبت وقت گیر است .(۵)

برای خواندن اعداد و ارقام نیز روش های زیر به دست آمده اند:
استفاده از یادگیری ماشین بر روی داده های موجود:
در این روش به یک دیتا ست عظیم نیاز داریم. خوبی این روش این است که قابلیت عمومی سازی دارد یعنی میتوان هم برای پلاک های خارجی استفاده کرد هم برای پلاک های ایرانی.ایرادی هم که به این روش وارد است این است که پیدا کردن دیتاست برای اینکار بسیار سخت میباشد و برای یک نتیجه بسیار خوب نیاز است که یک دیتاست بسیار بزرگ آماده کرد.
استفاده از کلیشه یا الگو:
به دلیل اینکه فونت در تمامی پلاک های ایرانی یکی میباشد میتوان از این روش برای استخراج حروف و اعداد پلاک استفاده کرد.مزایای این روش این است که نیاز به دیتا ست بزرگ ندارد و همچنین میتواند عمومی سازی شود و برای پلاک های کشورهای مختلف مورد استفاده قرار بگیرد.

رو ش های دیگر عبارتند از : استفاده از شبکه عصبی و استفاده از ویژگی اختلاف شدت روشنایی.(۶)
در کل بهتر است به یک روش اکتفا نکنیم و ترکیبی از چند روش را پیاده سازی کنیم به طور مثال با استفاده از فیلتر سوبل ابتدا عکس را لبه یابی کنیم سپس با استفاده از عملگرهای مورفولوژیکی خطوط افقی را از بین ببریم و میان خطوط عمودی را پر کرده و بزرگترین مساحت را پیدا کنیم.

۴. راه حل ارائه شده:

از میان راه حل هایی که برای پروژه پیدا کردیم ما بر آن شدیم که با استفاده از ترکیبی از روش مورفولوژیکی و همچنین لبه یابی به کمک فیلتر روبرت مکان پلاک خودرو در تصویر را پیدا کنیم و با استفاده از دیپ لرنینگ عملیات خواندن ارقام و حروف پلاک را انجام دادیم.

۵. آزمایش ها:

در پیاده سازی این پروژه آزمایش های صورت گرفته بر روی پلاک های فارسی بوده و تلاش بر این بود که بتوان راه حلی ارائه داد که بتواند مناسب پلاک های خودروهای داخلی باشد و نیاز آن را بر طرف کند.
آزمایش های صورت گرفته به شرح زیر میباشد:
در قسمت پیدا کردن پلاک خودرو آزمایش ها بر روی ۴۵ عکس خودرو صورت گرفت که از این ۴۵ عکس ۳۹ عکس قابل شناسایی بودند و در ۶ عکس باقی مانده به دلیل تغییر نورهای ناگهانی یا پس زمینه روشن یا شلوغ بودند که به دلیل وجود داشتن لبه های زیاد قادر به تشخیص پلاک نبودیم.
به عنوان مثال در عکس های زیر توانستیم با استفاده از الگوریتم خود مکان پلاک ها را مشخص کنیم:

پلاک اول

خروجی اول

پلاک دوم

خروجی دوم

ولی در این عکس ها نتوانستیم:
در این عکس به دلیل روشن بودن بیش از حد نتوانستیم پلاک را پیدا کنیم:
عدم تشخصی به علت روشنایی بالا

خروجی

در این عکس نیز به علت اینکه تغییر ناگهانی نور(لبه)زیاد میباشد توانایی تشخیص وجود ندارد:
عدم تشخیص به علت لبه های زیاد

خروجی

در قسمت خواندن پلاک هم با استفاده از دیتاستی که از ارقام و حروف پلاک های ایرانی ساخته بودیم به یادگیری بر روی آنها پرداختیم اما به دلیل کم بودن این دیتاست نتوانستیم به خوبی دیتاهای جدید را بخوانیم بنابراین به جستجو برای افزایش دیتاست کردیم راهی که پیدا کردیم این بود که با استفاده از نویز بر روی عکس ها تعداد دیتاهای خود را زیاد کنیم اما در این روش بعضی از عکس ها به شدت خراب شده و قابل تشخیص نبودند. به همین دلیل و همچنین کم بودن زمان ,وقت بر روی این روش نگذاشتیم و به سراغ یادگیری بر روی همان دیتاهایی که داشتیم رفته و بهترین لایه هایی که بهترین دقت و کمترین مقدار loss را داشتند انتخاب کردیم و در نهایت مجبور شدیم برای بهبود نتیجه تعداد آزمایش های خود را زیادتر کنیم یا دیتاست خود را چندین بار کپی کنیم.

آزمایش هایی هم برای قطعه قطعه کردن پلاک برای خواندن آن در ماژول دیپ لرنینگ پروژه صورت گرفت که هیچ کدام از آن ها موفق نبودند. مثلا آزمایشی بر روی کلیشه یابی صورت گرفت اما به دلیل علم کمی که در این باره داشتیم فرصت در ادامه این آزمایش ها نشد و این آزمایش ها شکست خورد.

۶. تحلیل و تفسیر نتایج:

قسمت اول پروژه یعنی پیدا کردن مکان پلاک تقریبا موفقیت آمیز بود.یعنی با موفقیت ۳۹ آزمایش از ۴۵ تا تقریبا به نتیجه ای قابل قبول رسیدیم.اما در قسمت دوم به دلیل کم بودن دیتاست فارسی نتوانستیم آن طور که باید و شاید به نتیجه ی دلخواه برسیم و در نتیجه دست به کپی کردن دیتاست و در نتیجه پایین آوردن دقت ماژول شدیم.
در قسمت اول در شرایطی که پس زمینه شلوغ نباشد و همچنین تغییرات ناگهانی نور نداشته باشیم که عملگر آن را به عنوان لبه بشناسد نتیجه قابل قبول میباشد ولی اگر این اتفاق بیوفتد عملگر توانایی تشخیصش را از دست میدهد یا حتی ممکن است جایی اشتباه را به عنوان پلاک تشخیص دهد.
در قسمت دوم هم اگر دیتاست کاملتری در دسترس بود قطعا نتیجه قابل قبول تر و بهتر میبود.

۷. منابع:

(1) yon.ir/qpcdR wikipedia
(۲) E. R. Davies (۲۰۰۴). Machine Vision: Theory, Algorithms, Practicalities. Morgan Kaufmann.
(۳) م. ر. اکبرزاده، ص. ایلدرآبادی، م. ابراهیمی، ر. منصفی، "سیستم چند کارگزاره برای تشخیص محل پلاک خودرو"
(۴) LS. Davis, "A survey of edge detection techniques", Computer Graphics and Image Processing, vol 4, no. 3, pp 248-260, 1975
(۵)روشی سریع وجدید برای تشخیص پلاک خودرو از تصاویر پیچیده بر اساس عملیات مورفولوژیکی-چهارمین کنفرانس ماشین بینایی و پردازش تصویر ایران
(۶)تشخیص شماره پلاک خودروهای ایرانی توسط تکنیک پردازش تصویر و شبکه های عصبی (غلامرضا راد مرد - محمد رضا فیضی )
گیت هاب پروژه