OCR مخفف عبارت Optical Character Reader است که با کمک آن می توان با پردازش تصویر به شناسایی حروف و اعداد پرداخت. شناسایی حروف و اعداد با پردازش تصویر بر پایه الگوریتم OCR شامل دو مرحله اساسی می باشد : مرحله آموزش و مرحله شناسایی. در مرحله آموزش حروف مورد نظر توسط برنامه شناخته می شوند و به عبارت دیگر ابتدا نیاز است که حروف و اعداد مورد نظرمان را به برنامه شناسایی کنیم و در مرحله شناسایی می توانیم آنها را بخوانیم. در این مقاله نحوه پردازش تصویر برای شناسایی حروف لاتین با پیاده سازی یک مثال به صورت پله به پله در نرم افزار HALCON شرح داده خواهد شد.
برای ثبت نام در “دوره آموزشی بینایی ماشین با نرم افزار هالکن” اینجا کلیک کنید.
آموزش پیاده سازی شناسایی حروف و اعداد( OCR) به کمک نرم افزار پردازش تصویر HALCON
نرم افزار HALCON بهترین نرم افزار پردازش تصویر جهت پیاده سازی بسیاری از پروژه های پردازش تصویر است. این نرم افزار ساخت شرکت آلمانی MVtec است، که در آن به سادگی می توان با چند خط کد شناسایی حروف و اعداد ( OCR) را پیاده سازی نمود. همچنین در مثالهای آماده ی پردازش تصویر با نرم افزار هالکن چندین مثال از آموزش و پیاده سازی الگوریتم OCR آورده شده است.برای دیدن مثالهای بیشتر در شناسایی حروف و اعداد می توانید نرم افزار HALCON دانلود و نصب نمایید و به جستجوی مثال مورد نظر بپردازید (آموزش جستجوی مثالهای مورد نظر در نرم افزار HALCON را در مقاله “ 1000 پروژه ی پردازش تصویر با سورس کدهای آماده ” مطالعه نمایید)
همانطور که گفته شد شناسایی حروف بر پایه دو مرحله اصلی هستند که هر مرحله دارای چندین بخش است. تصویر زیر این مراحل را به همراه برنامه نوشته شده در نرم افزار HALCON نمایش می دهد. مرحله آموزش فقط برای یک بار انجام می شو و نتایج آموزش دیده شده ذخیره می شود تا در شناسایی لغات استفاده شوند. در ادامه مقاله تک تک مراحل به همراه زیر بخش های آن تشریح می گردد.
مرحله اول : آموزش حروف و اعداد با OCR
مرحله آموزش با استفاده از تعدادی عکس انجام می گردد. ما در این مرحله به برنامه، حروف خود را یاد میدهیم، علاوه بر آن در نرم افزار HALCON تعدادی کتابخانه از قبل آموزش دیده شده وجود دارد که با استفاده از آنها می توانیم بدون انجام مرحله آموزش، پردازش تصویر برای شناسایی حروف و اعداد را انجام دهیم، از آنجایی که عموما انجام فرایند آموزش باعث بهبود نتایج خروجی می گردد ما در پیاده سازی این مثال خودمان به آموزش حروف خواهیم پرداخت.
مرحله آموزش دارای چهار بخش زیر است:
1- تصویربرداری جهت پیاده سازی OCR
اولین مرحله برای پردازش تصویر برای شناسایی حروف ، دریافت تصاویر است در واقع برای آموزش نیاز است تعدادی تصویر از حروف و اعداد خود داشته باشیم که در آن تمامی حروف و اعداد مورد نظرمان حداقل یک بار وجود داشته باشند. برای پیاده سازی مثال با نرم افزار هالکن از یک وب کم معمولی USB استفاده شده است که سایز تصویر آن 480*640 می باشد و روی یک پایه قرار گرفته است.
2- شناسایی حروف و اعداد
جهت پردازش تصویر برای شناسایی حروف در این مرحله نیاز داریم حروف را پیدا کنیم. ما در این مرحله با استفاده از پردازش تصویر حروف را پیدا می کنیم. بدین منظور ما در اینجا از تابع get_regions استفاده می کنیم با استفاده از آن می توانیم حروف را پیدا کنیم. این تابع عکس ورودی را گرفته و در خروجی ناحیه ی لغات در تصویر را ( SortedRegions) به ما می دهد.
get_regions (Image, SortedRegions)
Image: تصویر ورودی
SortedRegions : ناحیه حروف بدست آمده
در تصویر زیر نمایی از تصویر ورودی (Image) و ناحیه بدست آمده از حروف(SortedRegions) قابل مشاهده هستند دقت کنید ما در این مرحله فقط ناحیه ها را استخراج کردیم و برنامه هنوز نمیداند کدام ناحیه متعلق به کدام حرف است.
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 : کلاس های تعریف شده برای ناحیه ها
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’] خواهد شد که روی تصویر چاپ شده است.
در این مقاله مثال نوشته در نرم افزار HALCON جهت پردازش تصویر برای شناسایی حروف لاتین تشریح شد. توابعی که در این برنامه در مراحل مختلف تشریح شد حاصل ترکیب چند خط کد HALCON می باشند. نرم افزار HALCON دارای یک کتابخانه جامع از کدهایی است که به کمک انواع حروف و اعداد (پرینت شده، حکاکی شده، برجسته و…) را شناسایی نمود.
میتوانید برای انجام پروژه های خود از متخصصان ما مشاوره بگیرید.
بسیار عالی
ممنون از توجهتون .
واقعا نرم افزار پر قدرتی داری دایی جان
سایت خوب با مقالاتی بسیار بی نظیری دارین