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

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

ما دقیقاً می خواهیم چه کاری انجام دهیم؟

سیستم های تشخیص پلاک خودرو از مفهوم تشخیص کاراکترهای  نوری ( OCR ) برای خواندن اعداد و حرف های موجود در پلاک خودرو استفاده می کنند. به عبارت دیگر، LPR  (سیستم تشخیص پلاک خودرو) تصویر یک وسیله نقلیه را به عنوان ورودی می گیرد و کاراکترهای نوشته شده در پلاک آن را به عنوان خروجی می دهد. آیا می توانید تصور کنید که استفاده از این فناوری چقدر می تواند مهارت های مخفی / کارآگاهی شما را بی ارزش کند؟ شما می توانید تمام مشخصات لازم در مورد یک خودرو را از روی مشخصات پلاک استخراج کنید.

یادگیری ماشین چه ارتباطی با این مسئله دارد؟

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

آیا این آموزش به کار من می آید؟

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

بیایید شروع کنیم…

تشخیص پلاک که گاهی اوقات با نام ALPR (سیستم تشخیص اتوماتیک پلاک خودرو) نیز شناخته می شود از ۳ مرحله مهم تشکیل شده است.

۱- تشخیص پلاک خودرو : این اولین و احتمالاً مهمترین مرحله از سیستم است. در این مرحله است که موقعیت پلاک مشخص می شود. ورودی در این مرحله تصویری از وسیله نقلیه و خروجی آن پلاک خودرو است.

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

۳- تشخیص کاراکتر ها: اینجا جایی است که همه چیز را جمع و جور می کنیم. کاراکترهایی که قبلا بخش بندی شده اند، در اینجا شناسایی می شوند. برای این کار از یادگیری ماشین استفاده خواهیم کرد.

پلاک خوان ماشین سنگین

تئوری کافیست. برویم سراغ کد نویسی

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

# install virtualenv if you don’t have the package already
pip install virtualenv
mkdir license-plate-recognition
cd license-plate-recognition
virtualenv lpr
source lpr/bin/activate

اکنون یک پوشه با نام lpr در فهرست پروژه شما قرار دارد.

اکنون ، اجازه دهید اولین بسته خود با نام scikit-image را نصب کنیم. این یک بسته پایتون برای پردازش تصویر است. برای نصب آن کد زیر را اجرا کنید.

pip install scikit-image

برخی از متعلقات کلیدی بسته عبارتند از scipy (برای برخی محاسبات پیچیده علمی) ، numpy (برای دستکاری آرایه های n بعدی) و matplotlib  (برای ترسیم نمودارها و نمایش تصاویر). بسته مهم دیگر Pillow – کتابخانه تصویربرداری پایتون نام دارد.

تشخیص پلاک خودرو ( تعیین محل پلاک )

این اولین مرحله فرآیند است و در پایان این مرحله، ما باید بتوانیم موقعیت پلاک خودرو را مشخص کنیم. برای انجام این کار ، باید تصویر را بخوانیم و آن را به مقیاس خاکستری تبدیل کنیم. در یک تصویر خاکستری ، هر پیکسل بین ۰ تا ۲۵۵ است. حال باید آن را به یک تصویر باینری (صفر و یک) تبدیل کنیم که یک پیکسل کاملاً سیاه یا سفید باشد.

توجه: اگر در استفاده از matplotlib در سیستم عامل خود مشکلی دارید ، این دستورالعمل را دنبال کنید.

خروجی کد زیر دو تصویر را نشان می دهد ، یکی در مقیاس خاکستری و دیگری به صورت صفر و یک.

تشخیص پلاک3
عکس خاکستری

ما باید با استفاده از مفهوم تجزیه و تحلیل مؤلفه متصل (CCA) ، تمام مناطق متصل را در تصویر شناسایی کنیم. رویکرد های دیگر مانند تشخیص لبه و پردازش مورفولوژیکی نیز قابل بررسی است. CCA اساساً به ما کمک می کند مناطق پیش زمینه را بهم وصل کنیم و برچسب گذاری کنیم. اگر هر دو پیکسل دارای یک مقدار باشند و در مجاورت یکدیگر باشند یک پیکسل به دیگری متصل می شود.

ما باید فایل قبلی را import کنیم تا بتوانیم به مقادیری که در آن جا داریم دسترسی داشته باشیم. روش اندازه گیری – برچسب گزاری برای تعیین تمام نقاط متصل شده به یکدیگر در تصویر صفر و یک و برچسب گزاری آن استفاده می شد. فراخوانی روش regionprops بر روی تصویر برچسب گزاری شده لیستی از تمامی نقاط به همراه مشخصات مربوط به آن همچون منطقه، جعبه ارتباط (bounding box) ،برچسب و … را به ما می دهد.

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

