Мммммм тва с разпознаването на регистрационни табели във видео не е толкова лесна работа, доста оптимистично съм гледал на нещата

Първо, изчетох отгоре-отгоре няколко paper-а за да видя големите глави как подхождат към проблема с разпознаването на символи. Явно масово прилаганото решение е трениране на SVM класификатор (статистически метод, не съм разбрал още достатъчно добре как работи, но на първо четене странно напомня на марковските вериги дето ги ползвах в hashkill-а за да генерирам пароли по модел, трениран от речник ).
SVM модела се тренира с HOG хистограми. Доколкото се опитах да разбера що е то HOG, не мога въобще да разбера защо това нещо работи. В бедните ми представи за нещата, би трябвало да имаме ужасно много false позитиви от съвсем различно изглеждащи обекти (или обратно, негативи от ужасно сходни). Та това е нещо, което трябва да се опитам да разбера като хората.
В OpenCV няма готова функция, която да смята въпросните HOG хистограми, та срам не срам преправях чужд код.
Извън това че още не мога да осмисля теорията зад тези две явления като хората (което е огромен проблем и така става с тъпи и нетърпеливи хора), все пак успях да нахвърлям някаква груба основа за нещата - тренирам SVM модела (отвратителна работа, много ръчен труд, свързан с рязане и оразмеряване на картинки, който засега не съм автоматизирал като хората).
Входните данни за модела (за български регистрационни номера) ми е следния (след сума ти къртовски труд):
http://postimg.org/image/62iykuxf3/За всеки възможен символ имаме три изображения, върху които смятаме въпросните хистограми на ориентирани градиенти. Това е ужасно малко и големите глави твърдят че ще ми трябват поне едно стотина като за начало ако искам прилична акуратност. Е заклевам се, успея ли някога да го постигна това, НЯМА да го споделям безплатно - тъпия скучен упорит труд си заслужава заплащане - и както човек може да се досети, готови модели няма (изключай усилията на един пич да направи същото за испанските регистрационни табели, където отсъстват няколко букви).
Както и да е, с този беден модел, резултатът е следния:
http://postimg.org/image/ea6a2uuxb/И има ужасно много проблеми.
Първият очевиден проблем идва от кофти модела - символите А, 8 и Т се разпознават като "0". Всъщност, на някои кадри, 8 успешно се разпознава, но A и T - никога.
Вторият проблем - сегментацията ми не е перфектна и трябва да я подобря. Понякога влизат грешни контури и съсипват всичко, въпреки всичките тези малоумни проверки. Не е критично, но съсипва доволно кадри, в които иначе бихме имали шанс да познаем номера. Проблемът тук е крив, защото осъзнах какъв е проблема (идиотския алгоритъм след морфологичните операции започва да вярва че разстоянието между буквите всъщност е затворен контур) - за което лесни евристични проверки няма, понеже въпросния контур твърде много напомня на варианта с "о" или нула - макар и разкривена. Трябва някакъв по-интелигентен механизъм за тва. Единствения "тъп" критерии, който ми хрумва е rounding rect-овете на отделните букви да не се презастъпват и за тези където има презастъпване да не правим сметки, това може би ще сработи, но ще срине още производителността.
Третият проблем - производителността, сега 25fps видео се срива до около 2-3 fps в следствие на всички тези сметки. Но видеото е 720p в крайна сметка, а доста неща има за оптимизиране, така че това не ми е проблема. Бавенето не идва от SVM разпознаването, идва от сегментацията, която при мен е доста....деазнам, малко като руския цар подхождам към проблема. Има голям мегдан за подобрение.
Като цяло се нервирам, ще се окаже все пак играчка това.