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

تغییرات پروژه از تاریخ 1396/08/29 تا تاریخ 1396/10/07
![پیدا کردن پلاک خودرو](https://matthewearl.github.io/assets/cnn-anpr/out-better.jpg)هدف از این پروژه بررسی روش‌ها و پیاده‌سازی یک سامانه هوشمند مبتنی بر یادگیری ماشین و بینایی ماشین برای پیدا کردن جای‌پلاک در تصویر خودرو و خواندن آن پلاک است.

##مقدمه
در این پروژه به کمک بینایی ماشین به پیدا کردن مکان پلاک خودرو در تصویر و در ادامه به کمک یادگیری ماشین به خواندن نویسه‌های پلاک خودرو می‌پردازیم.
اصولا پلاک برای هر خودرو به منزله‌ی کد ملی برای هر شخص است. در واقع با شناسایی پلاک خودرو در تصویر می‌توان به سایر اطلاعات درباره‌ی خودروی در
تصویر رسید و همین طور چون موقعیت دستگاهی که تصویر را گرفته برای سیستم مشخص است در نتیجه می‌توان گفت که این خودرو با این مشخصات در زمان مشخص در مکان مشخص قرار دارد. با استفاده از این اطلاعات که از سیستم به‌دست می‌آید می‌توان امور مدیریت شهری را بهتر انجام داد و شهر را مکانیزه کرد و یک گام به شهر هوشمند نزدیک‌تر شد. دیگر کاربرد‌هایی که این سیستم دارد (و در واقع دیگر مشکلاتی که این سیستم رفع می‌کند) به شرح زیر هستند: 
+ اخذ عوارض بدون توقف[1]
+ محاسبه مدت سفر
+ اندازه‌گیری سرعت متوسط خودرو‌ها
+ کنترل ترافیک
+ استفاده برای مدیریت پارکینگ‌های عمومی
+ مدیریت دسترسی خودرو‌ها به یک منطقه حفاظت شده[1]
+ جست‌و‌جو خودرو‌های دزدی[1]
+ شناسایی خودرو‌های ناقض قوانین راهنمایی و رانندگی[1]
**پلاک خودرو**
مهم‌ترین عنصری که در این پروژه با آن درگیر خواهیم بود، پلاک خودرو است و همین‌طور مهم‌ترین بخش از این عنصر ابعاد آن است که در پروژه بیشتر اهمیت خود را نشان خواهد داد. پلاک خودرو از لحاظ رنگ دارای تنوع بسیاری است اما از سال 1382 به بعد در ایران به شکل استاندارد اروپایی یعنی 20.5 اینچ طول و 4.5 اینچ عرض یا ۵۲۱ در 111.5 میلی‌متر درآمد. البته نوع پلاک تاریخی مطابق استاندارد آمریکایی یعنی 1۲ اینچ طول و ۶ اینچ عرض است که به نظر نمی‌آید
این سیستم با این نوع پلاک‌ها سروکار داشته باشد. یک نوع پلاک دیگر که ابعاد متفاوتی نسبت به پلاک خودرو دارد، پلاک موتور سیکلت‌ها و پلاک خودرو‌های مناطق آزاد هستند. کد‌های بر روی هر پلاک دارای اطلاعاتی مانند استان اخذ آن پلاک یا جانباز و معلول بودن شخص راننده است.
![نمونه پلاک](http://uupload.ir/files/880o_untitled3.png)
**پردازش تصویر**
در معنای خاص آن پردازش تصویر یا پردازش نگاره عبارت است از هر نوع پردازش سیگنال ورودی که یک تصویر است. پردازش تصاویر دارای دو شاخه عمده بهبود تصاویر و بینایی ماشین است. بهبود نگاره دربرگیرنده روش‌هایی چون استفاده از فیلتر محوکننده و افزایش تضاد برای بهتر کردن کیفیت دیدارمتن ضخیمی نگاره و اطمینان از نمایش درست آن‌ها در محیط مقصد(مانند چاپگر یا نمایشگر رایانه)است. بینایی ماشین به روش‌هایی می‌پردازد که به کمک آن‌ها می‌توان معنی و محتوای نگاره را درک کرد تا از آن‌ها در کارهایی چون رباتیک و محور تصاویر استفاده شود.

##کارهای مرتبط
+ یک روش برای پیدا کردن جای پلاک در تصویر استفاده از رنگ و پیدا کردن رنگ در تصویر است. در روش‌های مبتنی بر رنگ عیب این روش این است، که هنگامی‌که شرایط نوری تغییر می‌کند رنگ نیز پایداری خود را از دست می‌دهد و عوض می‌شود. پلاک‌های رنگی زمان پردازشی زیادی نسبت به پلاک‌های با سطح خاکستری می‌برند. لبه یابی به تنهایی کاربرد ندارد زیرا بسیاری از نقاط خارج از پلاک را هم به عنوان پلاک شناسایی می‌کند. تبدیل هاف به تغییر شکل مرز‌های پلاک خیلی حساس است و زمان پردازشی آن زیاد است. 
+ از جمله روش های دیگر می‌توان به منطق فازی اشاره کرد. در این روش[1] تعدادی قوانین شهودی تعریف شده، که با آن‌ها ناحیه پلاک توصیف می‌شود. این روش‌ به رنگ و روشنایی پلاک خودرو بسیار حساس بوده و نیاز به زمان پردازشی طولانی‌تری نسبت به روش‌های مبتنی بر رنگ دارد.
+ در روشی[3] دیگر از فیلتر سوبل برای استخراج پلاک استفاده شده است. در این روش، حجم گرادیان و واریانس محلی، در یک تصویر محاسبه می‌شود. اساس این روش مبتنی بر این است که تغییر روشنایی در پلاک، نسبت به قسمت‌های دیگر تصویر بسیار چشم‌گیرتر و تکرار شونده‌تر است.
+ در روشی[4] دیگر از جست‌و‌جوی چند ردیف در میان تصویر، برای تعیین محل پلاک خودرو استفاده شده است. در این روش از روش شبکه‌ی عصبی به عنوان روشی ناکارآمد یاد شده است. در این روش ارائه شده برای پیدا نمودن پلاک خودرو، تصیر با N ردیف فاصله اسکن شده و لبه‌های موجود شمرده می‌شود. اگر تعداد لبه‌ها بزرگتر از یک مقدار آستانه شد، حضور یک پلاک مشخص می‌شود. در صورتی‌که در اولین پردازه اسکن، پلاک پیدا نشود، الگوریتم با کاهش مقدار سطح آستانه جهت شمردن تعداد لبه‌ها تکرار می‌شود. این روش سرعت اجرای خیلی خوبی دارد، به دلیل این که فقط چند ردیف در میان یک تصویر اسکن می‌شود.
+ در روشی[5] دیگر به معرفی یک سیستم چند کارگزاره برای تشخیص پلاک خودرو پرداخته است. درسیستم پیشنهادی از سه کارگزار دقت، سرعت و قاضی استفاده شده است. کارگزار دقت با اعمال فیلتر گیبر و کنکاش بیشتر بر روی تصاویری که کارگزار سرعت قادر به بافت پلاک خودرو در آن‌ها نیست، محل پلاک را باسرعت و دقت بالایی پیدا می‌نماید.
+ در روشی[6] دیگر تشخیص پلاک خودرو در فریمی از یک فیلم ویدئویی بررسی شده است. در این روش برای تشخیص پلاک در یک فریم از فیلم ویدئویی، روشی مبتنی بر تبدیل فوریه به نام تحلیل طیفی مطرح شده است.
+ در روشی[7] دیگر از تبدیل IFT برای شناسایی پلاک خودرو استفاده شده است. در این روش ابتدا لبه‌های عمودی تصویر استخراج می‌شود. در هر نقطه‌ی تصویر، چگالی لبه‌ها را تخمین زده و چگالی نواحی شبیه پلاک تقویت می‌شود. سپس با استفاده از الگوریتم تبدیل IFT مرز پلاک با دقت بالا استخراج می‌شود.
+ در روشی[8] دیگر لبه‌های عمودی با عملگر سوبل استخراج می‌شود، سپس با بررسی معیار تراکم نواحی که تراکم کمتری دارند حذف شده، سپس به کمک ترکیبی از عملگرهای مورفولوژی پلاک خودرو استخراج می‌شود. 
با توجه به کاربردهای زیاد موجود، روش‌های متفاوتی برای این کار در مراجع مختلف ارائه شده است. به طور کلی می‌توان روش‌های موجود را به سه دسته تقسیم کرد:
+ روش‌هایی که از اطلاعات بافت در تصاویر سطح خاکستری استفاده می‌کنند.
+ روش هایی که از تصویر گرادیان استفاده می‌کنند.
+ روش‌هایی که ازاطلاعات رنگی پلاک استفاده می‌کنند.
روش های زیر، از جمله از کارهایی هستند که از اطلاعات رنگی برای استخراج تصویر پلاک خودرو استفاده می‌کنند[1]:
+ در روشی[9]، توصیفی که برای پلاک در نظر گرفته شده، نقاطی هم رنگ با پلاک است که چندین رقم پشت سر هم دارد. این روش در تصاویر با پیش زمینه پیچیده خوب عمل می‌کند.
+ روشی دیگر[10]، مبتنی بر شناسایی الگو بوده و با استفاده از پیمایش ستونی برای یافتن الگویی استاندارد در تصویر رنگی، پلاک را مکان‌یابی می‌کند.
+ در روشی دیگر[11]، فرض بر این است که پلاک مستطیلی زرد رنگ است، بنابراین به دنبال نواحی رنگی با طیف سفید تا زرد است.
+ روشی دیگر[12]، با استفاده از فضای HSV و منطق فازی به تشخیص رنگ پلاک پرداخته است.
+ در روشی دیگر[13]، از جابجایی میانگین (mean shift) برای فیلتر تصویر و ناحیه‌بندی رنگ‌ها استفاده کرده و با به کار گیری مشخصات پلاک ( ناحیه مستطیلی با نسبت ثابت طول به عرض ) به طبقه‌بندی و استخراج پلاک می‌پردازد.
روش های زیر با استفاده از لبه‌یابی به مکان‌یابی پلاک خودرو می‌پردازند[1]:
+ در روشی[14]، برای آشکارسازی لبه‌های عمودی در فواصل نزدیک از عملگر سوبل و در فواصل دور از فیلتر [1 0 1-]  استفاده شده
است. برای تخمین فواصل از مساحت نوار آبی رنگ کنار پلاک خودرو استفاده می‌شود. 
+ روشی دیگر[15]، طبقه‌بندهای آبشاری را برای مکان‌یابی سریع پلاک به کار می‌برد.
+ روشی دیگر[16]، از الگوریتم smearging و مورفولوژی گسترش استفاده می‌کند.
+ روش‌هایی دیگر[17][18] ، با استفاده از سوبل لبه‌یابی می‌کنند، سپس با توجه به این که تراکم لبه‌ها در پلاک زیاد است، پلاک را استخراج می‌کند.
+ در روشی دیگر[19]، لبه یاب سوبل، سپس الگوریتم استخراج اسکلت و در نهایت مورفولوژی بستن برای یافتن نواحی پلاک به کار می‌رود.
+ روشی دیگر[20]، هم‌زمان اطلاعات رنگ و لبه را در یک سیستم فازی به کار می‌برد تا محل پلاک جست‌و‌جو شود.


##کارهای مرتبط
آزمایش این پروژه به دو بخش تقسیم می‌شود. در بخش اول باید به کمک بینایی ماشین به دنبال جای پلاک در تصویر بگردیم و در بخش دوم به کمک یادگیری 
ماشین به خواندن پلاک بپردازیم. داده‌های استفاده شده از تصاویر موجود در اینترنت است.حال در ابتدا به توضیح روش کار برای بخش اول می‌پردازیم.
ابتدا تصویر رنگی را به خاکستری تبدیل مینماییم . سپس لبه‌هایی که از مقدار آستانه 0.18 ضعیف‌تر هستند به کمک متد Roberts در تصویرسیاه شده و بقیه سفید می‌شوند. در مرحله بعد نقاط سفیدی که به صورت عمودی زیر هم قرار دارند به کمک ماتریس مناسب و تابع imerode به هم وصل می‌شوند. در مرحله بعد خطوط
افقی سفیدی که ایجاد شده به سمت هم به صورت مستطیلی گسترش داده می‌شوند. در نهایت نیز بزرگترین مستطیل سفید به عنوان کاندیدا برای جای پلاک تعیین می‌شود و در نهایت نیز جای مستطیل سفید بزرگ در تصویر یافت شده و برگردانده می‌شود.
در بخش دوم باید به کمک یادگیری ماشین اقدام به خواندن پلاک از تصاویر بکنیم. برخی از داده ها برای یادگیری ماشین و برخی دیگر هم برای تست و آزمایش سیستم استفاده شد. در مرحله اول برای آموزش ماشین به کمک فایل project.py اقدام به جداسازی نویسه‌های پلاک ماشین از هم در تصویر به صورت سیاه و سفید کرده و آن ها را در تصاویر جداگانه ذخیره می‌کنیم. بعد به کمک فایل new_train.py اقدام به یادگیری ماشین می‌کنیم. و در مرحله آخر به کمک فایل  singlePlate.py اقدام به تست و آزمایش ماشین می‌کنیم.
این پیاده سازی روی مجموعه داده ی 40 تصویر آزمایش شده است. روش به کار برده شده قادر به تشخیص پلاک در تصاویری که شامل المانی مستطیلی شکل باشند که حجمی بزرگتر از پلاک ایجاد کند نمی‌باشد و از بین 40 عکس ، موفق به شناسایی 23 تصویر بصورت دقیق شد .(70%)
![فرآیند کار](http://uupload.ir/files/omx4_1.png)
برخی تصاویر که در آن قادر به تشخیص پلاک شدیم:
![](http://uupload.ir/files/fqgc_2.jpg)
![](http://uupload.ir/files/vgbx_3.png)
![](http://uupload.ir/files/r9gj_4.jpg)
برخی تصاویر که قادر به تشخیص درست در آن‌ها نشدیم:
![](http://uupload.ir/files/dfe8_5.jpg)
![](http://uupload.ir/files/ip6m_6.png)
![](http://uupload.ir/files/t0l_7.jpg)

## مراجع
[1] س. سرافرازی، م. عباسی، ح. نظام آبادی پور، "آشکارسازی پلاک خودرو در تصاویر رنگی با استفاده از اطلاعات لبه"، ششمین کنفرانس ماشین بینایی و پردازش تصویر ایران، دانشگاه اصفهان، آبان، 1389.
[2] J. A. G. Nijhuis, M. H. ter Brugge, K. A. Helmholt, J. P. W. Pluim, L. Spaanenburg, R. S. Venema, and M. A. Westenberg, “car license plate recognition with neutral networks and fuzzy logic,”in Proc. IEEE Int. Conf. Neutral Netw.vol. 5, pp. 2232-2236, 1995.
[3] ب. عطاران و م. جاهد، "استخراج و شناخت حروف و اعداد در پلاک خودرو توسط فیلتر sobel، شبکه‌های عصبی و ممان‌های Hu"، اولین کنفرانس ماشین بینایی و پردازش تصویر، دانشگاه بیرجند، 1379.
[4] ع. برومندنیا و م. فتحی، "تشخیص اتوماتیک پلاک خودرو با استفاده از پردازش تصویر"، سومین کنفرانس مهندسی برق، دانشگاه علم و صنعت، اردیبهشت، 1374.
[5] م. ر. اکبرزاده، ص. ایلدرآبادی، م. ابراهیمی، ر. منصفی، "سیستم چند کارگزاره برای تشخیص محل پلاک خودرو"، سومین کنفرانس اطلاعات و دانش، دانشگاه مشهد، آذر، 1386.
[6] م. روحانی و ح. عامری، "جایابی پلاک خودرو در یک فریم از فیلم ویدئویی با استفاده از تحلیل طیفی اصلاح شده"، سومین کنفرانس اطلاعات و دانش، داشنگاه مشهد، آذر، 1386.
[7] و. ابوالقاسمی و ع. ر. احمدی فرد، "کاربرد تبدیل IFT در سیستم شناسایی پلاک خودرو"، سومین کنفرانس اطلاعات و دانش، دانشگاه مشهد، آذر، 1386.
[8] ف. فرجی و ر. صفابخش، "روش جدید و سریع برای تشخیص محل پلاک خودرو از تصاویر پیچیده بر اساس عملیات مورفولوژی"، چهارمین کنفرانس ماشین بینایی و پردازش تصویر ایران، دانشگاه مشهد، بهمن، 1385.
[9] ب. چناقلو، م. رحمتی، "تشخیص برخط مکان پلاک خودرو در تصاویر با پس زمینه پیچیده با استفاده از مورفولوژی ریاضی فازی"، پنجمین کنفرانس بینایی ماشین و پردازش تصویر، 1388.
[10] ا. ح. اشتری، م. فتحی، "روش جدید مکان‌‌یابی پلاک خودرو در تصاویر رنگی"، پنجمین کنفرانس بینایی ماشین و پردازش تصویر، 1388.
[11]Sh. M. Youssef, Sh. B. AbdelRahman, “Asmart access control using an efficient license plate location and recognition approach”, Expert System with Applications 34(2008) 256-265.
[12]F. Wang, L. Manb, B. Wang a, Y. Xiao a, W. Pan a, X. Lu a, “Fuzzy-based algorithm for color recognition of license  lates”, Pattern Recognition Letters 29(2008)1007-1020.
[13]W. Jia, H. Zhang, X. He, “Recion-based license plate detection”, Computer Applications 30(2007)1324-133.
[14] س. رستگار، ر. قادری، غ. ر. اردشیر، م. ر. کرمی، "طراحی الگوریتم مقاوم در برابر چرخش، تغییر فاصله عکسبرداری و روشنایی محیط برای تشخیص پلاک‌های رایج در ایران"، پنجمین کنفرانس بینایی ماشین و پردازش تصویر، 1388.
[15] ه. امامی، م. فتحی، "محل‌‌یابی و تشخیص سریع پلاک خودرو با استفاده از کلاسیفایرهای آبشاری"، پنجمین کنفرانس بینایی ماشین و پردازش تصویر، 1388.
[16]S. Ozbay, E. Ercelebi, “Automatic Vehicle Identification by Plate Recognition”, Proceedings of world academy of science, engineering and technology, 2005 1307-6884.
[17]V. Abolghasemi, A. Ahmadyfard, “An Edge-Based Color-Aided Method for License Plate Detection”, Image & vision Computing, 2008.
[18]D. Zheng, Y. Zhao, J. Wang, “Anefficient method of license plate location”, Pattern Recognition Letters 26, 2005.
[19]J. Jiao, QixiangYe, QingmingHuang, “Aconfigurable method for multi-style license plate recognition”, Pattern Recognition42, 2009.
[20]Shyang-Lih Chamg, Li-Shien Chen, Yun-Chung Chung, and Sei-Wan Chen, Senior Member, “Automatic License Plate Recognition”, IEEE Transaction On Intelligent Transportation Systems, 2004. 
## پیوندهای مفید
+ [Number plate recognition with Tensorflow](https://matthewearl.github.io/2016/05/06/cnn-anpr/)
+ [Number plate detection with Supervisely and Tensorflow](https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c)
+ [شناسایی اجسام در تصاویر با اپن‌سی‌وی](http://achuwilson.wordpress.com/2011/07/01/create-your-own-haar-classifier-for-detecting-objects-in-opencv/)
+ [لینک گیتهاب پروژه و دیتاست](https://github.com/sargdsra/ai)