آموزش و پیاده سازی الگوریتم OCR برای شناسایی حروف و اعداد

OCR مخفف عبارت Optical Character Reader است که با کمک آن می توان با پردازش تصویر به شناسایی حروف و اعداد پرداخت.  شناسایی حروف و اعداد با پردازش تصویر بر پایه ی الگوریتم OCR شامل دو مرحله ی اساسی می باشد : مرحله ی آموزش و مرحله ی شناسایی. در مرحله ی آموزش حروف مورد نظر توسط برنامه شناخته می شوند و  به عبارت دیگر ابتدا نیاز است که حروف و اعداد مورد نظرمان را به برنامه شناسایی کنیم و در مرحله ی شناسایی می توانیم آنها را بخوانیم. در این مقاله نحوه ی پردازش تصویر برای شناسایی حروف لاتین با پیاده سازی یک مثال به صورت پله به پله در نرم افزار HALCON شرح داده خواهد شد.

برای ثبت نام در “دوره ی آموزشی بینایی ماشین با نرم افزار هالکن ” اینجا کلیک کنید.

آموزش  پیاده سازی شناسایی حروف و اعداد( OCR) به کمک نرم افزار پردازش تصویر HALCON

نرم افزار HALCON بهترین نرم افزار پردازش تصویر جهت پیاده سازی بسیاری از پروژه های پردازش تصویر است.  این نرم افزار ساخت شرکت آلمانی MVtec است،  که در آن به سادگی می توان با چند خط کد شناسایی حروف و اعداد ( OCR) را پیاده سازی نمود. همچنین در  مثالهای آماده ی پردازش تصویر با نرم افزار هالکن چندین مثال از آموزش و پیاده سازی الگوریتم OCR  آورده شده است.برای دیدن مثالهای بیشتر در شناسایی حروف و اعداد می توانید  نرم افزار HALCON  دانلود و نصب نمایید و به جستجوی مثال مورد نظر بپردازید (آموزش جستجوی مثالهای مورد نظر در نرم افزار  HALCON را در مقاله “ 1000 پروژه ی پردازش تصویر با سورس کدهای آماده ” مطالعه نمایید)

همانطور که گفته شد شناسایی حروف بر پایه ی دو مرحله ی اصلی هستند که هر مرحله دارای چندین بخش است. تصویر زیر این مراحل را به همراه برنامه ی نوشته شده در نرم افزار HALCON نمایش می دهد. مرحله ی آموزش فقط برای یک بار انجام می شود و نتایج آموزش دیده شده ذخیره می شود تا در شناسایی لغات استفاده شوند. در ادامه ی مقاله تک تک مراحل به همراه زیر بخش های آن تشریح می گردد.

آموزش ocr با نرم افزار halcon

مرحله ی اول : آموزش  حروف و اعداد با OCR

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

مرحله ی آموزش دارای چهار بخش زیر است:

1- تصویر برداری جهت پیاده سازی OCR

اولین مرحله برای پردازش تصویر برای شناسایی حروف ، دریافت تصاویر است در واقع برای آموزش نیاز است تعدادی تصویر از حروف و اعداد خود داشته باشیم که در آن تمامی حروف و اعداد مورد نظرمان حداقل یک بار وجود داشته باشند. برای پیاده سازی مثال با نرم افزار هالکن از یک وب کم معمولی USB  استفاده شده است که سایز تصویر آن 480*640 می باشد و روی یک پایه قرار گرفته است.

خواندن حروف با دوربین usb | تیم ویژن سیستم

2- شناسایی حروف و اعداد

جهت پردازش تصویر برای شناسایی حروف در این مرحله نیاز داریم حروف را پیدا کنیم. ما در این مرحله با استفاده از پردازش تصویر حروف را پیدا می کنیم. بدین منظور ما در اینجا از تابع get_regions استفاده می کنیم با استفاده از آن می توانیم حروف را پیدا کنیم. این تابع عکس ورودی را گرفته و در خروجی ناحیه ی لغات در تصویر را ( SortedRegions ) به ما می دهد.

 get_regions (Image, SortedRegions)

Image: تصویر ورودی

SortedRegions : ناحیه ی حروف بدست آمده

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

تکنولوژی ocrتکنولوژی خواندن حروف و اعداد

3- کلاس بندی حروف و اعداد با الگوریتم OCR

