Jump to content
Compvision.ru

VironZizu

Пользователи
  • Content count

    63
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by VironZizu

  1. Приветствую! В поисках решения проблемы распознования набрел на ваш форум, очень нужен совет! Задача моя, считать поля паспорта, для распознавания, использую готовую библиотеку puma.NET, она со своей задачей отлично справляется! Но на вход ей нужно подавать естественно преобразованный скан паспорта! Нашел небольшую методику как это можно сделать, но не могу подобрать нужные методы библиотеки OpenCV, а именно использую обертку OpenCVSharp, но это уже не суть... Подскажите пожалуйста, как вырезать нужные мне области с паспорта, чтобы в распознанку не попадал всякий не нужный хлам! и как удачней затем избавиться от шума!? Конкретно: нужна область с ФИО и область "паспорт выдан" Схема того, что хочу сделать http://www.passportvision.ru/technology/ некоторые этапы понимаю как сделать, но вот выделить нужную область и избавиться от шума в виде черных точек, это проблема з.ы.Пишу для личного пользования. ИЗ просторов инета ни одной бесплатной библиотеки не нашел
  2. Смотрел, ничего полезного для себя не нашел. Примеры для нахождения прямоугольников не отрабатывают для моего случая, так как после бинаризации, когда начинаю искать контуры как там предлагается, он далеко не всегда нужный квадрат находит, так как сканы иногда засвечивают изображения, особенно если документ положить ближе к краю. По моему мнению правильней было бы реализовать через Хью лайнс, он отрабатывает неплохо, но куча лишних линий естественно получается, из них всех нужно как то по пробовать построить прямоугольные области, вот ломаю голову, как!? Если бы находил конкретно 4 линии, было бы все намного проще.
  3. Smorodov Приветствую!) Появилось снова время немного заняться проектом, решил усовершенствовать механизм обнаружения паспорта, все таки сделать через Хью лайнс. Подскажите пожалуйста, вот у меня получился скоп линий, как мне из них построить прямоугольник? Нужна математическая магия судя по всему))
  4. По пробовал сам разобраться, но не получилось. Случаем нету примера как узнать этот усредненный цвет внутри контура? Я так понимаю у одинаковых букв эти цвета должны будут примерно совпадать!? Это было бы здорово!
  5. Спасибо большое за наводку! а то год бы разбирался!)) Продолжаю шлифовать свой алгоритм удаления шумов, уже неплохо, но удаляются периодически и нужные запчасти. Появилась одна идейка, вот хочу узнать, возможно ли реализовать! Вот у меня есть контур, мы смотрим цвет внутри этого контура, если он похож на цвет внутри другого контура, то оставляем, если не похож, то удаляем. Больше всего кончено смущает момент "если похож")) может у вас есть какие-нибудь мысли по этому поводу))
  6. По игрался с инверсиями и все получилось, спасибо!) Получилось убрать мелкие шум с изображения, я доволен)осталось научиться как то аккуратней его удалять, а то бывает что с мелким шумом и части букв удаляешь)) Непонимаю, при выполнении собственно копирования с маской появляется такой дибильный эффект с верху! Из за чего это может быть? Причем на разных изображениях одна хрень)) эти полоски) Cv.Copy(src, dstMask, Mask);
  7. ну немного не то, если я контуры залью черным в них полезные грани замажутся. Мне именно нужно чтобы я замазал все изображение, но содержимое контуров осталось не тронутым!
  8. Интересно) П о работал с гистограммами, ничего полезного из них вытащить не смог) всял значение константу, вроде для всех вариантов отрабатывает неплохо!) Есть ещё одна идея, но не знаю как реализовать в коде, у меня есть контуры, как закрасить всю область кроме внутринностей этих конутров?) инверсию контуров как то сделать или как?)
  9. По пробовал Adaptive Threshold результаты лучше! Но там я параметры задаю в ручную допустим srcGray.AdaptiveThreshold(dst, 255, AdaptiveThresholdType.MeanC, ThresholdType.Binary, 20); block size = 20. Для некоторых вариантов этот параметров хорошо отрабатывает, но для некоторых нужен немного другой, как можно для адаптивной бинаризации выщитывать этот блок сайз? к чему можно привязатся? Потому что я смотрю, он лучше справляется чем обычный Threshold. Некоторые еле видные грани не сжираются, а некоторые слишком жирные не становятся жирнее... з.ы. Работаю с областью "кем, где выдан"
  10. Еще небольшой вопрос, вот у меня есть бинаризация Отсу grayClone.Threshold(grayClone, 0, 255, ThresholdType.Otsu); Я так понимаю этот метод заключается в том, что высчитывается средний порог и применяется. А если мне нужно высчитать средний порог и потом его применить к обычной бинаризации, как это можно сделать? Вот сюда: grayClone.Threshold(grayClone, 0, 255, ThresholdType.Binary); На сколько я понимаю этот порог задается в обычной Binary там где у меня 0!? З.ы. Для чего это мне нужно, чтобы можно было средний порог в небольших пределах по варировать! И сделать скоп разных бинаризаций отталкивающихся от среднего!
  11. Smorodov, Обалденно!!! На выходных засяду этот код под мой C# врапер подгонять!) Просто огонь!)
  12. mrgloom Идея про уменьшение кстати очень даже хороша, взял на вооружение, заметно шустрей отрабатывает! Я понимаю, что у меня бинаризация в печали, немного не понял что за пример вы скинули, я так понимаю это не OpenCV? Смотрю ваши примеры, очень хороши бинаризация получилась! такие контуры я думаю бы в легкую нашлись, жалко я пока повторить не могу)) image->type->8 bit color->8bit image->adjust Auto threshold\Auto local threshold. Вот это, что имеется ввиду? не совсем уловил) Есть ещё такой ньюанс, если положить паспорт прямо у кромки, то получается, что кромка как бы обрезается, и этот метод совсем уже не срабатывает, пробовал как вариант у скана дорисовывать рамку в 2 пикселя, но это тоже не помогло,у него тогда не получается все нужные прямоугольники найти!
  13. Nuzhny, по тестил LCD метод интересный, пример с купюрой нашел целый скоп прямых, как только их потом объединить в квадраты и выбрать еще нужный?) Мне кажется сложноватый способ для моей задачи) Пробую дальше через квадраты, выяснил почему не может найти полный контур паспорта, когда он лежит рядом с кромкой, получается при Tresholding граница сканируемого изображения немного засвечивается и поэтому алгоритм уже не может нужный внешний контур найти, сейчас покажу пример, может по советуете чего: Как я ищу: 1) делаю небольшое размытие 2)затем Threshold 3)затем FindContours ищу конутры 4)далее Cv.ApproxPoly и у меня повялется куча наборов точек(контуры) 5)Далее сортируем нужные мне с нужными углами и размерами. 6) Повторяем процесс с другими параметрами в Threshold И та кручу этот цикл и области отлично находятся, вот единственная проблема с краями и засветами, пробовал Канни, а он долго отрабатывает, циклов 10 если поставить так вообще жуть)
  14. Nuzhny пробовал загуглить lsd) как и ожидалось вылезла целая туча статей про наркоту))) можно по подробней по нему? тяжело реализовывается? средставами OpenCV? Smorodov Я прочитал и общей картины не получил)) Видимо это действительно пушка, которую я с трудом осилю)) Сейчас попробую контуры по моментам по сравнивать, хотя затея глупая конечно, потому что для каждого паспорта он всегда рандомно эту прямоугольную область находит(с половинкой паспорта), то верхнюю половинку, то нижнюю. Думал искать область, потом переворачивать изображение на 180 и заново пробовать искать, но логику пока додумать не могу, что с этими двумя областями делать... Опять же, при тестах он мог так одну и ту же половинку паспорта находить при переворотах, а мог разные... Оказалось я немного подтупил, мой метод находит все таки нужную мне страничку, оказалось я неправильно отсортировываю! Но остается маленький ньюанс, как отличить верхнуюю страничку от нижней?)) размеры и площади то у них одинаковые!)))
  15. Взял для тестов несколько паспортов, результат жутко расстроил, положил паспорт с обложкой, мой алгоритм с ним не отработал, кароче из 5 штук, 2 нормально отработали... В связи с этим вопрос обнаружения границ паспорта снова актуален) ибо я уже без сил, как его границы еще находить вообще не понимаю, там столько ньюансов получается, что очуметь
  16. Да, наверное я не так спрашиваю, медианную фильтрация делаю и так, в частности размытие Гаусса. Получается я нахожу позиции паспорта, и потом нарезаю примерно ту область где находится нужный мне текст, естественно для разных паспортов эта область не получается пиксель в пиксель, и получается что в кадр попадают не нужные предметы, а тессеракт при распозновании очень болезненно на них реагирует. Лучше для примера я выложу сами картинки, допустим с полями Фамилия, Имя, Отчество: Так вот, в область попала верхняя кромка, она на паспорте идет чуть ниже сердцевины, по свойствам она похожа на буквы, как удалять её, вообще не понятно мне)
  17. Ребят, а есть еще идеи по удалению мусора с картинки, кроме как по цвету и по размеру отсортировывать? А то этот алгоритм срабатывает только конкретно с моим паспортом, стоит взять что-нибудь другое и все!) начинаются косяки! Как то все таки нужно мух от котлет отделять, а именно буквы... Пока у меня плохо сортируются контуры которые по размеру совпадают с контурами букв и я вот не знаю как к ним еще подлезть!?))
  18. Тогда в поиске паспорта смысла нет его применять...
  19. А есть какой нибудь материал по обучению? в идеале на русском)) У меня есть пример реализации Хаара, но там xml файл лица ищет) а мне бы паспорта, может удасться переобучить)) и у него удасться даже наклоненные документы находить? прям грани показывать будет? или получится только приблизительная область с паспортом?
  20. Вроде как сделал переворот, но как то он мне не нравится, не красиво реализован чтоли, пока так кончено оставлю, но в планы себе запишу более удачно реализовать! Ребят, а такой вопрос, реально каскады Хаара обучить на нахождение паспорта на скане? Чисто случайно наткнулся на него, очень интересный вариант, просто время реализовать уже нет. Прочитал пару статей на хабре, очень занимательно! Может уже есть где-нибудь обучные xml? пока только на лица находил и на автомобильные номера. На лица у меня отрабатывает так себе, много мусора, так может с прямоугольными областями у него лучше получится?)
  21. Собственно как и ожидалось, выдал кучу ложных областей, причем они были ничуть не меньше нужной, да и выполнялся он 1.5сек, а это уже перебор наверное, алгоритм и так уже 4 сек отрабатывает!)) боюсь что дальше будет))
  22. Про матрицу поворота спасибо! Нашел шикарный способ как с её помощью нужные мне точки повернуть!)) А вот про поиск лица я как то и не задумывался раньше, сейчас опробую, тут в примере есть, самому интересно!)) Другое дело, что как обычно наверняка кроме лица еще кучу мусорных обектов найдет))
  23. И еще такой вопрос у меня появился, вот поворот изображения то я сделал, а как повернуть на этот же угол найденные мной координаты паспорта? А то не хочется их терять и заново алгоритмы поиска запускать!
  24. Smorodov Спасибо за наводку про atan2! Все отлично получилось) Дальше решил развивать мысль, если паспорт положили к верх ногами, как это определить? На данный момент у меня такая мысля: Мой алгоритм находит прямоугольную область, где находятся поля: паспорт выдан, дата выдачи. Печать и роспись ещё, в общем эту страничку находит. Думаю если паспорт лежит в правильном положении, то эта область должна быть сверху! Если соответственно паспорт перевернут, то эта область должна быть снизу!) Но это какое то решение в лоб)) опять буду привязываться к константам... Может у контуров ещё есть какие нибудь интресные свойства по которым можно от сортировать нужный мне?) или можно не по контурам а по конкретным точкам, но опять же, непонятно как... только привязываться к конкретным цифрам, а так не хочется
  25. Ребят, такой вопрос, если у меня паспорт допустим лежит под углом небольшим, у меня есть линия, по которой можно выровнять изображение, как это можно сделать? Rotate то я делать умею, а вот как угол узнать? Если у меня есть координаты границ паспорта?
×