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

تغییرات پروژه از تاریخ 1393/04/01 تا حالا
تشخیص خودکار پلاک خودرو، از مهمترین نیازهای سیستم‌‌های کنترل خودکار ترافیک است. روزانه صدها و شاید هزاران تخلف ترافیکی روی می‌دهد و توسط دوربینهای مخصوص، تصویر خودروی متخلف ضبط می‎شود. اگر قرار باشد تمام این تصاویر توسط انسان بررسی شده و شماره پلاک خودرو به صورت دستی وارد شود، زمان و نیروی انسانی زیادی تلف خواهد شد. لذا تشخیص خودکار موقعیت پلاک خودرو و شناسایی شماره پلاک توسط نرم افزار اهمیت می‌یابد.

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

در این پروژه انتظار می‌رود در یک تصویر که شامل یک یا چند خودرو می‌باشد محل پلاک هر خودرو تشخیص داده شود.

# مقدمه
یکی از مسائل مهم امروزه که در حیطه ی کنترل ترافیک مطرح است ، تشخیص پلاک خودروها در فیلم های ظبط شده توسط دوربین های کنترل ترافیک  می باشد. سامانه تشخیص پلاک خودرو یک سیستم کاملاً مکانیزه است که با استفاده از پردازش تصویر خودرو‌های عبوری از یک مکان، شماره پلاک آنها را استخراج می‌کند. 


 ![تصویر ورودی](http://www.xum.ir/images/2014/04/25/111q5B3a.jpg)


برای استفاده از این سامانه، نیازی به نصب و تجهیز خودروها به وسیله‌ی دیگری مانند GPS یا برچسب‌های رادیویی- RFID Tag وجود ندارد. این سامانه با استفاده از دوربین‌های مخصوص، تصویری از خودرو در حال عبور اخذ می‌کند و آن تصویر را جهت پردازش توسط نرم‌افزار تشخیص پلاک خودرو به رایانه ارسال می‌کند. 
**

سیستم تشخیص پلاک خودرو کاربرد های فراوانی دارد که از آن جمله میتوان به اخذ عوارض ،محاسبه مدت سفر ، اتدازه گیری سرعت خودروها، کنترل ترافیک ، پارکینگ های عمومی ، زمینه امنیتی و نظامی اشاره کرد. 
سیستم تشخیص پلاک خودرو از سه بخش اصلی تشکیل شده است . تشخیص محل پلاک ، جداسازی کاراکترها و تشخیص کاراکترها. 

ما در این پروژه به بخش اول این سیستم ها یعنی تشخیص محل پلاک خودرو که مهم ترین بخش این سیستم هاست می پردازیم. در تصاویر ویدیویی هنگام فیلم برداری back ground ما ثابت است .   از طریق تکنیک های پردازش تصویر و image acquisition   تنها تصویر خودرو را اخذ می کنیم و و سپس با یافتن رنگ غالب در تصویر خودرو از طریق تکنیک های مختلف که در ادامه خواهیم گفت می توانیم محل پلاک را تشخیص دهیم . کیفیت پایین تصاویر، زوایای مختلف دوربین، انعکاس و شکست نور، تصاویر پشت صحنه ی پیچیده از جمله مشکلات ما در این پروژه می باشند.

بینایی رایانه‌ای (computer vision) یکی از شاخه‌های مدرن، و پرتنوع هوش مصنوعی ا‌ست که با ترکیب روشهای مربوط به پردازش تصاویر (image processing) و ابزارهای یادگیری ماشینی، رایانه‌ها را به بینایی اشیاء، مناظر، و "درک" هوشمند خصوصیات گوناگون آنها توانا می‌گرداند که ما میتوانیم از این ویژگی ها در این پروژه بهرمند شویم.

# کارهای مرتبط

در این قسمت به توضیحی در ارتباط با روش های متفات موجود برای شناسایی محل پلاک خودرو می پردازیم و یکی از الگوریتم ها را به تفضیل توضیح می دهیم.

راهکار های مختلف استخراج پلاک خودرو
ویژگی رنگ: در این روش ها رنگ پایه ی کار ماست و می توانیم با استفاده از رنگ پلاک تشخیص را انجام دهیم به عنوان مثال پلاک سفید و آبی در ایران.
معایب : 1) هنگامی که شرایط نوری تغییر می کند رنگ نیز پایداری خود را از ددست می دهد و عوض می شود. 2)پلاک های رنگی زمان پردازش زیادی نسبت به پلاک های سطح خاکستری دارند. 

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

لبه یابی: 
تشخیص لبه های پلاک با استفاده از این روش امکان پذیر است اما به تنهایی کاربرد نداردزیرا بسیاری از نقاط خارج از پلاک که لبه های مشابه دارند را به عنوان پلاک تشخیص می دهد. ما می توانیم این روش را با روش هایی از قبیل تبدیل هاف یا عملیات مورفولوژی ترکیب کرده و دقت را بالا بریم که در ادامه ما ترکیب لبه یابی و مورفولوژی را به تفضیل توضیح خواهیم داد.

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

