مقدمه : برای پروژه ی احراز هویت کاربر توسط کارت ملی هوشمند , تعدادی داده (تصویر کارت ملی) جمع آوری شد که پردازش برخی از این داده ها بخاطر زاویه و مقیاسی که داشتند امکان پذیر نبود به این خاطر تصاویر به صورت دستی توسط برنامه ی Camscanner تراز و سپس برش داده شدند.برنامه ی تراز کردن کارت ملی برای انجام خودکار این فرایند نوشته شده است.
روند کار :
- پیدا کردن چهره در تصویر
- چرخاندن تصویر طبق زاویه ی چهره ی چرخش یافته
- پیدا کردن چشم ها در تصویر
- تراز کردن صورت و فاصله ی بین چشم ها
- تغییر سایز تصویر طبق مقیاس اصلی کارت ملی
- برش تصویر به کمک چشم ها مطابق سایز اصلی کارت ملی
- پیدا کردن لبه ی کارت ملی در تصویر
- یافتن خطوط افقی لبه ی کارت ملی
- چرخش و برش نهایی کارت طبق Hough Lines
- باینری کردن تصویر (حذف پس زمینه کارت)
- استخراج اطلاعات کاربر
پیدا کردن چهره در تصویر
ابتدا برای یافتن چهره در کارت های چرخش یافته شبکه های چندکاره (multitask model) و سپس شبکه ی MTCNN بررسی شد.اما این شکبه های عمیق اغلب قادر به شناسایی چهره ی نرمال شده ی کارت ملی (توسط فیلتر ICAO) نبودند و یا چهره را در زوایای متفاوت شناسایی نمی کردند به این خاطر برای یافتن چهره از OpenCV Haar Cascades استفاده شد .
*** برای حفظ اطلاعات افراد از تصاویر ساختگی استفاده شده است.
نمونه ی خروجی :


چرخاندن تصویر طبق زاویه ی چهره ی چرخش یافته
روش اصلی Haar Cascades که برای تشخیص چهره مورد استفاده قرار گرفت، تنها چهره های جلو (frontal faces) را تشخیص می دهد. اگر چهره مقداری شیب داشته باشد شناسایی نخواهد شد (که باعث می شود چشم ها نیز در چنین شرایطی شناسایی نشوند).
برای حل این مشکل از روش انتقال خودکار (AFFINE TRANFORMATION) تشخیص شیب در سطح تصاویر چرخش یافته استفاده شد.
ماتریس دوران را می توان برای یک تصویر چند (n) بعدی پس از آنکه اندازه، مرکز و زاویه ی چرخش مورد نیاز شناخته شده باشد پیدا کرد.
پس از محاسبه ی زاویه ی چرخش تصویر ،طبق موقعیت پیشانی چهره زاویه ی آن را محاسبه می شود.با مقایسه ی زوایای بدست آمده تصویر چرخانده می شود.
نمونه خروجی :



پیدا کردن چشم ها در تصویر
پس از چرخاندن تصاویر چشم ها به کمک OpenCV Haarcascade Eye شناسایی میشوند.برای شناسایی دو روش بررسی شد، ماسک (mask) کردن محدوده صورت در کارت و روش معمول OpenCV.
اگر با مقیاس(scale) سخت گیرانه تری چشم ها شناسایی شوند، ممکن است برخی نقاط حروف و یا صفر های موجود در کارت ملی نیز به عنوان چشم شناخته شوند از این رو با ماسک کردن صورت می توان از این خطا ها جلوگیری کرد.
خروجی روش اول:


خروجی روش دوم :

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

تغییر سایز تصویر طبق مقیاس اصلی کارت ملی
با توجه به مقیاس کارت ملی هوشمند (فاصله ی ثابت بین دو چشم بر طول آنها) اندازه تصویر تغییر میکند.
برش تصویر به کمک چشم ها مطابق سایز اصلی کارت ملی

پس از تغییر سایز تصویر با توجه فاصله ی چشم ها از راست، چپ، بالا و پایین تصویر را با کمی حاشیه (padding) برش داده می شود.
پیدا کردن لبه ی کارت ملی و یافتن خطوط افقی در تصویر
ابتدا تصویر برش داده شده توسط فیلتر filter2D صاف (smooth) شد و با لبه یاب canny لبه های اطراف کارت ملی پیدا شد.
نمونه خروجی لبه یاب :


تبدیل خط هاف بر روی خروجی تصویر لبه یاب کَنی اعمال می شود. و از میان خروجی هاف دو خط افقی را در نظر گرفته می شود و مطابق زاویه ی بین این دو و فاصله شان کارت مجددا چرخانده میشود و برش میخورد.
نمونه خروجی های نهایی:

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


سورس کد :
شبکه های اجتماعی