أصبحت أنظمة التعرف على لوحات السيارات، والمعروفة أيضًا باسم التعرف التلقائي على لوحات الأرقام (ANPR)، أدوات أساسية في إدارة المرور الحديثة، وتطبيق القانون، وحلول مواقف السيارات الذكية. تستخدم هذه الأنظمة تقنيات الرؤية الحاسوبية والتعلم الآلي للتعرف تلقائيًا على لوحات السيارات وقراءتها من الصور أو مقاطع الفيديو. في هذا الدليل، سنقدم لك المفاهيم الرئيسية وراء نظام التعرف على لوحات السيارات وكيفية بنائه باستخدام أدوات مفتوحة المصدر.
التعرف على لوحات السيارات هو تقنية تقوم باستخلاص وقراءة أرقام لوحات السيارات من الصور أو لقطات الفيديو. يتم استخدام تقنية التعرف الضوئي على الأحرف (OCR) لتحويل اللوحة المكتشفة إلى نص قابل للقراءة بواسطة الآلة.
تشمل التطبيقات الشائعة لأنظمة التعرف على لوحات السيارات:
يتكون نظام التعرف على لوحات السيارات النموذجي من الخطوات التالية:
تتوفر العديد من الأدوات والمكتبات التي تساعد في بناء نظام التعرف على لوحات السيارات، خاصة في لغة البرمجة بايثون. تشمل التقنيات الرئيسية:
إليك عملية مبسطة لبناء نظام التعرف على لوحات السيارات باستخدام OpenCV وTesseract OCR.
الخطوة الأولى هي التقاط صور للمركبات. يمكنك استخدام:
بعد التقاط الصور، يتم تمريرها إلى النظام للمعالجة.
تساعد المعالجة الأولية في تحسين دقة اكتشاف اللوحات من خلال تحسين جودة الصورة. تُستخدم تقنيات مثل تحويل الصور إلى تدرجات الرمادي، وإزالة الضوضاء، وتطبيق تقنيات العتبة.
import cv2
# تحميل الصورة
image = cv2.imread('car_image.jpg')
# تحويل الصورة إلى تدرجات الرمادي
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# تطبيق التمويه الغاوسي لإزالة الضوضاء
blurred = cv2.GaussianBlur(gray_image, (5, 5), 0)
# تطبيق كشف الحواف
edges = cv2.Canny(blurred, 30, 200)
# عرض الصورة المعالجة
cv2.imshow('Preprocessed Image', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
تشمل هذه الخطوة الكشف عن المنطقة في الصورة التي تحتوي على لوحة السيارة. يمكنك استخدام تقنيات اكتشاف الكنتور في OpenCV لتحديد المناطق المستطيلة التي تحتوي على اللوحات المحتملة.
# العثور على الكنتورات في الصورة
contours, _ = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# حلقة على الكنتورات
for contour in contours:
# الحصول على المساحة التقريبية ورسم مربع حول اللوحات المحتملة
perimeter = cv2.arcLength(contour, True)
approximation = cv2.approxPolyDP(contour, 0.02 * perimeter, True)
# التحقق من الأشكال المستطيلة (اللوحات عادةً مستطيلة)
if len(approximation) == 4:
x, y, w, h = cv2.boundingRect(contour)
license_plate = gray_image[y:y+h, x:x+w]
cv2.imshow('License Plate', license_plate)
cv2.waitKey(0)
break
بمجرد اكتشاف اللوحة، تكون الخطوة التالية هي تقسيم كل حرف في اللوحة. يتم ذلك باستخدام الكشف عن الكنتور مرة أخرى داخل منطقة اللوحة المكتشفة لعزل الأحرف الفردية.
بعد عزل اللوحة وتقسيم أحرفها، يمكننا استخدام Tesseract OCR للتعرف على الأحرف.
import pytesseract
# استخدام Tesseract OCR لقراءة لوحة السيارة
text = pytesseract.image_to_string(license_plate, config='--psm 8')
print(f"لوحة السيارة المكتشفة: {text.strip()}")
بعد التعرف على الأحرف، يمكن تطبيق المعالجة اللاحقة لتحسين الدقة. قد يشمل ذلك: