Използване на оптично разпознаване на символи за идентифициране на номера на кредитни карти в

Наскоро започнахме да разработваме прототипно приложение, което ще бъде стъпка към ново, по-удобно поколение платежни системи - системи, които използват незабавно въвеждане от потребителя. Идеята за приложението дойде по време на работа с card.io, уникален по рода си проект, чието разработване ви позволява да четете броя и датата на валидност на кредитните карти през камерата на мобилно устройство. Перспективата ни завладя: ако добавите тази функция към приложенията за плащане, колко по-лесно и по-бързо ще бъде процесът на закупуване. И решихме да разработим свой собствен аналог.

Към днешна дата е направено много, но проектът все още не е завършен: на етапа на локализиране на номерата се сблъскахме с определени трудности, по решението на които продължаваме да работим сега.

Резюме на Проекта

Задачата на проекта е да разработи алгоритъм за разпознаване на номерата и датите на банковите карти чрез камерата на мобилните устройства.

Работата се проведе на четири етапа:

  • заснемане на изображение на карта
  • локализация - търсене на предложена област с текст в изображението
  • сегментиране - нарязване на локализиран текст на отделни числа
  • разпознаване на цифри

Основната трудност на задачата е, че за разлика от обикновения текст, релефните числа не контрастират с фона. В допълнение, много карти имат чертежи, които се пресичат и шумят текст. Новите карти, с техните номера, покрити със сребърна боя, се четат сравнително добре. Старо, износено - по-лошо.

Друг проблем е силното влияние на осветлението: при рязко насочена странична светлина оригиналната картина се оказва една, с дифузна челна светлина, друга.

За човешкото око и мозък тези характеристики не са проблем, но, за съжаление, нямаме излишните 100 милиарда неврони на човешкия мозък, а за цифрово оптично разпознаване тези характеристики се оказаха сериозно предизвикателство.

Има и положителни аспекти: малък диапазон от знаци - от 0 до 9, без букви; всички карти използват един и същ шрифт, където всяко число се откроява добре от другата, тоест седемте не е като едната и т.н.

Изпълнение

Заснемане на изображение на карта: обработка на кадри от камера

Етап 1. Вземете изображението в сивата скала и запишете тези стойности в алфа канала на получената текстура.

Също така оставяме оригиналните RGB канали, за да покажем на потребителя цветно изображение в края.

Етап 2. Изберете граници.

От работния поток на приложението потребителят трябва да заснеме картата в рамката в определени определени области, за да заснеме. За да се ускори заснемането, областите имат определен марж, "люфт", тоест потребителят не трябва да поставя картата точно според маркировките, следователно в заснетото изображение има някои отклонения на картата от маркировките са възможни както в перспектива, така и в ъгъла на наклона и мащаба.

символи

Изглед от приложението: заснемете банкова карта през камерата на iPhone

Задаваме необходимите области, като използваме текстура с маска на площ: области с вертикални граници - зелен канал, хоризонтални граници - червен.

използване

Пример за маска

За да намерим границите на картата, ние избираме всички граници в дадените области с помощта на оператора Sobel. Във вертикалните области използваме хоризонталната производна на яркостта, а в хоризонталните - вертикалната. По този начин ние избираме само хоризонтални или вертикални граници в съответните области.

използване

Резултатът от шейдъра

Заснемете изображение на картата: Намерете линии

След подготвителния етап за идентифициране на границите, трябва да намерим границите на картата и да подравним заснетата карта по тези граници, тъй като улавянето, както е описано по-горе, за удобство на потребителя се извършва грубо.

Задачата на този етап е да намери линиите на границите на картата и да получи техните уравнения, както и да изчисли точките на пресичане. Познавайки уравненията на линиите и точките на пресичане, можете да коригирате перспективата на картата, отместването и мащаба, да подравните картата по отношение на оста на абсцисата, т.е. програмно да я поставите точно върху етикетите.

За целите на прототипа беше решено да се използва готовата библиотека OpenCV и нейните методи за намиране на редове с помощта на пространството Hough Line Transform. В допълнение, ние също използвахме тази библиотека за адаптивна бинаризация на границите, получени по-горе. В бъдеще планираме да напишем алгоритми за тези задачи ръчно, използвайки графичен процесор, за да получим приемлива производителност.

Мобилният порт (iOS) на OpenCV не поддържа графични процесори и производителността на тази рамка спрямо предишния етап на обработка на графичния процесор е доста ниска. Следователно, за обработка с OpenCV, намалихме оригиналното изображение с линейни размери. След като получим информация за линиите в декартови координати, няма да ни е трудно да ги приведем до размерите на оригиналното изображение.