۱- شکل آن نقاط مستطیلی است.

۲- پهنایشان از طولشان بیشتر است

۳- نسبت پهنای پلاک خودرو به کل تصویر بین ۱۵ تا ۴۰ درصد متفاوت است.

۴- نسبت طول پلاک خودرو به کل تصویر بین ۸ تا ۲۰ درصد متفاوت است.

لحظه ای برای حذف کاراکتر هایی که در شکل پلاک خودرو کاربردی ندارند تردید نکنید. (احتمال وجود آن ها کم است)

از نسخه اصلاح شده اسکریپت cca.py ، سایر مناطق که احتمالاً شامل پلاک خودرو نمی شوند حذف می شوند. با این وجود ، هنوز هم ممکن است مناطق مشخصی ( چراغ های جلو ، برچسب ها و غیره ) که دقیقاً مانند صفحه پلاک خودرو به نظر می رسند نیز مشخص شوند. برای از بین بردن مناطق دیگر، باید یک طرح عمودی اجرا کنیم. این مفهوم با اضافه کردن تمام پیکسل ها در هر ستون انجام می شود. فرض بر این است که محدوده پلاک خودرو به دلیل این که کاراکتر ها روی آن نوشته شده اند، پیکسل های زیادی خواهد داشت.

تقسیم بندی کاراکترها

در این مرحله است که ما در آن همه کاراکترهای موجود در پلاک را مشخص می کنیم. ما همچنین در اینجا از مفهوم CCA استفاده خواهیم کرد.

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

سپس CCA روی پلاک انجام شده و اندازه هر کاراکتر به ۲۰ پیکسل در ۲۰ پیکسل تغییر یافت. این کار به دلیل مرحله بعدی که مربوط به شناخت کاراکترها می شود انجام شد. به منظور پیگیری درست بودن ترتیب کاراکترها، متغیر column_list برای در نظر گرفتن شروع هر محدوده از محور x معرفی شد. این متغیر می تواند بعد ها برای شناخت صحیح کاراکترها طبقه بندی شود.

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

شناسایی کاراکترها

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

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

بیایید با آموزش مدل خود شروع کنیم. من دو مجموعه داده مختلف دارم ، یکی ۱۰px در ۲۰px و دیگری ۲۰px در ۲۰px.. ما از ۲۰px در ۲۰px استفاده خواهیم کرد زیرا از قبل اندازه هر کاراکتر را به آن اندازه اختصاص داده ایم. هر حرفی به جز حروف O و I، ده تصویر مختلف دارد.

چندین طبقه بندی وجود دارد که می توانیم از هرکدام از آن ها با توجه به مزایا و معایب شان استفاده کنیم. ما برای این کار از SVC (کلاسه بند بردار پشتیبان) استفاده خواهیم کرد. با این حال ، این لزوما به این معنی نیست که SVC بهترین طبقه بندی کننده است.

برای این مرحله باید بسته یادگیری scikit را نصب کنیم.

pip install scikit-learn

در قسمت اصلی ، از هر کاراکتر در مجموعه داده های آموزش برای آموزش مدل SVC استفاده شده است. اعتبارسنجی متقاطع ۴ برابری نیز برای تعیین میزان دقیق بودن مدل انجام شد و سپس مدل به یک در قالب یک پرونده ادامه یافت تا پیش بینی ها بدون آموزش یک مدل دیگر انجام شود. اکنون که یک مدل آموزش دیده داریم، می توانیم کاراکترهایی را که قبلاً آن ها را تقسیم بندی کرده ایم ، پیش بینی کنیم.

یکی از مهم ترین موارد در ارتباط با سیستم اطمینان از شفاف بودن تصاویر استفاده شده است. همچنین اطمینان حاصل کنید که اندازه تصویر خیلی بزرگ نباشد، عرض تصویر با اندازه ۶۰۰px اندازه خوبی است .

نرم افزار کامل طراحی شده را می توانید در وبسایت زیر بیابید.

برنامه تشخیص پلاک

بیشتر بخوانید:

منبع Devcenter
امتیاز دهید!

همچنین ببینید

پلاک خوان هوشمند چیست

پلاک خوان هوشمند چیست و چگونه عمل می کند + معرفی بهترین پلاک خوان ایران

پلاک خوان هوشمند دستگاهی است که از فناوری پیشرفته هوش مصنوعی (AI) و بینایی ماشین …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *