Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Распознавание рукописного текста


Автор: PavelK 25.10.2005, 08:34
Привет всем.

Хочу написать простенький распознователь рукописного текста.

Предпологается что, "на вход" поступает картинка. В ней содержится текст и возможно рисунки. Необходимо распознать то что возможно и затем сохранить в виде текста с не расспознаными фрагментами картинки.

Интересно обменятся идеями по поводу построения распознователя.
Добавлено @ 08:38
Я себе это предстовляю так:

Забить в базу шаблоны букв в виде векторов. А затем выделять на картинке обекты, разбивать их на вектора и сравнивать.

Автор: Alexeis 25.10.2005, 09:43
Задача распознования рукописного текста весьма сложная.
Прежде чем приступить к реализации лучше подумать хватит ли сил.
Компания Finereader так и не сумела решить эту задачу на должном уровне

Автор: PavelK 25.10.2005, 09:52
Я и не собираюсь заниматся этим хотя бы на уровне Finereader. Просто хочу покрутить эту тему и понять основные принципы (а вдруг чего и придумаем).

Вобщем-то я вроде в начале написал, что хочу получить простенькую программу.

Автор: z-END 25.10.2005, 09:57
Цитата(PavelK @ 25.10.2005, 09:34)
Хочу написать простенький распознователь рукописного текста

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

Автор: PavelK 25.10.2005, 10:12
Кое-какой опыт по работе с печатным текстом у меня есть. Правда, делалось все это на MatLabe. В общем там больших проблем нет (если экзотические шрифты не использовать).
Добавлено @ 10:14
Вы бы лучше идеи как это сделать подкинули, чем меня отговаривать.

Автор: Albinos_x 25.10.2005, 10:24
посмотри
http://devkhit.ksu.ru/index.php?m=7&id=6
http://devkhit.ksu.ru/index.php?m=6&a=4&n=11
http://devkhit.ksu.ru/index.php?m=6&a=4&n=9

может быть поможет

Автор: PavelK 25.10.2005, 10:55
Спасибо за ссылочки. А как бы мне не только рецензию, а и саму дипломную получить?

Автор: DragonFire 25.10.2005, 13:14
А мне кажется нужно нейронные сети использовать. Тогда прога будет распозновать буквы даже с помехами. К сожалению сам я писал только распознование гласная\согласная, но всеже...

Автор: PavelK 25.10.2005, 13:19
Нейронная сет штука хорошая, только ее напиши попробуй.
Лично я считаю, что сначала неплохо бы просто распознаватель написать, а уж потом нейроны мучить.

Автор: DragonFire 26.10.2005, 06:43
Зря ты так сразу. Почитай про нейроновые сетки. Там все просто. Есть у тебя нейрон. Ты подаешь ему на вход сигналы. Допучтим у нас буква 5х5, поэтому сигналов meltn 25: 1 - если черная клетка в букве, 0 - если белая. Нейрон твой жует твои сигналы и выдает ответ "А" это буква или нет, расчитывая это по формуле: <РЕЗУЛЬТАТ>=<сигнал1>*<Вес1>+<сигнал2>*<Вес2>+...+<сигнал25>*<Вес25>;
If <РЕЗУЛЬТАТ> > <Порог> then Буква - А, если нет, то не А.
Все здесь сводится к тому, чтобы расчитать эти <Вес> так, чтобы когда у нас поступали сигналы c буквы "А", то выражение <Результат> было больше порога, обычно он берется 1.5 или 0.5. Такой процесс называется обучением нейрона. Вот и вся задача. Обучаешь 33 нейрона - каждый на распознования своей определенной буквы - вот и Файн-Ридер написал!!! smile
Если что не понятно объяснил - спрашивай. Я не учитель... smile

smile //Offtop:
Прошу модератора разрешить прикрепить рисунок к этому сообщению, а то то что я написал не очень понятно... Плиз... smile

Автор: PavelK 26.10.2005, 12:11
Спасибо за объяснение. С нейронными сетями дело иметь тоже приходилось, так что ничего нового ты не написал. Такой метод классно работает с печатным текстом, а что выдаст твой персептрон, если на него подать рукописный? Да и выделять в тексте отдельные буквы как то нужно.

Хотя в целом идея интересная, нужно подумать толком на досуге. Давай обсудим как следует.

Автор: DragonFire 26.10.2005, 15:07
Ну да давай!
Я почиму думаю, что нейронные сети лучше. Всеравно ты не подберешь идеальной картинки для буквы рукописного текста, а нейроны распознают буквы с помехами.

