تشخیص خودرو در تصویر

تغییرات پروژه از ابتدا تا تاریخ 1396/08/29
در این پژوهش از شما خواسته شده است که با دریافت تصویر ورودی، خودروهای موجود در آن را شناسایی کنید. با این کار گام اول را در طراحی یک سیستم نظارت ترافیکی شهری برداشته‌اید، مثلا برای ثبت تخلفات رانندگی.![ماشین‌های پیدا شده، با مستطیل سبز رنگ مشخص شده‌اند](https://camo.githubusercontent.com/f4c7a21bad5eded51ccfc760595d001263feb44b/687474703a2f2f626179616e626f782e69722f69642f3732303636383238383632393032303533343f76696577)

# ۱. مقدمه

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

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

1)سیستم‌های کنترل ترافیک (برای مثال بررسی حجم ترافیک یا شناسایی متخلفین ) [3][16]
2)برنامه‌ریزی شهری[3] [6][16]
3)برای شناسایی یک خودرو که عکس آن در خیابان گرفته شده‌است[2]
4)خودرو‌های بدون راننده
5)هر سیستمی که قصد هدایت خود را در خیابان و محیط‌های شامل خودرو دارد
6)مدیریت پارکینگ‌ها با اعلام ورود خودرو به مکان مورد نظر توسط ماشین(یا برای مثال برای باز کردن اتوماتیک در پارکینگ هنگامی‌که خودرو در مقابل آن قرار می‌گیرد)
7)در صورتی‌که ویژگی‌های خودرو مانند رنگ،مدل،شمارپلاک و غیره را بتوان توسط ماشین شناسایی کرد می‌توان برای تشخیص خودروی سرقت شده، متخلف
و یا هر موردی که در تعقیب است از آن استفاده کرد.[3]

پیدا کردن خودرو در تصویر کمی پیچیده است،زیرا برای مثال صورت انسان ساختار ساده‌تر و انعطاف‌پذیری کمتری دارد[1]، اما خودرو‌ها شکل‌ها و مدل‌های بسیار متفاوتی دارند چون طراحی‌شان با یکدیگر متفاوت است[4].انتظار ما این است که خودرو‌ها مستقل از زاویه دید ما(view) شناسایی شوند.برای این کار باید ماشین را برای تشخیص خودرو از زوایای مختلف تعلیم دهیم[1].