استفاده از تبدیل IFT: در این روش لبه های عمودی تصویر استخراج می شود . در هر نقطه ی تصویر چگالی لبه ها تخمین زده می شود و چگالی نواحی شبیه پلاک تقویت می شود. سپس با استفاده از الگوریتم تبدیل IFT مرز پلاک با دقت بالا استخراج می شود.
 
در ادامه مراحل تشخیص محل پلاک را در یک ویدئو با پس زمینه ثابت با استفاده از ترکیب لبه یابی و موفولوژی و هیستوگرام به تفضیل خواهیم پرداخت .
در تصاویر ویدیویی هنگام فیلم برداری back ground ما ثابت است .   از طریق تکنیک های پردازش تصویر و image acquisition   تنها تصویر خودرو را اخذ می کنیم و آن را به تصویر سطح خاکستری تبدیل می کنیم و مراحل زیر را به ترتیب روی آن تصویر اعمال می کنیم و تصویر خروجی پلاک خودرو است.


 این مراحل عبارتند از : 
تصویر ورودی ----> فیلتر گوسین ---->  پیدا کردن لبه های عمودی تصویر ----> تحلیل هیستوگرام ----> پیدا کردن محل کاندید پلاک ----> سایش و گسترش افقی تصویر  ----> پیدا کردن حفره های احتمالی ----> گسترش عمودی تصویر ----> استخراج پلاک


 ![تصویر ورودی](http://www.xum.ir/images/2014/04/17/1guyQC.png)


                                        شکل 1. تصویر سطح خاکستری ورودی


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

 ![شکل 2](http://www.xum.ir/images/2014/04/17/1Cgfcm.png)


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

 ![شکل 2](http://www.xum.ir/images/2014/04/17/1QOehZ.png)


 در این روش چون اعداد و حروف دارای لبه های زیادی می باشند تنها از ماسک عمودی استفاده می شود با این فرض که تصویر ورودی دارای چرخش بیش از اندازه نباشد . شکل زیر تصویر حاصل از این مرحله را نشان می دهد.


 ![شکل 2](http://www.xum.ir/images/2014/04/17/2ZLPpX.png)


                       شکل 2-تصویر حاصل شده از لبه یابی با ماسک عمودی سوبل


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


 ![شکل 3](http://www.xum.ir/images/2014/04/17/3fuSMl.png)


                                  شکل3-هیستوگرام افقی تصویر لبه های عمودی

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


پیدا کردن محل کاندید پلاک: بعد از پیدا کردن سطرهایی که 55% بالای هیستوگرام را تشکیل می دهند بیش از یک محل کاندید برای پلاک به دست می آید در این صورت برای پیدا کردن محل واقعی پلاک راه حل هایی پیشنهاد می شود . در شبیه سازی های انجام شده عرض محل پلاک بین 15 تا 35 پیکسل است بنایراین نواحی که در خارج از این محدوده قرار دارند حذف شده و آخرین محل به عنوان محل واقعی کاندید پلاک در نظر گرفته می شود. شکل های زیر به ترتیب قبل و بعد از انجام این مرحله را نشان می دهند.


 ![شکل 3](http://www.xum.ir/images/2014/04/17/1bWQes.png)

 ![شکل 3](http://www.xum.ir/images/2014/04/17/1KxcLg.png)

                   

سایش تصویر: اینک روی تصویر کاندید عمل سایش انجام می شود. عمل سایش به صورت زیر تعریف می شود :
{AθB={x|(B)x ∁ A
سایش A و B مجموعه تمام نقاط x است که اگر B به اندازه x جابجا شود باز هم کاملا درون A قرار می گیرد.


گسترش افقی تصویر:بعد از عمل سایش بر روی تصویر عمل گسترش افقی انجام می شود که به صورت زیر تعریف می شود: 

![شکل 3](http://www.xum.ir/images/2014/04/17/1AZY0V.png)



![شکل 3](http://www.xum.ir/images/2014/04/17/1uEdQJ.png)

                                        شکل6-تصویر حاصل شده از گسترش افقی تصویر
پرکردن حفره های احتمالی: از آنجا که ناحیه بلاک یک ناحیه به هم پیوسته است حفره های احتمالی موجود پر میشوند شکل زیر نتیجه عمل پرکردن حفره ها رانشان می دهد

![شکل 3](http://www.xum.ir/images/2014/04/17/1SnQso.png)

                                  شکل7-تصویر حاصل شده از پر کردن حفره های احتمالی


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

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

![شکل 3](http://www.xum.ir/images/2014/04/17/1DFL7u.png)

                                             شکل8-محل تقریبی پلاک

استخراج پلاک: شکل بالا محل دقیق پلاک می باشد، بنابراین پلاک خودرو استخراج می شود، شکل پایین خروجی سیستم استخراج کننده پلاک را نشان می دهد که پلاک استخراج شده را در یک تصویر جداگانه ذخیره می کنیم.

![شکل 3](http://www.xum.ir/images/2014/04/17/1RSTJ3.png)


![شکل 3](http://www.xum.ir/images/2014/04/17/1eWbTI.png)                                     

                                              شکل9-خروجی سیستم

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



حال می خواهیم این تشخیص را در ویدئو انجام دهیم کدی که ما با استفاده از الگوریتم بالا و کمک گرفتن از شبکه ی عصبی  برای تشخیص در عکس نوشتیم به زبان متلب می باشد . ما در ادامه با استفاده از تابع readvideo.m در خط سوم کد این تابع فیلم ورودی را دریافت می کنیم  ، همچنین در خط پنجم این تابع و تابع CompareImg باید مشخص کنیم کدامیک از فریم های این فیلم باید مورد پردازش قرار گیرند هنگامی که این تابع اجرا  می شود برای هرکدام از فریم های خواسته شده پلاک را با استفاده از تابع localizeplate تشخیص می دهد و همه این عکس های تشخیص داده شده را در فولدر برنامه نگه می دارد حال در انتهای این حلقه تابع compareImg  فراخوانی می شود و با استفاده از Co-Realation ، ماتریس های این عکس های تشخیص داده شده را  با هم مقایسه می کند و بر اساس میزان شباهت بین آن ها ، یکی از آن هایی که با تعداد بیشتری از عکس ها مطابقت دارد را به عنوان خروجی نهایی سیستم باز می گرداند.


# آزمایش‌ها


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

![شکل 3](http://www.xum.ir/images/2014/04/25/66.png)  

همان طور که می بینید محل تقریبی پلاک تشخیص داده شده است ...




![شکل 3](http://www.xum.ir/images/2014/04/25/55.png)  

در این تصویر نیز تشخیص با درصدی خطا انجام شده است....




![شکل 3](http://www.xum.ir/images/2014/04/25/qwre.jpg)  

همان طور که می بینید کد ما در این عکس به علت وجود لبه های زیاد در طراحی جلوی این مدل مرسدس چیزی تشخیص نداد!





در این فاز قرار بود این تشخیص در ویدئو انجام شود . همان طور که در قسمت انتهایی بخش کارهای مرتبط توضیح دادم هنگام اجرا فریم های مورد بررسی را وارد کنیم! فیلمی که ما اینجا پردازش را بر رویش انجام دادیم به نام  "2.mp4"  است . در این فیلم تصویر دو خودرو مشاهده می شود یک پراید که ثابت است و یک مزدا که حرکت می کند.
اگر فریم های 100 تا 120 را مورد آزمایش قرار دهیم خواهیم دید که پلاک پراید را به ما برمی گرداند چون مزدا خیلی نزدیک به دوربین است و زاویه زیادی دارد و کد ما پلاک پراید را تشخیص می دهد اما اگر فریم های 150 تا 190 را مورد بررسی قرار دهیم پلاک خودرو مزدا که در حال حرکت است را به ما برمی گرداند. 

+ [سورس کد برنامه+فیلم برای تست](http://uplod.ir/t6kzws0lp2rs/New_folder.rar.htm)




# مراجع


[1] محمد صادق معمارزاده  و پیمان معلم ، “ تشخیص اتوماتیک پلاک خودرو فارسی به کمک روش های پردازش تصویر و شبکه های عصبی” ، دانشگاه صنعتی اصفهان ، بهمن 87

[2]
K.kanayama and Y.fujikava  , “Development  of vehicle license number recognition system using real-time image-processing an    it’s  application to travel –time  mesurment , processing of IEEE vehicular Technology conference , 2001 

[3] وحید ابو القاسمی و علیرضا احمدی فرد، “کاربرد تبدیل IFT  در سیستم تشخیص پلاک خودرو، سومین کنفرانس اطلاعات و دانش ، دانشگاه تهران آذر 86

[4] فرهاد فرجی و رضا صفا بخش ، “ روشی جدید و سریع برای شناسایی مکان پلاک خودرو از تصاویر پیچیده بر اساس عملیات مورفولوژی”  دانشگاه امیر کبیر ، اردیبهشت 79 

[5]
Hu at Al. “A Survey on visual Surveillance of Object  Motion  and  Behaviors” .IEEE  Trans.  On Systems,  Man,  And  Cybernetics—Part  C: Applications  And  Reviews,  Vol.  34,  No.  3, August 2006                                  
# پیوندهای مفید
+ [کتابخانه اپن‌سی‌وی](http://opencv.org) 
+ [اپن‌سی‌وی در پایتون](http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html) 
+ [نصب اپن‌سی‌وی در ابونتو](https://help.ubuntu.com/community/OpenCV)
+ [شناسایی اجسام در تصاویر با اپن‌سی‌وی](http://achuwilson.wordpress.com/2011/07/01/create-your-own-haar-classifier-for-detecting-objects-in-opencv/)