Автор: Guest 26.10.2005, 17:12
Я и не собирался подбирать картинки. Я собирался входной текст представить в виде векторов. И сравнивать не сами написанные буквы с эталонными картинками, а векторное представление текста с векторным представлением каждой буквы. Причем искать буду не равные вектора, а последовательность векторов направленных приблизительно так же, как и в эталоне.

Тут тоже не лишним был бы рисунок.

Такой подход позволяет сразу исключить проблемы с размером написанных букв.
Да и отдельные буквы перед распознаванием из текста выделять не нужно. Потом сами выделятся.

Автор: PavelK 26.10.2005, 17:15
Последнее сообщение было мое. Прошу прошения забыл выполнить "вход".

Автор: DragonFire 26.10.2005, 19:15
Да возможно это так, но я не представляю как это можно реализовать практически...

Автор: PavelK 26.10.2005, 20:55
Да в общем то сама идея простая, вот только писанины многовато.

Можно рассмотреть пример. Пуст есть векторный шаблон буквы "И". Он будет представлять собой 3 вектора (первый направлен вниз, второй - вверх под углом 45 градусов, третий - тоже вниз). Берем входной текст. Преобразовываем его в векторный вид. Идем по тексту и ищем направленный в низ вектор. Если сразу за ним идет вектор направленный вверх под углом близким к углу в 45 градусов, а следующий за ними вектор направлен вниз, то мы нашли искомую букву.

Теперь вариант когда у нас есть целый алфавит шаблонов.
Берем первые вектор из текста и проверяем каким буквам он может соответствовать. Получаем некоторое кол-во вариантов. Берем следующий в тексте вектор и пытаемся сопоставить с имеющимися вариантами. И так пока не получим 100% совпадение с каким-нибудь образцом. Если совпадений нет, то пропускаем первый вектор, берем второй и повторяем выше описанное.
В итоге получаем распознанный набор букв, не обращая внимания на их размер и связки между буквами в словах.

Автор: PavelK 26.10.2005, 21:06
Самая большая проблема в этом алгоритме - это правильно выполнить преобразование текста в вектора. И в этой области есть где развернутся, хотя в распознавании образов есть (и даже не один) алгоритм как такое сделать.

Я вот все думаю над твоей идеей. Однослойная нейросеть проблему явно не решит. А как насчет более сложных вариантов?

Автор: alksoft 26.10.2005, 23:11
В принцыпе можно сделать методомо жука.
Долго писать, если нужно стучи в аську - 24 9 9 60

Автор: DragonFire 27.10.2005, 06:07
Вариант хороший, только как ты представляешь себе на практике сравнивание векторов?
На счет многослойной сети можно подумать...

Автор: PavelK 27.10.2005, 08:23
А в чем проблема с векторами? Два направленных отрезка. Нужно получить угол между ними. Это еще в школе было.

Автор: DragonFire 27.10.2005, 13:02
Ну не знаю. Хотя идея мне нравится...

Автор: RA 27.10.2005, 21:56
Цитата
Совсем скоро компания ABBYY намерена выпустить инструментарий для разработчиков (SDK) - ABBYY FineReader Engine 8.0 для Windows. В нем содержатся все имеющиеся технологии распознавания, созданные компанией ABBYY к настоящему моменту: распознавание печатных текстов (OCR), текстов, написанных от руки (ICR), меток (OMR), одномерных и двумерных штрих-кодов, обработка PDF-файлов, извлечение данных с форм и неструктурированных документов. Все функции распознавания и сбора данных из документов, форм и PDF-файлов, доступны через единый универсальный API (Application Programming Interface).
 
В новой версии продукта улучшены возможности полнотекстового распознавания документов, впервые появится полный набор функций, рассчитанный для распознавания текста на уровне отдельных полей. ABBYY FineReader Engine 8.0 распознает печатный текст на 189 языках, а поля, заполненные печатными буквами от руки - на 91 языке. Новая версия имеет возможность настройки на необходимую точность за счет влияния на выбор гипотез, сформированных в процессе распознавания.

В новой версии ПО появилась функция диагностики, которая позволяет отследить все вызовы функций ABBYY FineReader Engine и измерить скорость их работы.

ABBYY FineReader Engine 8.0 будет поставляться в комплекте с примерами кода, демонстрирующими использование продукта в различных типовых сценариях работы. Каждый пример представляет собой небольшую программу, которую можно скомпилировать и изучить, как она работает. Приведены описания оптимальных параметров, в комплекте даны типовые изображения и данные по скорости работы и качеству распознавания. Примеры могут использоваться разработчиками в качестве шаблонов при создании своих собственных программ и решений.

