تشخیص ، شناسایی و استخراج شماره پلاک خودرو ها در سیستم عامل iOS

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

تشخیص پلاک2

امروزه، سیستم های تجاری بسیاری وجود دارند که قابلیت تشخیص پلاک خودرو را نیز شامل می شوند و می توان از آن ها در بسیاری از موارد استفاده کرد مانند:

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

در این مقاله به معرفی مدلی خواهیم پرداخت که بتواند متن پلاک خودرو را در یک برنامه iOS استعلام و استخراج کند.

عناوین کلی :

  1. تشخیص شیء چیست؟
  2. API اپل برای تشخیص متن
  3. یافتن مجموعه داده و حاشیه نویسی تصاویر
  4. آموزش مدل
  5. ساختن برنامه iOS 
  6. نتیجه گیری

تشخیص شی چیست؟

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

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

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

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

کلید موفقیت، در الگوریتم کلاسه بندی تصویر است. پس از انتشار نتایج چالش ImageNet در سال ۲۰۱۲، یادگیری عمیق (به ویژه شبکه های عصبی کانولوشنی) به روش برتر حل این نوع مسائل تبدیل شده است. البته تحقیقات اخیر در زمینه ی مدل های کلاسه بندی برای شناسایی اشیاء منجر به ایجاد شبکه های پیشرفته مانند SSD ( Single-Shot Detector ) و R-CNN شده است.

در بالا مشاهده می کنیم که با استفاده از این رویکرد ها می توان چندین شیء را در تصویر کشف و شناسایی کرد.

معماری شبکه YOLO :

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

ورژن Tiny YOLOv2 از ۱۵ لایه تشکیل شده است که می تواند ۲۰ کلاس مختلف از اشیاء را پیش بینی کند. از آنجا که ورژن Tiny YOLOv2 یک نسخه کم حجم شده از مدل اصلی YOLOv2 است، بین سرعت و دقت در آن تعادلی برقرار شده است. لایه های مختلفی که مدل را تشکیل می دهند با استفاده از ابزاری مانند Netron قابل مشاهده است.

مدل بازرسی، نگاشتی از اتصالات بین تمام لایه هایی که شبکه عصبی را تشکیل می دهند، تهیه می کند، جایی که هر لایه دارای نام لایه و همچنین ابعاد ورودی / خروجی مربوطه می باشد.

تشخیص پلاک3

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

در مورد ورژن Tiny YOLOv2، نام لایه ورودی image است و انتظار یک تنسور با ابعاد  3*416*416 را دارد. نام لایه خروجی grid است و یک تنسور خروجی به ابعاد ۱۲۵*۱۳*۱۳ ایجاد می کند.

تشخیص پلاک4

به لطف کتابخانه اپل Turi Creat برای یادگیری ماشین ، دیگر لازم نیست نگران آموزش و ترجمه یک مدل Tiny YOLOv2 سفارشی باشید. Turi Creat کار های دشوار بسیاری را برای کاربر انجام خواهد داد.

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

از زمان WWDC 19 ، اپل یک API اختصاصی برای تشخیص کاراکترهای نوری ( OCR ) معرفی کرده است. این کتابخانه بخشی از چارچوب Vision اپل است که برای کار های مختلف مربوط به پردازش تصویر و فیلم است می شود. تشخیص متن به ما امکان می دهد متن را در تصاویر یا حتی فیلم ها ( پردازش فریم به فریم ) شناسایی و تشخیص دهیم.

برای کسب اطلاعات بیشتر درباره OCR و مقایسه برترین نرم افزار های نویسه خوان سیستم عامل های ویندوز، اندروید و iOS ، مقاله ی زیر را مطالعه کنید.

مقاله : ۲۲ برنامه برتر نویسه خوان ( OCR ) در سال ۲۰۲۰

یافتن مجموعه داده و حاشیه نویسی تصاویر

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

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

اولین مجموعه داده ها بر اساس مجموعه داده های Achraf KHAZRI است که بر روی Kaggle منتشر شده است، می باشد. با توجه به تصاویر موجود، می توان حدس زد که آن ها در تونس گرفته شده و برچسب گذاری شده اند، اما ما از فایل XML استفاده نمی کنیم ، زیرا ما می خواهیم خودمان مجموعه داده ها را حاشیه نویسی کنیم.

5تشخیص پلاک
نمونه ای از تصاویر مجموعه داده Achraf KHAZRI

همچنین ما تعدادی تصویر هم از گوگل گرفتیم که در نهایت تعداد آن ها به تصویر رسید. 

تصاویر را حاشیه نویسی کنید :

برای حاشیه نویسی تصاویر، از مخزن GitHub متعلق به Sebastian G. Perez استفاده خواهیم کرد. این یک برنامه ساده Flask است که حاشیه نویسی تصویر را انجام می دهد و یک فایل .csv را با ۷ ستون قالب بندی شده به روشی ایجاد می کند که با استفاده از Turi Creat به راحتی قابل استفاده است.

برای آموزش یک مدل ، به یک فایل .csv با ۷ ستون نیاز داریم که شامل اطلاعات زیر باشد:

  • image -> نام فایل تصویر
  • id -> id حاشیه نویسی
  • name -> نام برچسب ( پلاک خودرو )
  • xMin -> حداقل مقدار x کادر محصور کننده *
  • xMax -> حداکثر مقدار x کادر محصور کننده
  • yMin -> حداقل مقدار y کادر محصور کننده
  • yMax -> حداکثر مقدار y کادر محصور کننده

