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

تغییرات پروژه از تاریخ 1396/08/29 تا تاریخ 1396/10/07
در این پژوهش از شما خواسته شده است که با دریافت تصویر ورودی، خودروهای موجود در آن را شناسایی کنید. با این کار گام اول را در طراحی یک سیستم نظارت ترافیکی شهری برداشته‌اید، مثلا برای ثبت تخلفات رانندگی.![ماشین‌های پیدا شده، با مستطیل سبز رنگ مشخص شده‌اند](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]
در نهایت می‌بینیم روش‌های مطرح شده **مشابهت **زیادی دارند.مثلا ممکن است برداشت شود روش اول و چهارم  یا روش دوم و پنجم مثل هم عمل می‌کنند که برداشت غلطی نیست،اما درمقاله‌های مختلف از زوایای متفاوتی به این روش‌ها نگاه کرده‌اند.
اما در کل می‌توانیم این روش‌ها را در روش سوم ، چهارم ، پنجم و ششم به صورت خلاصه طبقه بندی کنیم.

# ۳. آزمایش‌ها رنگ ها مدل‌های بسیار متفاوتی دارند چون طراحی‌شان با یکدیگر متفاوت است[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)
* روش دوم استفاده از  تکنیک‌های [بینایی کامپیوتر](https://en.wikipedia.org/wiki/Computer_vision) [^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 است که ایده اصلی آن به این شرح است:با توجه به ویژگی‌های ساده‌‌ای که طبقه‌بندی کننده در چند مرحله ساماندهی کرده‌است یک شیء به صورت آبشاری تعریف می‌شود(یا به صورت پله پله).سیستم  پیشنهادی  بر اساس [شبکه عصبی مصنوعی](https://en.wikipedia.org/wiki/Artificial_neural_network)  [^ANN]کار  می‌کند.   [7] [9][14][15]![شکل(6) شناسایی چهره  با استفاده از  ویژگی مذکور در مراحل مختلف](https://boute.s3.amazonaws.com/246-photo_2017-11-17_23-26-26.jpg)

* روش پنجم طراحی طبقه‌بندی‌کننده[^classifier]ای است که بتواند تشخیص دهد در تصویر ماشینی وجود دارد یا خیر.تفاوت این روش با روش دوم در این است که در این روش علاوه‌بر ویژگی‌های شکلی جسم، هم از ویژگی‌های **رنگ و شکل** و هم از ویژگی‌های**رنگ به تنهایی** استفاده می‌شود. مجموع این اطلاعات برای طبقه‌بندی تصویر کافی است.[10]
 در مقاله‌‌ی  [16] با استفاده از[یادگیری عمیق](https://en.wikipedia.org/wiki/Deep_learning) [^Deep Learning]سعی بر پیدا‌کردن و شمردن خودرو‌ها از روی عکس‌های هوایی اتوماتیک[^UAV Imagery]شده‌است.اما از الگوریتم‌های خاصی برای افزایش کارایی استفاده‌ شده‌است.روش‌های یادگیری عمیق برای استخراج ویژگی‌ها [^features]نیاز به حجم داده [^data] بالا دارد اما در مقاله ذکر شده با متدهای خاص آموزشی  ویژگی ها استخراج شده اند و در SVM وظیفه یادگیری را بر عهده دارد که به علت پیچیدگی از آن می‌گذریم.
![شکل(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]
در نهایت می‌بینیم روش‌های مطرح شده **مشابهت **زیادی دارند.مثلا ممکن است برداشت شود روش اول و چهارم  یا روش دوم و پنجم مثل هم عمل می‌کنند که برداشت غلطی نیست،اما درمقاله‌های مختلف از زوایای متفاوتی به این روش‌ها نگاه شده‌است.
اما در کل می‌توان این روش‌ها را در روش سوم ، چهارم ، پنجم و ششم به صورت خلاصه طبقه بندی کرد.

# ۳. آزمایش‌ها
**داده‌ها**
در این بخش داده‌های استفاده شده تعدادی فیلم mp4  هستند که از فیلم‌های گرفته‌شده توسط دوربین های موجود در اتوبان‌ها یا در خیابان‌ها تهیه‌شده‌اند.
با توجه به محدود بودن  فیلم‌های اتوبان ، این فیلم‌ها طوری انتخاب شده‌اند که بتوان کد پیاده‌سازی‌شده را در موقعیت‌های  متنوع آزمایش نمود.
از تنها [سایتی](https://pixabay.com/) که فیلم‌های رایگان و مناسب‌تری برای آزمایش داشت چهارده فیلم با ویژگی‌های مختلف برای آزمایش انتخاب شدند. 
از این ویژگی‌ها می‌توان موارد زیر را نام برد:
+ زاویه متفاوت دوربین
+ محو بودن بخشی از تصویر
+ تنوع حجم ترافیک 
+ دور یا نزدیک بودن دوربین از اتوبان و خیابان
+ سریع بودن یا سرعت عادی داشتن فیلم 
+ روز یا شب بودن 
+ یک طرفه یا دو طرفه بودن مسیر
+ ثابت بودن یا متغیر بودن زاویه دوربین
+ وجود یا عدم وجود خودروهای ثابت (پارک شده) در فیلم 
+ میزان نور 
+ کیفیت دوربین 

**روش پیاده‌سازی شده و گزارش نتایج**
روش پیاده‌سازی شده در واقع همان روش سوم است که در کارهای مرتبط ذکر شد. در این روش چون ورودی یک فایل mp4 شامل حرکت خودروهاست فرض می‌شود صحنه پویاست وماشین، خودرو‌ها را از طریق حرکت آنها شناسایی می‌کند.به این صورت که با متدهای مشخص زمینه را حذف کرده وقالب‌های متفاوت را در تصویر از یکدیگر جدا می‌کند و اجسام متحرک را در تصویر تشخیص می‌دهد.وقتی برنامه اجرا شود قالب‌های متفاوت که از هم جدا شده‌اند هر یک روی پنجره‌‌ی جداگانه‌ای نشان داده‌می‌شوند که برای درک چگونگی عمل کردن کد مفید هستند.به شکل 8 مراجعه شود.
در این پیاده‌سازی از روش‌های آموزش به ماشین استفاده نشده‌است که همین هم کار را به نسبت راحت‌تر کرده‌است و دیگر احتیاجی به تعلیم دادن ماشین توسط داده‌های بزرگ و سنگین نیست و ماشین فقط از طریق حرکت خودرو‌ها آن‌ها را شناسایی می‌کند. 
پس به همین نسبت هم دقت این روش پایین است چون ممکن است اشتباهی هر جسم متحرکی را به‌عنوان خودرو قبول کند.
برخی توابع اصلی برای ایجاد قالب های مورد نیاز:

	void drawBlobInfoOnImage(std::vector<Blob> &blobs, cv::Mat &imgFrame2Copy)

	void drawAndShowContours(cv::Size imageSize, std::vector<Blob> blobs, std::string strImageName);


	void addNewBlob(Blob &currentFrameBlob, std::vector<Blob> &existingBlobs);



![شکل(8) نمونه قالب های استخراج شده از  فیلم در یک لحظه](https://boute.s3.amazonaws.com/246-carrr.jpg)

![شکل(9) خروجی با توجه به قالب های استخراج شده در شکل 8](https://boute.s3.amazonaws.com/246-carr.jpg)
برای پیاده‌سازی این روش ابتدا لازم است کتابخانه‌ی OpenCV-3.4.0 روی سیستم نصب شده باشد.در ضمن این پیاده‌سازی به زبان ++Cاست و باید در محیط      Visual Studio 2015 اجرا شود. البته [نصب](https://www.youtube.com/watch?v=RbKpPmpvJa0) openCV  باید با دقت انجام شود تا کد به درستی عمل کند. بعد از ایجاد فایل‌های پروژه در VisualStudio 2015  هم باید projectproperties  تنظیم شود تا کتابخانهopenCV ضمیمه پروژه بشود. حال در ادامه با آزمایش‌های متعدد روی داده هایمان دقت این روش را بررسی می‌‌نماییم.
لازم به ذکر است برای ارزیابی این پیاده‌سازی چون داده‌ی ورودی فیلم است ارزیابی کمّی تا حدی پیچیده‌ است، چون معیار مشخصی برای بررسی عملکرد صحیح برنامه وجود ندارد. می‌توان معیار‌های مختلفی تعریف کرد ازجمله:

*مشخص شدن همه‌ی خودرو‌ها در فیلم  بدون خطا  یعنی هیچ جسمی به جز خودروها را مشخص نکند، که تقریبا غیر ممکن است چون این پیاده‌سازی ممکن
است هر جسم متحرکی را به‌عنوان خروجی ارائه دهد .
*مشخص شدن حداقل یک خودرو در فیلم که غیر منطقی است چون در هر فیلم تعداد زیادی خودرو وجود دارد که نیاز هست بیشتر آن‌ها تشخیص داده‌شوند ،در غیر این صورت سیستم ناکارآمد است.
در این قسمت معیار تعیین کننده کارآمد بودن،مشخص کردن سهم بیشتر خودرو‌ها در فیلم است و اگر مواردی که خودرو نیستند از حدی بیشتر به عنوان خروجی مشخص شوند برنامه کارآمد نیست. پس در این 14 مورد هرکدام که این دو شرط را داشته باشد قبول می‌شود .
همچنین این ارزیابی فقط برای فیلم‌هایی معتبر است که یک دوربین نصب شده از وسایل نقلیه در حال حرکت در خیابان یا بزرگراه گرفته باشد و نمی‌توان هر فیلمی را با آن ارزیابی کرد.

پس از آزمایش این فیلم‌ها که هریک ویژگی‌خاصی داشت نتایج زیر حاصل می‌شود:

1) زمانی‌که در فیلم ‌ها دو یا چند خودرو فاصله‌شان از حدی کمتر شود یک کادر دور آن‌ها کشیده ‌می‌شود یعنی تشخیص خودرو‌های نزدیک به
هم ممکن نیست.
![شکل (10) نمونه خروجی ناکارا به علت فاصله کم خودروها](https://boute.s3.amazonaws.com/246-car2.jpg)
2) زمانی‌که دوربین حرکت کند دو حالت پیش می‌آید:
 + اگر حرکت آن لرزشی و لحظه ای باشد خطای لحظه‌ای در آن پیش می‌آید یعنی ممکن است دور سایر اجسام که متحرک نیستند یا دور یکی از اجزاء
خودرو برای چند لحظه کادر بکشد.
 + اگر دوربین کلا ثابت نباشد و متحرک باشد خطا خیلی زیاد است و سیستم ناکارآمد می‌باشد.
 ![شکل(11) نمونه خروجی ناکارا به علت متحرک بودن دوربین](https://boute.s3.amazonaws.com/246-car3.jpg)
3) اگر تصویر از حدی بیشتر محو باشد تشخیص برای ماشین سخت است و خودر‌و‌های کمتری تشخیص داده‌می‌شوند.
4)زمانی‌که سرعت تصویر متعادل باشد و خودرو‌ها فاصله مناسب داشته‌باشند خروجی مناسب و قابل قبولی به‌دست‌می‌آید.
![شکل (12) نمونه خروجی مناسب ](https://boute.s3.amazonaws.com/246-car4.jpg)
5)زاویه دوربین و میزان نور تصویر در عملکرد برنامه بی‌تاثیر است.
![شکل(13) نمونه خروجی مناسب](https://boute.s3.amazonaws.com/246-car1.jpg)
6)اگر فیلم در شب بررسی شود از طریق چراغ‌های خودرو که روشن هستند حرکت خودرو تشخیص داده‌می‌شود اما اگر خودرو اصلا دیده‌نشود و
محو باشد کادر خروجی کوچکتر از اندازه‌ی خودرو است.
7) تا زمانی‌که فیلم وضوح داشته باشد فاصله دوربین از خیابان تاثیری در نتیجه ندارد.
8)زمانی‌که  سرعت فیلم از حدی بیشتر شود خطا زیاد شده و کارایی پایین می‌آید.
9)مشخص است که خودروهایی که پارک شده یا بی حرکت هستند در خروجی ظاهر نمی‌شوند.
10)یک یا دوطرفه بودن خیابان تاثیری در نتیجه ندارد.

کد پیاده سازی شده و توضیحات مربوط به اجرای آن در [گیت هاب](https://github.com/atisa/atieh_sarvi74) بارگذاری شده‌است.
به علت حجیم بودن فایل‌های تست شده فقط چند فایل mp4 سبک برای تست پروژه روی سایت  در فایل زیپ قرار گرفته است که قابل استفاده است. اما چندفایل دیگر را هم میتوانید از لینک های [20] ,[21]  ,[22]  , [23]بارگذاری کرده و تست کنید.

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

# ۵. مراجع
[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
[20]https://pixabay.com/en/videos/cars-motorway-speed-motion-traffic-1900/
[21]https://pixabay.com/en/videos/roads-motorways-highway-1952/
[22]https://pixabay.com/en/videos/freeway-transportation-highway-road-6329/
[23]https://pixabay.com/en/videos/traffic-cars-via-road-2532/
**پیوندهای مفید**

+ [کتابخانه اپن‌سی‌وی](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/)
+ [راهنمای نصب ابزار لازم برای اجرای کد](https://www.youtube.com/watch?v=RbKpPmpvJa0)