ABBYY FineReader Engine поставляется в виде набора динамически подключаемых библиотек (DLL). Интерфейс прикладного программирования (API) ABBYY FineReader Engine поддерживает стандарт COM (Component Object Model) и позволяет создавать приложения в средах разработки C/C++, Visual Basic, Visual Studio.Net и любых других, поддерживающих COM-компоненты.

В продажу новая версия ABBYY FineReader Engine 8.0 поступит уже в ноябре. Более подробно ознакомиться со всеми новыми возможностями продукта можно здесь.

Источник: Компьюлента

Автор: sergejzr 27.10.2005, 22:44
RAdmin, смысл не в результате, а в пути к нему smile Интересная ведь идея. Вот только я не очень понимаю, почему вектор для Буквы и описан как:
Цитата
Он будет представлять собой 3 вектора (первый направлен вниз, второй - вверх под углом 45 градусов, третий - тоже вниз).

А почему не:

вниз -> вниз под углом 45 -> вниз.

Добавлено @ 22:45
Вообще то можно не вектор, а кривые брать, Релевантны лишь начальная и конечная точка, а факторы колеблятся в пределах n.

Автор: DragonFire 28.10.2005, 06:02
И вообще почему именно три вектора? Как ты собираешся описывать букву "М" или "Ш" тремя векторами, а с "О", это вообще сложно будет разобратся...

Автор: Guest 28.10.2005, 12:41
Три вектора я взял только для буквы "И" как пример.
На самом деле, даже для буквы "и", их может быть больше.
И чего вы к этим трем векторам прицепились.

Автор: Guest 28.10.2005, 12:45
Уважаемый, RAdmin, подскажите пожайлуста где ты взял статейку о ABBYY FineReader Engine 8.0.

Автор: Гость_Silver 8.11.2005, 14:55
Про вектора идея не нова. У нас недавно аспирант защитил кандидатскую по распознованию, алгоритм основан на нечеткой логике(размытой логике) он там с петлями работал (что то вроде векторов smile)) ). Кстати его алгоритм очень хорош по минимизации ошибок по сравнению с западными аналогами, делал он его для КПК и вроде даже толкнул програмку за большие мани. Его автореферат попробуй найти (его зовут В. В. Киселев из Челябинского Государственного Университета)

Автор: Guest 15.1.2006, 01:06
Да возможно это так, но я не представляю как это можно реализовать практически...
smile smile smile smile smile smile smile smile smile smile smile smile smile smile

Автор: sergejzr 15.1.2006, 01:11
Вообще то темку не зря подняли. Год прошёл, может какие компоненты/алгоритмы появились на распознавание? Что скажете?

Автор: DeadSoul 15.1.2006, 01:21
Цитата(alexeis1 @ 25.10.2005, 09:43 Найти цитируемый пост)

Компания Finereader так и не сумела решить эту задачу на должном уровне

alexeis1, данная компания называется Abbyy. Finereader - это програмный продукт.

Автор: Y-Vladimir 15.1.2006, 15:11
Мы где-то полтора года назад хотели написать распознавание рукописного текста. Достигли весьма немалого, но потом у нас как-то все это заглохло, кто закончил учиться и времени стало жутко нехватать и т.д.
Можешь для начала посмотреть рецензию на диплом с нашего сайта, ссылку на который давали выше.

Цитата(sergej.z @ 15.1.2006, 01:11 Найти цитируемый пост)

год прошёл, может какие компоненты/алгоритмы появились на распознавание

Не появилось... Есть много программ по рукопечатному распознаванию (FormReader), а также онлайновому рукописному распознаванию (для КПК скажем) - это задача на много порядков проще и ее успешно решают. Но для оффлайнового распознавния ничего нету.

Автор: DeadSoul 15.1.2006, 16:53
Цитата(Y-Vladimir @ 15.1.2006, 15:11 Найти цитируемый пост)

Есть много программ по рукопечатному распознаванию (FormReader),

Это аналог Finereader от тойже компании Abbyy. Распознавалка там не отличается. Просто совфт предназначен для другого.

Автор: chaos 16.1.2006, 14:15
Цитата(DragonFire @ 27.10.2005, 06:07)
На счет многослойной сети можно подумать...

3х слойной сети(1-вохд, 2-скрытый слой, 3-выход) должно хватить! По моему даже Колмоговров доказал что практически любую задачу решаемой многослойной сетью (больше 3 слоев) можно решить сетью из 3 слоев

Автор: SoWa 16.1.2006, 20:03
Буквы можно представлять в виде матриц. Так работает Finereader но оплюс нейронные сети. В одну матрицу [8,3] можно положить 8 букв и доставать оттуда по определителю каждой буквы

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)