سیستم تشخیص پلاک خودرو با Raspberry Pi و Node-RED

در این پروژه شما یاد خواهید گرفت که چگونه با استفاده از Raspberry Pi و Node-RED سیستم شناسایی خودرو طراحی کنید. برای این پروژه از نرم افزاری به نام OpenALPR (تشخیص خودکار پلاک خودرو) استفاده شده که دارای API است و می توان با استفاده از آن پلاک های خودرو و مدل های خودرو را بر اساس تصویر شناسایی کرد.

شناسایی خودرو

بررسی اجمالی

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

در ابتدا، یک ماشین با استفاده از OpenALPR و Node-RED شناسایی خواهد شد.

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

تصویر زیر نحوه عملکرد فرآیند شناسایی خودرو را نشان می دهد:

تشخیص پلاک خودرو با Raspberry pi

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

سنسور اثر هال ( Hall effect ) : تغییرات در میدان مغناطیسی را هنگام نزدیک بودن ماشین حس می کند.

حسگر اولتراسونیک : فاصله تا جسم مورد نظر را تشخیص می دهد.

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

هنگامی که سنسور حرکت را تشخیص می دهد، دوربین Raspberry Pi عکس می گیرد. پس از آن ، Pi درخواستی را با عکس ماشین به OpenALPR ارسال می کند تا خودرو را شناسایی کند. سپس ، OpenALPR API جزئیات اتومبیل را به صورت زیر به کاربر برمی گرداند: شماره پلاک، مدل، رنگ و تایید نتایج.

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

پروژه تشخیص پلاک خودرو با Raspberry Pi

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

پیش نیازها :

شما باید با Raspberry Pi آشنا باشید – شروع به کار با Raspberry Pi این آموزش را بخوانید.

شما باید Raspbian یا Raspbian Lite را در Raspberry Pi خود نصب کنید – طریقه ی نصب Raspbian Lite، فعال سازی و اتصال با SSH را از این قسمت بخوانید.

ما از ماژول Raspberry Pi Camera V2 استفاده خواهیم کرد، خواندن این مقاله را به شما توصیه می کنیم: راهنمای Raspberry Pi Camera V2 Module.

شما نیاز به Node-RED روی Pi خود دارید و Node-RED باید آماده عکس گرفتن با دوربین Pi باشد.

قطعات مورد نیاز

برای این پروژه به قطعات زیر نیاز دارید:

