Проблема с алгоритмом распознавания

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Nick Bober
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 29.10.2003 (Ср) 17:13
Откуда: Kiev

Проблема с алгоритмом распознавания

Сообщение Nick Bober » 15.12.2004 (Ср) 20:33

Хай, All
Задача такая: после сканирования анкеты, на имеющейся битмапе найти рамочку с подписью, изъять подпись и сохранить.
Внимание вопрос: как собственно найти энту рамочку? Как отличить рамочку от простой линии? Может кто занимался, задача вроде нередкая?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 16.12.2004 (Чт) 10:00

Это, Батенька, целая наука. Finеreader SDK тебе поможет.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Nick Bober
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 29.10.2003 (Ср) 17:13
Откуда: Kiev

Сообщение Nick Bober » 16.12.2004 (Чт) 16:03

FineReader SDK вероятно стоит копеечку немалую - это неподходит.
Есть идея такая -
Код: Выделить всё
'квадрат 6х6 при заполнении черным более 2/3 будем считать точкой
Dim FillCount as Integer
StepsX=PictureBox.Width
StepsY=PictureBox.Height
    For x = 1 To StepsX Step 20
        For y = 1 To StepsY
            If pBox.Point(x, y) = 0 Then
                FillCount = 0
                For i = 0 To 5
                    For j = 0 To 5
                        If pBox.Point(x + i, y + j) = 0 Then
                            FillCount = FillCount + 1
                        End If
                    Next j
                Next i
                If FillCount >= 24 Then НАШЛИ ТОЧКУ НАДО ЕЕ КУДА-ТО СОХРАНИТЬ
            End If
        Next y
    Next x

Зная размеры рамки, из точек найденых на одной вертикали можно найти две точки, расстояние между которыми приблизительно равно (ведь рамка может быть немного наклонена) высоте рамки. После прохода по всей оси Х получим верхнюю и нижнюю линии рамки (f(x)=ax+b). Аналогично для оси Y. Имея все линии можно найти точки их пересечения и угол наклона рамки.
Теперь вопросы: как лучше хранить координаты найденых точек? Как в массиве координат точек быстро найти две между которыми определенное расстояние (сравнивать каждую с каждой ИМХО не самый быстрый способ)? И как повернуть изображение на достаточно малый угол без искажений?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.12.2004 (Чт) 16:51

Вот потому он и стоит копеечку, что решает все эти проблемы :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Nick Bober
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 29.10.2003 (Ср) 17:13
Откуда: Kiev

Сообщение Nick Bober » 16.12.2004 (Чт) 17:23

FineReader SDK решает так же и множетво не стоящих передо мной проблем, поэтому покупку считаю неоправданной. А как насчет ответов на вопросы?

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 16.12.2004 (Чт) 22:01