مرحله ی سوم از فرآیند  آموزش در پردازش تصویر برای شناسایی حروف، مشخص کردن کلاس برای حروف است. در این مرحله برای حروف پیدا شده یک کلاس تعریف می کنیم به عبارت دیگر در مرحله ی قبل ما ناحیه ی هر یک از تصاویر را پیدا کردیم و حالا ناحیه ی R را به حرف R ، ناحیه ی S  را به حرف S و…  اختصاص می دهیم. بنابراین به هر یک از حروف یک کلاس اختصاص می یابد به ناحیه هایی مثل I که چند بار تکرار شده اند. تنها یک کلاس تعلق می گیرد.

Classes:=[‘V’,’I’,’S’,’O’,’N’,’Y’,’T’,’E’,’M’,’.’,’R’]

Classes : کلاس های تعریف شده برای ناحیه ها

برای مشخص کردن کلاس ها برای حروف از تابع Define_Classes  استفاده شده است این تابع عکس ، ناحیه ها ( ناحیه هایی که از تابع get_regions بدست آمدند) و کلاس ها (Classes ) را می گیرد و متغییر ها را به کلاس ها نسبت داده و نتیجه را برای مرحله ی آموزش ذخیره می نماید.

Define_Classes (Image, SortedRegions, Classes)

Image: عکس ورودی

SortedRegions: ناحیه هایی که از تابع get_regions بدست آمدند.

Classes : کلاس های تعریف شده برای ناحیه ها

کلاس بندی حروف با ocr

4- آموزش حروف و اعداد با OCR

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

تابع Train بدین منظور آماده شده است که ورودی آن ناحیه ها یی است که در مراحل قبل بدست آمده اند. علاوه بر آن فایل ذخیره شده در مرحله ی قبل نیز (مرحله ی سوم) در این تابع فراخوانی می شود. خروجی تابع Train متغیری است به نام OCRClass که در آن اطلاعات آموزش دیده ذخیره شده است ، OCRClass فایل خروجی اصلی حاصل از آموزش است که برای خواندن حروف در مرحله ی بعد مورد استفاده قرار خواهد گرفت. ذر این فایل در واقع ویژگی های مربوط به هر ناحیه استخراج و ذخیره شده است.

Train (SortedRegions, OCRClass)

SortedRegions: ناحیه هایی که از تابع get_regions بدست آمدند.

OCRClass : یک فایل خروجی که در آن اطلاعات آموزش دیده شده ذخیره شده است.

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

مرحله ی دوم :مرحله ی شناسایی حروف و اعداد با الگوریتم OCR

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

1- تصویر برداری جهت پیاده سازی OCR

ما مشابه مرحله ی آموزش بایستی تصاویر مورد نظر خود را از روی فایل یا دوربین بخوانیم. در این مثال ما قبلا تصاویر را با استفاده از نرم افزار HALCONذخیره نموده ایم و حالا آنها را با استفاده از تابع read_image به ترتیب در یک حلقه ی for فراخوانی می نماییم. این فرایند را می توانید در عکس ابتدای مقاله در برنامه ی HALCON مشاهده نمایید.

2-شناسایی حروف و اعداد

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

 get_regions (Image, SortedRegions)

Image: تصویر ورودی

SortedRegions : ناحیه ی حروف بدست آمده

3- کلاس بندی حروف و اعداد با الگوریتم OCR

با استفاده از تابع Classify این کار را انجام می دهیم این تابع  SortedRegions  (ناحیه ی بدست آمده از تابع  get_regions) را به عنوان ورودی دریافت می نماید و سپس و با استفاده از آن اطلاعات آموزش دیده شده که در OCRClass موجود است حروف موجود در تصویر را شناسایی می کند. پردازش تصویر برای شناسایی حروف با این تابع به سرعت انجام خواهد شد.

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

Classify (SortedRegions, OCRClass, Words)

SortedRegions : ناحیه ی حروف بدست آمده.

OCRClass :   اطلاعات حاصل از مرحله ی آموزش.

Words:جروف خوانده شده. متغییر Words در تصویر زیر برابر با Words:=[‘V’,’I’,’S’,’I’,’O’,’N’,’S’,’Y’,’S’,’T’,’E’,’M’,’S’,’.’,’I’,’R’] خواهد شد که روی تصویر چاپ شده است.

پیاده سازی و آموزش ocr

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

میتوانید برای انجام پروژه های خود از متخصصان ما مشاوره بگیرید.

مطالب مرتبط

2 دیدگاه برای “آموزش و پیاده سازی الگوریتم OCR برای شناسایی حروف و اعداد

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

نشانی ایمیل شما منتشر نخواهد شد.