قطعات شناسایی خودرو
  • بورد Raspberry Pi 4 Model B – مقاله بهترین کیت های Raspberry Pi را بخوانید
  • ماژول دوربین Raspberry Pi Camera V2 
  • کارت MicroSD – 16 گیگابایت کلاس ۱۰
  • منبع تغذیه (Raspberry Pi (5V 2.5A
  • سنسور حرکت Mini PIR یا سنسور حرکت PIR
  • مقاومت (۲۲۰ یا ۳۳۰ اهم باید کار کند)
  • برد بورد
  • سیم های جامپر

ماژول دوربین Raspberry Pi را وصل کنید

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

شناسایی خودرو4

شما همچنین باید Node-RED را در Pi خود نصب کرده و node-red-contrib-camerapi را نیز نصب کنید:

شناسایی خودرو 5

شماتیک طرح

مدار را برای تست این پروژه آماده کنید. دیاگرام شماتیکی که در زیر آورده شده است را دنبال کنید:

شناسایی خودرو 6

پس از آماده سازی Raspberry Pi و پیکربندی نرم افزار Node-RED ، می توانید پروژه را ادامه دهید.

OpenALPR

OpenALPR یک کتابخانه شناسایی خودکار پلاک خودرو متن باز است که در ++ C با اتصالاتی در C # ، Java ، Node.js ، Go و Python نوشته شده است. این سیستم همچنین دارای OpenALPR Cloud API هست که یک وب سرویس در فضای ابری است و تصاویر وسایل نقلیه را تجزیه و تحلیل می کند و نتایج را همراه با پلاک، مدل، رنگ و موارد دیگر ارائه می دهد. OpenALPR Cloud API دارای یک سرویس رایگان است که اجازه می دهد تا ۲۰۰۰ شناسایی رایگان در هر ماه داشته باشید.

توجه : به جای استفاده از Cloud API که فقط به ۲۰۰۰ شناسایی در ماه محدود می شود، می توانید نرم افزار Open Source آن ها را نصب کرده و از ادغام Python برای نوشتن اسکریپت های Python برای تجزیه و تحلیل تصاویر نامحدود استفاده کنید. به این ترتیب دیگر نیازی به استفاده از سرویس ابری این سیستم نیست و فقط به ۲۰۰۰ درخواست در ماه محدود نمی شوید.

کشورهای تحت پوشش

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

شناسایی خودرو 7

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

برای تشخیص پلاک های ایرانی از طریق Raspberry Pi ، می توانید از نسخه لینوکس کتابخانه تشخیص پلاک ساتپا استفاده کنید.

ایجاد حساب کاربری رایگان

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

شناسایی خودرو 8

برگه Cloud API را باز کنید تا به Secret Key خود دسترسی پیدا کنید. برای درخواست از API به آن نیاز دارید.

شناسایی خودرو 9

Secret Key خود را در مکانی امن ذخیره کنید، زیرا به زودی به آن احتیاج خواهید داشت.

آزمایش دوربین و سرویس OpenALPR

اول، شما باید با شناسایی ماشین خود با استفاده از دوربین Pi و سرویس OpenALPR شروع کنید. بنابراین، با مثال ارائه شده ای که عکس را می گیرد و از API ابری OpenALPR برای شناسایی ماشین شما استفاده می کند شروع کنید. برای وارد کردن جریان Node-RED ارائه شده ، به مخزن GitHub بروید و کد ارائه شده را کپی کنید.

[{"id":"b75c360b.5cfb68","type":"exec","z":"edbc86db.6e9fb8","command":"sudo curl -X POST \"https://api.openalpr.com/v2/recognize?secret_key=Your_Secret_Key&recognize_vehicle=1&country=eu&return_image=0&topn=10\" -F [email protected]/home/pi/Pictures/car-photo.jpeg","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"cURL POST","x":744.5,"y":1823,"wires":[["90e5a95a.7db098"],[],[]]},{"id":"90e5a95a.7db098","type":"json","z":"edbc86db.6e9fb8","name":"JSON","pretty":false,"x":891,"y":1810.5,"wires":[["507a78d0.68c218"]]},{"id":"76990845.65cb78","type":"camerapi-takephoto","z":"edbc86db.6e9fb8","filemode":"1","filename":"car-photo.jpeg","filedefpath":"0","filepath":"/home/pi/Pictures/","fileformat":"jpeg","resolution":"3","rotation":"0","fliph":"0","flipv":"0","brightness":"50","contrast":"0","sharpness":"0","imageeffect":"none","name":"Take Photo","x":578.5,"y":1824,"wires":[["b75c360b.5cfb68"]]},{"id":"507a78d0.68c218","type":"debug","z":"edbc86db.6e9fb8","name":"","active":true,"console":"false","complete":"false","x":1042.5,"y":1810,"wires":[]},{"id":"9ba2e4d7.b859a8","type":"inject","z":"edbc86db.6e9fb8","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":422,"y":1824,"wires":[["76990845.65cb78"]]}]

 

بعد، در پنجره Node-RED ، در گوشه بالا سمت راست ، منو را انتخاب کرده و به Import> Clipboard بروید.

شناسایی 10

سپس، کد ارائه شده را پیست کرده و Import را کلیک کنید. گره های بعدی باید در جریان شما نشان داده شوند:

جریان شناسایی خودرو

پیکربندی جریان آزمایش

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

جریان شناسایی خودرو2

گره را ویرایش کنید تا همان تنظیماتی که در شکل بعدی نشان داده شده است را داشته باشید:

  • نام پرونده : car-photo.jpeg
  • مسیر پیش فرض پرونده : No
  • مسیر پرونده : / home / pi / Pictures /
شناسایی خودرو 11

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

آماده سازی درخواست OpenALPR Cloud API

روی گره cURL POST دوبار کلیک کنید:

شناسایی خودرو 12

سپس ، قسمت Command را تغییر دهید تا Secret Key و کد کشور خود را وارد کنید:

شناسایی خودرو 13

به طور پیش فرض ، باید این دستور را داشته باشد :

sudo curl -X POST "https://api.openalpr.com/v2/recognize?secret_key=YOUR_SECRET_KEY&recognize_vehicle=1&country=YOUR_COUNTRY_CODE&return_image=0&topn=10" -F [email protected]/home/pi/Pictures/car-photo.jpeg

 

Secret Key خود را که قبلاً بازیابی کرده اید و کد کشور خود را اضافه کنید:

sudo curl -X POST "https://api.openalpr.com/v2/recognize?secret_key=sk_8081041caedd50a---------&recognize_vehicle=1&country=eu&return_image=0&topn=10" -F [email protected]/home/pi/Pictures/car-photo.jpeg

 

توجه: اتحادیه اروپا یک کشور نیست ، اما اگر در هر کشوری در اروپا زندگی می کنید ، از کد کشور اتحادیه اروپا استفاده می کنید.

دستور دقیق خود را در قسمت Command در گره cURL POST کپی و جایگذاری کنید و برای اعمال تغییرات ، دکمه Deploy را در نرم افزار Node-RED خود فشار دهید:

جریان شناسایی خودرو 3

آزمایش جریان

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

شناسایی خودرو 14

دوربین را به سمت ماشین قرار دهید و برای ایجاد جریان ، روی مربع کنار گره زمان ضربه بزنید.

جریان شناسایی خودرو 4

باید با دوربین Pi عکس گرفته ، آن را در /home/pi/Pictures/car-photo.jpeg ذخیره کرده و از API ابری درخواست کنید تا صفحه و مدل ماشین شما را شناسایی کند. باید پاسخ JSON را در پنجره Debug چاپ کند.

درک پاسخ سیستم

پنجره اشکال زدایی (debug) را باز کنید ، باید یک شی با تمام جزئیات مربوط به پاسخ JSON مشاهده کنید. آرایه نتایج باید حداقل یک نتیجه داشته باشد (array[1]) ، در غیر این صورت ممکن است در حال تجزیه و تحلیل یک عکس بدون ماشین باشد یا نمی تواند ماشین را شناسایی کند (اطمینان حاصل کنید که هنگام گرفتن عکس دوربین Pi به سمت ماشین باشد)

جریان شناسایی خودرو 5 (2)

روی پیکان کنار results: array[1] کلیک کنید تا شی گسترش یابد. شما باید یک صفحه پلاک را با پلاک ماشین خود ببینید. صفحه ماشین را با فرمت بازیابی شده توسط API ذخیره کنید. بعداً برای شناسایی ماشین خود به آن نیاز خواهید داشت:

جریان شناسایی 6

شی vehicle  > make_model > 0: object را گسترش دهید و باید نام ماشین خود و نحوه شناسایی مدل خودرو توسط API را مشاهده کنید. در مورد پروژه ما این خودرو را با اطمینان ۷۷٫۲٪ به عنوان Toyota Yaris معرفی کرد. ما باید رشته دقیق “toyota_yaris” بازیابی شده توسط API را ذخیره کنیم ، زیرا برای جریان بعدی به آن نیاز داریم. مدل اتومبیل خود را در قالب بازیابی شده توسط API ذخیره کنید.

جریان شناسایی خودرو 7

نکاتی در ارتباط با عیب یابی

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

  • گره Take Photo عکس را در مسیر پرونده مناسب ذخیره می کند: / home / pi / Pictures /
  • اطمینان حاصل کنید که دوربین عکس های خوبی گرفته است (به پوشه Raspberry Pi Pictures در /home/pi/Pictures/car-photo.jpeg دسترسی پیدا کنید تا ببینید آیا عکس گرفته شده خوب به نظر می رسد یا نه)
  • ببینید آیا در عکس ماشین و پلاک ماشین دیده می شود یا خیر ، در غیر این صورت API نمی تواند ماشین را به درستی شناسایی کند
  • مطمئن شوید که با دستور API و کد کشور خود، دستور درستی را در قسمت دستور cURL POST وارد کرده اید

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

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

برای وارد کردن جریان Node-RED ارائه شده ، به مخزن GitHub بروید یا برای مشاهده پرونده خام روی شکل زیر کلیک کنید و کد ارائه شده را کپی کنید.

بعد ، در پنجره Node-RED ، در گوشه بالا سمت راست ، منو را انتخاب کرده و به Import> Clipboard بروید.

جریان شناسایی خودرو 8

سپس ، کد ارائه شده را پیست کرده و Import را کلیک کنید. گره های بعدی باید در جریان شما بارگیری شوند:

جریان شناسایی خودرو 9

پیکربندی جریان

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

جریان شناسایی خودرو 10

گره را ویرایش کنید تا همان تنظیماتی که در شکل بعدی نشان داده شده است را داشته باشید:

نام پرونده: car-photo.jpeg

مسیر پیش فرض پرونده: No

مسیر پرونده: / home / pi / Pictures /

جریان شناسایی خودرو 11

آماده سازی درخواست OpenALPR Cloud API

روی گره CURL POST دوبار کلیک کنید:

جریان شناسایی خودرو -

سپس، قسمت Command را تغییر دهید تا Secret Key و کد کشور خود را وارد کنید:

جریان شناسایی خودرو12

به طور پیش فرض، باید این دستور را داشته باشد:

sudo curl -X POST "https://api.openalpr.com/v2/recognize?secret_key=YOUR_SECRET_KEY&recognize_vehicle=1&country=YOUR_COUNTRY_CODE&return_image=0&topn=10" -F [email protected]/home/pi/Pictures/car-photo.jpeg

 

Secret Key و کد کشورتان را که قبلا دریافت کرده اید وارد کنید:

sudo curl -X POST "https://api.openalpr.com/v2/recognize?secret_key=sk_8081041caedd50a---------&recognize_vehicle=1&country=eu&return_image=0&topn=10" -F [email protected]/home/pi/Pic

 

جزئیات خودرو خود را به جریان اضافه کنید

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

جریان شناسایی خودرو 13

شما باید carPlate و carModel را با پلاک خوردو و نام مدل خودروی خود جایگزین کنید (دقیقاً در همان قالب قبلی که قبلاً بازیابی شده است). در مورد تحقیق ما خروجی بهش کل زیر است:

var carPlate = "61CP--";
var carModel = "toyota_yaris";

 

شکل زیر مکانی را نشان می دهد که باید پلاک و مدل ماشین خود را در گره عملکرد اضافه کنید:

جریان شناسایی خودرو 14

توجه : اگر می خواهید پلاک خودرو دیگری را اضافه کنید ، باید عملکرد “Identify Car” را ویرایش کنید. پلاک خودروی دوم و مدل آن را اعلام کنید:

var carPlate2 = " ";
var carModel2= " ";

 

سپس ، بعد از عبارت موارد دیگر، اطلاعات زیر را اضافه کنید:

else if(msg.payload.results[0].plate==carPlate2 && msg.payload.results[0].vehicle.make_model[0].name==carModel2){
  msg.payload=1;
  global.set("garageOpen","1");
}

 

این امر به شما امکان می دهد دو ماشین را تأیید کنید (می توانید تعداد بیشتری را اضافه کنید).

پس از افزودن جزئیات خودرو، کلید Done را فشار دهید و روی دکمه Deploy  کلیک کنید:

جریان شناسایی خودرو 15

نمایش نتایج

حالا، وقتی ماشین می رسد سنسور PIR حرکت را تشخیص می دهد ، دوربین Pi عکس می گیرد و ماشین با استفاده از OpenALPR API شناسایی می شود.

تشخیص پلاک خودرو با Raspberry pi

Node-RED شما باید پلاک اتومبیل و مدل ماشین شما را شناسایی کند. سپس یک رویداد را فعال می کند: GPIO 17 را برای چند ثانیه روشن می کند و سپس خاموش می شود. این دستور در واقع باز و بستن درب گاراژ را شبیه سازی می کند.

شناسایی خودرو 16

جمع بندی

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

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

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

۱۰ ثانیه صبر می کنیم تا ” بستن درب پارکینگ” انجام شود. برای بررسی اینکه ماشین وارد پارکینگ شده است یا خیر ، باید چندین فرآیند تأیید را اضافه کنید (که ما آن ها را در جریان قرار ندادیم) .

امیدواریم این مقاله برای ایده ها و پروژه های شما مفید بوده باشد. می توانید به مطالب زیر نیز برای اطلاع بیشتر مراجعه کنید.

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

منبع Random Nerd Tutorials

درباره‌ی علی قلی زاده

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

آموزش Keras یادگیری انتقالی با استفاده از مدل های از پیش آموزش دیده

آموزش Keras : یادگیری انتقالی با استفاده از مدل های از پیش آموزش دیده

در آموزش قبلی ، نحوه استفاده از مدل هایی که برای کلاسه بندی تصویر روی …

2 نظر

  1. سلام آیا راهی برا تشخیص با آردوینو وجود داره؟

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

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