Да, это действительно целая наука, и в посте не ответишь так просто :wink:
А наука эта называется - обучаемые нейронные сети, и поверь, когда я писал анализатор всего навсего цифр от 0 до 9, написанных от руки, получилось около 20 классов, 10 модулей и несколько UserControl'ов а проект весил около... Мм.. 20Мб :)
Оно тебе так надо? Есть же FineReader (ну или еще какая-нить OCR'ка у которой известности по меньше и денег просит соответственно меньше)

ЗЫ: а на написание анализатора ушла весь мой летний отдых (а это не много, ни мало - 3 месяца, как ты знаешь) :arrow:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 17.12.2004 (Пт) 1:20

xolod писал(а):Да, это действительно целая наука, и в посте не ответишь так просто :wink:
А наука эта называется - обучаемые нейронные сети, и поверь, когда я писал анализатор всего навсего цифр от 0 до 9, написанных от руки, получилось около 20 классов, 10 модулей и несколько UserControl'ов а проект весил около... Мм.. 20Мб :)
Оно тебе так надо? Есть же FineReader (ну или еще какая-нить OCR'ка у которой известности по меньше и денег просит соответственно меньше)

ЗЫ: а на написание анализатора ушла весь мой летний отдых (а это не много, ни мало - 3 месяца, как ты знаешь) :arrow:


Ну началось в колхозе утро.....
Из серии что я когдато слышал краем уха на летнем отдыхе...

100% Распознавание подписи :lol: :lol: а? неплохо !!!!! можно узнать где это реализовано в FineReader ?


итак по теме

Как я понял из топика челы заполняют отпечатанные Анкеты.
ты их сканируешь с постоянным разрешением и пр.

Разумеется у "полей ввода" анкет есть некие координаты и они будут фиксированными.

тебе требуется сохранить образ подписи в БД.
ну так что тебе мешает найти подпись по заранее известным координатам?

Очистить анкету от шаблона можно путем "вычитания"
"'эталонного образа шаблона" из образа "заполненной анкеты"

Если лень возиться с этим то посмотри NotateXpress от http://www.pegasusimaging.com/

Nick Bober
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 29.10.2003 (Ср) 17:13
Откуда: Kiev

Сообщение Nick Bober » 17.12.2004 (Пт) 14:10

Ну хоть один ответ по теме, спасибо Кодмайстер.
Сканирую я, конечно же, область только с рамкой в которой подпись, естественно знаю примерные координаты и размеры. Беда в том, что криворукие юзеры могут криво или с небольшим смещением положить лист, поэтому и ищу рамку, так сказать, аналитически. Алгоритм описан выше и уже в первом приближении работает. Остались программерские вопросы по реализации и оптимизации:
Как в массиве координат точек быстро найти две между которыми определенное расстояние (сравнивать каждую с каждой ИМХО не самый быстрый способ)? И как повернуть изображение на достаточно малый (а еще лучше любой) угол без искажений?

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 17.12.2004 (Пт) 15:16

to codemaster
Молодой человек, вы думайте, прежде чем постить, а не наоборот.
Что значит "100% распознование подписи"? И если вы не знаете о чем идет речь, не надо судить всех по себе :evil:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 17.12.2004 (Пт) 16:31

xolod писал(а):to codemaster
Молодой человек, вы думайте, прежде чем постить, а не наоборот.
Что значит "100% распознование подписи"? И если вы не знаете о чем идет речь, не надо судить всех по себе :evil:


to xolod
Я очень хорошо представляю о чем идет речь.

итак разберемся до конца :wink: :wink:
что собственно хочет автор топика

Nick Bober писал(а):Задача такая: после сканирования анкеты, на имеющейся битмапе найти рамочку с подписью, изъять подпись и сохранить.
Внимание вопрос: как собственно найти энту рамочку? Как отличить рамочку от простой линии?:


те надо выдернуть подпись из анкеты и сохранить
Образ подписи в БД ( прошу заметить про OCR ни слова!)

далее читаем твой ответ

xolod писал(а):Да, это действительно целая наука, и в посте не ответишь так просто
А наука эта называется - обучаемые нейронные сети, и поверь, когда я писал анализатор всего навсего цифр от 0 до 9, написанных от руки, получилось около 20 классов, 10 модулей и несколько UserControl'ов а проект весил около... Мм.. 20Мб
Оно тебе так надо? Есть же FineReader (ну или еще какая-нить OCR'ка у которой известности по меньше и денег просит соответственно меньше)


возникает резонный вопрос к чему это? а?
причем здесь OCR ? Очень хочется
"постучать по клавишам" ?
Зачем человеку морочить голову?

С большим натягом здесь можно применить технологию OMR (optical marks) и то это наверное будет лишним.


P.S. Bonus технология " анализатор цифр написанных от руки " называется ICR :wink: :wink:
[/b]

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 17.12.2004 (Пт) 17:05

OCR - Optical Character Recognition - так что по распознованию символов (а цифра, как ты знаешь, тоже символ) и ICR ты не в теме.

Пример распознования был преведен не для того, чтобы "заморочить человеку голову". Он лишь показывает, что с помощью нейроннных сетей возможно анализировать данные, имеющие откланения от эталонных.

К сожалению твой ответ подходит лишь при идеальных условиях отсканированного док-та, а если сканер обыкновенный планшетник, то документ может и криво лежать и замят где-то.

Вывод помог человеку, молодец. А вот обвинять других в мм.. некомпетентности не стоит, ибо твои доводы ломаются за несколько мгновений :wink:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Nick Bober
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 29.10.2003 (Ср) 17:13
Откуда: Kiev

Сообщение Nick Bober » 18.12.2004 (Сб) 17:56

Написал. Есть рабочая бета. Кому интересно - спрашивайте...

Там же есть волшебная рамочка для вырезания части изображения, на форуме, вроде, кто-то спрашивал.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 20.12.2004 (Пн) 12:10

xolod писал(а):OCR - Optical Character Recognition - так что по распознованию символов (а цифра, как ты знаешь, тоже символ) и ICR ты не в теме.


to xolod Трудности перевода !? :lol: :lol: :lol:
Итак для общего развития

Optical Character Recognition (OCR)
Recognize machine-printed character

Intelligent Character Recognition (ICR)
Recognize hand-printed characters

надеюь разница между hand-printed и machine-printed characters понятна :wink: :wink:

Optical Mark Recognition (OMR)
разбор марк. анкет форм большинство
OMR контролов способны автоматически позиционировать
анкеты (формы).

MICR


to Nick Bober
не знаю актуально это сейчас или нет но посмотри это:

http://ocr.apmath.spbu.ru/ocr_algor.html

Бету выкладывай в форум или в проекты . Думаю всем будет интересно

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 20.12.2004 (Пн) 19:42

Какие трудности перевода, малыш?
Залез на сайтик массачусетского универа, там есть несколько работ на тех. английском по поводу ОСR'ок, думаю, ты со своими "знаниями" наверняка подчерпнеш много нового от туда :wink:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Nick Bober
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 29.10.2003 (Ср) 17:13
Откуда: Kiev

Сообщение Nick Bober » 21.12.2004 (Вт) 11:49

2 Xolod,
камараде великан, если не сложно, ссылочку в студию.
Желательно более точную нежели www.mit.edu

2 codemaster
Спасибо. Очень актуально - всегда есть что улучшить.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 7

    TopList