خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

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

از این پروژه برای تمرین اصول اولیه OCR و پردازش تصویر استفاده کنید.

https://static0.makeuseofimages.com/wordpress/wp-content/uploads/2023/01/license-plate-detection-featured-image.jpeg فناوری تشخیص و تشخیص پلاک مجوز کاربردهای زیادی دارد. می توان از آن در سیستم های جاده ای، پارکینگ های بدون بلیط، اقامتگاه های کنترل دسترسی وسایل نقلیه و موارد دیگر استفاده کرد. این فناوری بینایی کامپیوتر و هوش مصنوعی را ترکیب می کند. شما از پایتون برای ایجاد یک برنامه تشخیص و تشخیص پلاک خودرو استفاده خواهید کرد. این برنامه تصویر ورودی را می گیرد، آن را برای شناسایی و تشخیص پلاک پردازش می کند و در نهایت کاراکترهای پلاک را به عنوان خروجی نمایش می دهد.

https://static0.makeuseofimages.com/wordpress/wp-content/uploads/2023/01/license-plate-detection-featured-image.jpeg فناوری تشخیص و تشخیص پلاک مجوز کاربردهای زیادی دارد. می توان از آن در سیستم های جاده ای، پارکینگ های بدون بلیط، اقامتگاه های کنترل دسترسی وسایل نقلیه و موارد دیگر استفاده کرد. این فناوری بینایی کامپیوتر و هوش مصنوعی را ترکیب می کند. شما از پایتون برای ایجاد یک برنامه تشخیص و تشخیص پلاک خودرو استفاده خواهید کرد. این برنامه تصویر ورودی را می گیرد، آن را برای شناسایی و تشخیص پلاک پردازش می کند و در نهایت کاراکترهای پلاک را به عنوان خروجی نمایش می دهد.

راه اندازی محیط پایتون

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

قبل از شروع کدنویسی، باید چند کتابخانه را در محیط خود نصب کنید. هر IDE پایتون را باز کنید و یک فایل پایتون ایجاد کنید. هر دستور را روی ترمینال اجرا کنید تا کتابخانه مربوطه نصب شود. شما باید قبلاً پایتون PIP را روی رایانه خود نصب کرده باشید.

  • OpenCV-Python: شما از این کتابخانه برای پیش پردازش تصویر ورودی و نمایش تصاویر خروجی مختلف استفاده خواهید کرد. pip نصب OpenCV-Python
  • imutils: شما از این کتابخانه برای برش تصویر ورودی اصلی به عرض دلخواه استفاده خواهید کرد. pip install imutils
  • pytesseract: شما از این کتابخانه برای استخراج کاراکترهای پلاک خودرو و تبدیل آنها به رشته ها استفاده خواهید کرد.

pip install OpenCV-Python

pip install imutils

pip install pytesseract

Tesseract OCR چیست و چگونه آن را روی رایانه خود نصب کنید

Tesseract OCR موتوری است که می تواند کاراکترهای یک زبان را تشخیص دهد. قبل از استفاده از کتابخانه pytesseract باید آن را روی رایانه خود نصب کنید. برای انجام این کار:

  1. هر مرورگر مبتنی بر کروم را باز کنید
  2. تنظیمات Tesseract OCR را دانلود کنید
  3. Setup را اجرا کرده و مانند هر برنامه دیگری نصب کنید
مطلب مرتبط:   شروع با Go

با آماده سازی محیط و نصب tesseract OCR، آماده کدنویسی برنامه هستید.

1. واردات کتابخانه ها

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

import cv2
import imutils
import pytesseract

شما باید کتابخانه OpenCV-Python را به عنوان cv2 وارد کنید. کتابخانه های دیگر را با همان نام هایی که برای نصب آنها استفاده کردید وارد کنید.

2. گرفتن ورودی

سپس pytesseract را به محلی که موتور Tesseract در آن نصب شده است، قرار دهید. با استفاده از تابع cv2.imread تصویر ماشین را به عنوان ورودی بگیرید. نام تصویر را با نام تصویری که استفاده می کنید جایگزین کنید. تصویر را در همان پوشه پروژه خود ذخیره کنید تا کارها آسان شود.

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
original_image = cv2.imread('image3.jpeg')

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

3. پیش پردازش ورودی

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

original_image = imutils.resize(original_image, width=500 )
gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateralFilter(gray_image, 11, 17, 17)

4. تشخیص پلاک در ورودی

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

انجام تشخیص لبه

با فراخوانی تابع cv2.Canny شروع کنید که به طور خودکار لبه های تصویر از پیش پردازش شده را تشخیص می دهد.

edged_image = cv2.Canny(gray_image, 30, 200)

از این لبه ها است که خطوط را پیدا خواهیم کرد.

مطلب مرتبط:   وراثت مدل در جنگو چیست؟

پیدا کردن خطوط

تابع cv2.findContours را فراخوانی کنید و یک کپی از تصویر لبه دار را ارسال کنید. این تابع خطوط را تشخیص می دهد. با استفاده از تابع cv2.drawContours، اطراف خطوط شناسایی شده روی تصویر اصلی را بکشید. در نهایت، تصویر اصلی را با تمام خطوط قابل مشاهده ترسیم کنید.

contours, new = cv2.findContours(edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
cv2.drawContours(img1, contours, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)

این برنامه تمام خطوطی را که روی تصویر ماشین پیدا می کند به طور مشخص ترسیم می کند.

ماشینی با تمام خطوط قابل رویت با علامت سبز

پس از پیدا کردن خطوط، باید آنها را مرتب کنید تا بهترین نامزدها را شناسایی کنید.

مرتب سازی خطوط

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

contours = sorted(contours, key = cv2.contourArea, reverse = True)[:30]

# stores the license plate contour
screenCnt = None
img2 = original_image.copy()

# draws top 30 contours
cv2.drawContours(img2, contours, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

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

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

چرخش بر روی 30 کانتور بالا

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

count = 0
idx = 7

for c in contours:
    # approximate the license plate contour
    contour_perimeter = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.018 * contour_perimeter, True)

    # Look for contours with 4 corners
    if len(approx) == 4:
        screenCnt = approx

        # find the coordinates of the license plate contour
        x, y, w, h = cv2.boundingRect(c)
        new_img = original_image [ y: y + h, x: x + w]

        # stores the new image
        cv2.imwrite('./'+str(idx)+'.png',new_img)
        idx += 1
        break

# draws the license plate contour on original image
cv2.drawContours(original_image , [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("detected license plate", original_image )

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

مطلب مرتبط:   نحوه پیاده سازی سیستم سلامت و آسیب در گودو

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

5. تشخیص پلاک شناسایی شده

تشخیص شماره پلاک به معنای خواندن کاراکترهای روی تصویر برش خورده پلاک است. تصویر پلاکی را که قبلاً ذخیره کرده اید بارگیری کرده و نمایش دهید. سپس تابع pytesseract.image_to_string را فراخوانی کرده و تصویر پلاک برش خورده را ارسال کنید. این تابع کاراکترهای تصویر را به رشته تبدیل می کند.

# filename of the cropped license plate image
cropped_License_Plate = './7.png'
cv2.imshow("cropped license plate", cv2.imread(cropped_License_Plate))

# converts the license plate characters to string
text = pytesseract.image_to_string(cropped_License_Plate, lang='eng')

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

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

6. نمایش خروجی

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

print("License plate is:", text)
cv2.waitKey(0)
cv2.destroyAllWindows()

خروجی مورد انتظار برنامه باید مشابه تصویر زیر باشد:

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

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

مهارت های پایتون خود را تقویت کنید

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

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