* کادر محصور کننده حاشیه ای را در محدوده شی رسم می کند تا به مدل ما اجازه داده شود تا شیء و هویت آن را در تصویر استخراج کند. برای آموزش یک مدل تشخیص شی ، محدوده اتصال باید کلیه ویژگی های مهم یک شی خاص را در بر بگیرد.

آموزش مدل

آموزش بسیار ساده و سر راست است. این آموزش با GPU رایگان تسلا K80 که توسط Google ارائه شده است انجام می شود و با این وجود باز هم محاسبات بسیاری دارد.

جالب اینجاست که زمان آموزش با تعداد تصاویر و برچسب ها بصورت خطی افزایش می یابد ، که خوب است. مدتی طول کشید تا Turi Creat  استفاده از GPU روی Colab را پشتیبانی کند، اما اکنون این نسخه به خوبی کار می کند.

در اینجا لینک این پروژه را در نوتبوک Colab می توانید مشاهده کنید.

ساخت نرم افزار iOS

ایجاد یک پروژه جدید :

برای شروع، باید یک پروژه iOS با یک برنامه نمایشی واحد ایجاد کنیم. اطمینان حاصل کنید که Storyboard را در منوی کشویی “رابط کاربری” انتخاب کنید ( فقط برای Xcode 11 ) :

تشخیص پلاک6
ساخت پروژه جدید

اکنون پروژه ما آماده راه اندازی است. ما برای انجام این پروژه از Storyboard استفاده نمی کنیم و برنامه ساخته شده در این آموزش بصورت کد نویسی است است.

برای دنبال کردن این روش، باید main.storyboard را پاک کنید و پرونده SceneDelegate.swift (فقط برای Xcode 11) خود را مانند کد زیر تنظیم کنید:

برای Xcode 11 ، شما باید فایل Info.plist را مانند تصویر زیر تغییر دهید :

تشخیص پلاک7

شما باید ” Storyboard Name ” را در پرونده حذف کنید و تقریبا کار تمام است.

ViewController اصلی

UIViewController اصلی ما شامل این عناصر خواهد بود:

  • Video Capture View -> گرفتن پیش نمایش دوربین زنده
  • DrawingBoundingBoxView -> ترسیم کادر محصور کننده
  • UILabel -> نمایش شماره پلاک

نمایش Video capture

ما از کلاس VideoCapture  ساخته شده توسط Eugene Bokhan که در مخزن Awesome-ML موجود است استفاده می کنیم. بدین صورت :

  • برای میزبانی VideoCapture یک نمونه UIView ایجاد کنید
  • VideoCapture را در چرخه عملکرد  viewWillAppear اجرا کنید
  • VideoCapture را در چرخه عملکرد viewWillDisappear متوقف کنید
  • VideoCapture را با تعداد فریم در ثانیه و همچنین کیفیت فیلم تنظیم کنید. ما VGA 640×480 را برای گرفتن FPS ثابت توصیه می کنیم
  • نمایشگر VideoCapture را طوری تنظیم کنید تا با AVCaptureVideoDataOutputSampleBufferDelegate مطابقت داشته باشد

نمای کادر محصور کننده

نمونه ای از DrawingBoundingBoxView ساخته شده توسط tucan9389 ایجاد کنید. این نما، بالاترین لایه نمای زیرین خواهد بود و کادر محصور کننده را ترسیم می کند:

یک UILabel برای نمایش شماره پلاک خودرو طراحی کنید

layout را تنظیم کرده و آن را به نمای زیرین اضافه کنید.

مدل CoreML را کنترل کنید

این بخشی است که در آن مدل و همچنین شناسایی کننده ی متن را کنترل می کنیم.

در اینجا توضیح چگونگی انجام این کار آورده شده است :

  • یک درخواست برای بررسی mlmodel. با استفاده از یک completionHandler مخصوص طراحی کنید
  • یک درخواست برای شناسایی متن با یک completionHandler ایجاد کنید
  • برای انجام هر دو درخواست، vision handler را فراخوانی کنید
  • پیش بینی را از مدل بگیرید و کادر ها را ترسیم کنید
  • برای به دست آوردن متن و به روزرسانی برچسب با متن شناخته شده، تصاویر را کنترل کنید

نتیجه گیری

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

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

این پروژه برای دانلود از حساب GitHub نویسنده در دسترس است.

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

منبع Heartbeat/button]

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

لبنان استفاده از پلاک خوان های خودکار را تایید کرد

لبنان استفاده از پلاک خوان های خودکار را تایید کرد

لبنان به تعدادی از شهرهای منطقه ملحق خواهد شد که از ALPRها استفاده می کنند …

یک نظر

  1. امیرحسین توکلی شاکر

    پلاک‌ ایران ۷۸پلاک ایران ۶۸پلاک ایران ۲۱پلاک ایران ۳۸پلاک ایران ۳۰برای حومه واستان تهران. شهرهای ورامین.پاکدشت. اسلامشهر.رباط کریم. کرج.طالقان. دماوند.فیروزکوه.لواسان.جاجرود

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

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