برنامه نویسی

پلاک را با OCR بخوانید

چکیده

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

TOC (گام به گام)

گردش کار تشخیص پلاک تجسم شده

دستور العمل

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

قبل از پیش پردازش – تصویر بریده شده از پلاک از مراحل قبلی:

تصویر خرد شده برای OCR

  1. مرحله قبل از پردازش: رنگهای desaturate. خاکستری برو

    ورودی اشباع شده برای OCR

    رنگ RGB در اینجا برای OCR مفید نیست. مهم نیست که شماره های پلاک Magenta یا Cyan باشد. بنابراین اطلاعات رنگ را دور بریزید.

  2. مرحله قبل از پردازش: تار گاوسی برای کاهش اندکی سر و صدا / مصنوعات.

    ورودی تاری برای OCR

    قسمت “گاوسی” را هرگز نبرید. این فقط استفاده از یک فیلتر تاری روی تصویر است. این فیلتر تار تفاوت های کوچک را نرم می کند. و از آنجا که اختلافات کوچک کاهش می یابد (به عنوان مثال پلاک Dirty-ish) ، تفاوت های بزرگی برای تشخیص آسانتر است (به عنوان مثال Dark-Nbsers در زمینه سفید).

  3. مرحله قبل از پردازش: آستانه برای برجسته کردن شخصیت های پلاک

    ورودی آستانه برای OCR

    آستانه برجسته های بیشتر در جایی که ما تفاوت های بزرگی از قبیل شماره های تیره در زمینه سفید را داریم.

  4. پلاک OCR

    OCR بدون پیش پردازش

    من در اینجا با یک دسته از کتابخانه های OCR آزمایش کردم. من بهترین حالت را برای این استفاده کردم که Paddleocr ، بهتر از Tesseract و برخی دیگر بود. Paddleocr را روی تصویر آستانه اجرا کنید و متن رشته ای ، شماره پلاک را دریافت کنید ، از تصویر برگردید!

  5. سود!

import cv2
from paddleocr import PaddleOCR, draw_ocr
from ppocr.utils.logging import get_logger
import logging

# Initialize PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang='en', use_space_char=True)
logger = get_logger()
logger.setLevel(logging.ERROR) # avoid debug statements in OCR results

#baseDir="/Users/japollock/Projects/TrainHighwayCarDetector/"
baseDir = '/home/pi/Projects/TrainHighwayCarDetector/'
img_path = baseDir + 'photos/yolo_licensePlates/croppedPlates/IMG_4554_0002.jpg'

print("Human readable is CEZ2594")

img = cv2.imread(img_path)

gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

blur = cv2.GaussianBlur(gray, (5,5), 0)

ret, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)

# Perform OCR
result = ocr.ocr(thresh, cls=True)

for line in result:
    print(line)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چاپ خروجی بیانیه

[[[[14.0, 29.0], [181.0, 22.0], [184.0, 76.0], [17.0, 83.0]], ('CEZ2594', 0.9654235243797302)]]

پلاک را می خوانیم! تعداد در سمت راست رشته اعتماد به نفس یعنی 96.5 ٪ ~ با اعتماد به نفس صحیح است. و شماره های سمت چپ مختصات جعبه محدود است. 🥳

لینک بعدی: همه آن را با هم ببندید: تشخیص پلاک پایان به پایان

پیوست: منابع

پیوست: نکات جالب

ممکن است مردمی تعجب کنند: چرا فقط تصویر اصلی را انجام نمی دهیم؟ شما می توانید اما این همان چیزی است که شما دریافت می کنید:

OCR بدون پیش پردازش

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

نوشته های مشابه

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

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

دکمه بازگشت به بالا