![شکل(1) تصویر شامل خودرهای مختلف و خروجی مورد نظر ما که خودروها با کادر قرمز مشخص شدند](https://boute.s3.amazonaws.com/246-photo_2017-11-17_23-13-13.jpg)
# ۲. کارهای مرتبط
در این زمینه در بخش‌های مختلفی مانند پیدا کردن خودرو در عکس ، فیلم ، تصاویر متحرک و غیره پژوهش‌های گوناگون انجام شده است.در این بخش به‌طور خلاصه روش‌های اصلی و مهم که استفاده بیشتری از آن‌ها شده‌است را نام می‌بریم:
 * در روش  اول اشیاء (binary) را در یک چارچوب آماری طبقه‌بندی می‌کنیم.سپس مجموعه‌ای از ویژگی‌ها را بررسی و ارزیابی می‌کنیم.در نهایت به چارچوب لازم برای طبقه‌بندی عکس می‌رسیم. در این روش در واقع یک **طبقه بندی سلسله مراتبی جامع **برای خودرو انجام می‌دهیم که بتوان به وسیله آن  تشخیص داد که قسمت مورد نظر جزئی از خودرو است یا خیر.[1]
 ![شکل(2) این تصویر پرمعنی ترین نقاط کلیدی خودرو را  با رنگ قرمز و نقاط کلیدی زمینه را با رنگ سبز نمایش می دهد.](https://boute.s3.amazonaws.com/246-photo_2017-11-17_18-10-13.jpg)
* روش دوم استفاده از  تکنیک‌های [computer vision](https://en.wikipedia.org/wiki/Computer_vision) است  .با آنالیز داده باید با استفاده از تصاویر زیاد به الگوریتم بیاموزیم در کدام تصاویر خودرو وجود دارد یا وجود ندارد.سپس *ویژگی‌های پرمعنا* را از تصویر استخراج کنیم.سپس ماشین ما تشخیص می‌دهد که خودرو کجا قرار دارد یا اینکه اصلا وجود ندارد.[5]  [8] [13]  ![شکل(3) آنالیز تصویر](https://boute.s3.amazonaws.com/246-photo_2017-11-17_21-22-10.jpg)
* در روش  سوم دنباله ای از تصاویر شامل خودرو داریم ،یعنی فرض  می‌کنیم صحنه پویاست. ماشین برای یافتن خودرو سه  راه دارد: 1)با متدهای مشخص زمینه را حذف کند2)ویژگی‌ها را با متدهایی استخراج کند3)با استفاده از متدهایی ،قالب‌های متفاوت را در تصویر از یکدیگر جدا کند و اجسام متحرک را در تصویر تشخیص دهد.[6][12]![شکل(4) شناسایی اجسام متحرک](https://boute.s3.amazonaws.com/246-photo_2017-11-17_21-42-02.jpg)![شکل(5)شناسایی اجسام متحرک](https://boute.s3.amazonaws.com/246-photo_2017-11-17_22-55-24.jpg)
* روش چهارم استفاده از ویژگی‌های Haar-like است که ایده اصلی آن به این شرح است:با توجه به ویژگی‌های ساده‌‌ای که طبقه‌بندی کننده در چند مرحله ساماندهی کرده‌است یک شیء را به صورت آبشاری تعریف می‌کنیم(یا به صورت پله پله).سیستم  پیشنهادی  بر اساس [ANN](https://en.wikipedia.org/wiki/Artificial_neural_network)(شبکه عصبی مصنوعی ) کار  می‌کند.   [7] [9][14][15]![شکل(6) شناسایی چهره  با استفاده از  ویژگی مذکور در مراحل مختلف](https://boute.s3.amazonaws.com/246-photo_2017-11-17_23-26-26.jpg)

* روش پنجم طراحی طبقه‌بندی‌کننده(classifier)ای است که بتواند تشخیص دهد در تصویر ماشینی وجود دارد یا خیر.تفاوت این روش با روش دوم در این است که در این روش علاوه‌بر ویژگی‌های شکلی جسم، هم از ویژگی‌های **رنگ و شکل** و هم از ویژگی‌های**رنگ به تنهایی** استفاده می‌شود. مجموع این اطلاعات برای طبقه‌بندی تصویر کافی است.[10]
 در مقاله‌‌ی  [16] با استفاده از [DeepLearning](https://en.wikipedia.org/wiki/Deep_learning) سعی بر پیدا‌کردن و شمردن خودرو‌ها از روی عکس‌های هوایی اتوماتیک (UAV Imagery) شده‌است.اما از الگوریتم‌های خاصی برای افزایش کارایی استفاده‌ شده‌است.روش‌های deepLearning برای استخراج ویژگی‌ها (features) نیازی به حجم داده (data) بالا ندارد.
![شکل(7) نمودار متد مورد نظر به کمک یادگیری عمیق](https://boute.s3.amazonaws.com/246-photo_2017-11-19_23-48-40.jpg)
در شکل 7، CNN در واقع  convolutional neural network  و SVM  در واقع  support vector machine  هستند.

* در روش ششم ابتدا اندازه‌ و زاویه‌ی بردار گرادیان همه‌ی پیکسل‌های تصویر را به دست می‌آوریم،سپس پیکسل‌های غیرماکزیمم و  پیکسل‌های با اندازه‌ی گرادیان ضعیف حذف می‌شوند. سپس پیکسل‌های باقی‌مانده بر اساس زاویه گرادیان در دو سطح افقی و عمودی چند‌سازی می‌گردند.در مرحله بعد ضرایب خود‌همبسته نگار لبه در هر سطح محاسبه ‌می‌شوند.حال یا ویژگی‌های به‌دست‌آمده با توجه به آموزشی که به ماشین داده‌شده تشخیص می‌دهد که در صحنه خودرو حضور دارد یا نه.[11]
در نهایت می‌بینیم روش‌های مطرح شده **مشابهت **زیادی دارند.مثلا ممکن است برداشت شود روش اول و چهارم  یا روش دوم و پنجم مثل هم عمل می‌کنند که برداشت غلطی نیست،اما درمقاله‌های مختلف از زوایای متفاوتی به این روش‌ها نگاه کرده‌اند.
اما در کل می‌توانیم این روش‌ها را در روش سوم ، چهارم ، پنجم و ششم به صورت خلاصه طبقه بندی کنیم.

# ۳. آزمایش‌ها

# ۴. کارهای آینده

# ۵. مراجع
[1] B.Leung, Component-based Car Detection in Street Scenes Images ,Department of Electrical Engineering and Computer Science , 2004
[2] S.Yamaguchi, A Car Detection System Using the neocognitron  , IEEE International joint conference  on, Singapore , 2002
[3] T.Tang ,S.Zhou, Z.Deng, H.Zou, L.Lei ,Vehicle Detection in Aerial Images  Based on Region Convolutional  Neural Networks and Hard Negative Example Mining , Sensor ,2017
[4] S.Cheung,A.Chu , Make And Model Recognition of Cars,Department of Computer Engineering University of California ,San Diego , 2008
[5]https://chatbotslife.com/vehicle-detection-and-tracking-using-computer-vision-baea4df65906
[6]R.Hadi ,G.Sulong ,E.George , Vehicle Detection  And Tracking Techniques:A Concise Review , Malaysia,Iraq,2014
[7]M.Oliveria,V.Santos,Automatic Detection of Cars in Real Roads using Haar-like Features, Department of Mechanical Engineering, University of Aveiro ,Portugal ,2008
[8] https://github.com/JunshengFu/vehicle-detection
[9]https://github.com/andrewssobral/vehicle_detection_haarcascades
[10]https://github.com/NikolasEnt/Vehicle-Detection-and-Tracking
[11] م.سعادتمند، یک روش جدید برای تشخیص خودرو در تصویر، کنفرانس توسعه کاربردهای صنعتی اطلاعات ارتباطات و محاسبات ، مشهد ، 1390
[12]https://github.com/andrewssobral/simple_vehicle_counting
[13]https://github.com/ckirksey3/vehicle-detection-with-svm
[14]A.Naba, B.Pratma,A.Nadhir ,Haar-like feature based-time neuro car detection system, Indonesia ,2016
[15] Y.Wang,Monocular Vehicle Detection and Tracking, Department of Electrical and Computer Engineering University of California, San Diego
[16]N.Ammour,H.Alhichri,Y.Bazi,B.Benjdira,N.Alajan,M.Zuair,Deep Learning Approach for Car Detection in UAV Imagery,Computer Engineering Department, College of Computer and Information Sciences, King Saud University,2017
[17]https://en.wikipedia.org/wiki/Computer_vision
[18]https://en.wikipedia.org/wiki/Artificial_neural_network
[19](https://en.wikipedia.org/wiki/Deep_learning
**پیوندهای مفید**

+ [کتابخانه اپن‌سی‌وی](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/)