| | | | |
Реализация простейшего алгоритма распознавания графических образов. | Полный текст материала
Цитата или краткий комментарий: «... Программа распознавания рукописных прописных русских букв и цифр на основе метода сравнения с эталонными изображениями соответствующих символов. ...» |
Важно:- Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
- Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
- При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
- Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.
Добавить свое мнение.
| | Содержит полезные и(или) интересные сведения | [1] | 10 | 100% | | | | Ничего особенно нового и интересного | [2] | 0 | 0% | | | | Написано неверно (обязательно укажите почему) | [3] | 0 | 0% | | Всего проголосовали: 10 | | | Все понятно, материал читается легко | [1] | 8 | 100% | | | | Есть неясности в изложении | [2] | 0 | 0% | | | | Непонятно написано, трудно читается | [3] | 0 | 0% | | Всего проголосовали: 8 |
[Распознавание образов]
Отслеживать это обсуждение
Всего сообщений: 1722-05-2010 08:03Сергей, а символ в вашей программе должен быть нарисован чёрным цветом на белом фоне, или Вы сделали фильтрацию картинки? |
|
22-05-2010 03:28Замечательная статья) Как начинающий программист скажу - очень помогает собраться с духом. Думаю автор этого и добивался. Действительно, куда ни зайди - все сводится к длиннющим мамематическим формулам и т.п. Алгоритим и впярм довольно прост и понятен, НО! Именно это и нужно! Никто не напишет сразу огромный проект по распознаванию чисел, букв, символов с учетом угла поворота и т.п. Тем более, если этот человек, как я, только знакомится с дельфи. У меня получилось, используя этот алгоритм, сделать программу, которая выхватывает образ с вебкамеры и распознает его) Автору ОГРОМНОЕ спасибо) |
|
24-01-2007 07:53Весьма интересная статья! Я не слишком понимаю в распознавании, и не интересовался этой темой, но именно это статья навела на свои мысли: "векторизовать" такое двухцветное изображение по-моему не очень сложно... Автор второй статьи не стал "векторизовать" символ, а предпочел "вероятностные поля". Но наверное лучше всего использовать оба подхода: и векторный и вероятностный. |
|
17-01-2007 09:29Ссылки почитал, интересно. Но почему-то не заметил, чтобы кто-то уделял внимание начальному этапу - собственно выделение образов, т.е. как заставить программу "увидеть", что такое образ. Это особенно полезно при распознавании captcha. Для этого лучше всего обратиться к имеющемуся естественному аналогу - глазу. Как глаз (+ зрительный отдел мозга) видит образ?
Два основных свойства зрения - это реакция на контраст и изменяемый фокус. Первое означает, что при распознавании образа как структуры существенное значение имеет разница между "черным" и "белым", т.е. границы символа; второе - что масштаб, при котором эти границы учитываются для компоновки в образ, может изменяться. В данном случае "фокус" не физический, а логический. Скажем, на рисунке множество символов Х составляют один большой символ Y, человек скорее всего заметит сначала второе, чем первое, к которому надо еще приглядеться. Между тем, программы типа Fine Reader часто докапываются до мелочей вроде пометок на полях или "лишних" точек, запятых и т.д.
Итак, качественное распознавание образа выполняется на нескольких (чем больше, тем точнее) уровнях, начиная с наиболее "общего", расфокусированного и "размытого" масштаба (на котором мы "увидим" Y, и до уровня отдельных пикселей и даже их "составляющих" (когда каждый пиксель воспринимается как квадрат из N*N одинаковых пикселей - может быть полезно при работе с мелкими экранными символами для уточнения их формы). В свете перехода к параллельным вычислениям заметим, что можно настроить сколько угодно параллельных потоков с разными уровнями фокусировки, в зависимости от доступных ядер и требуемой точности - в зрении тоже задействовано множество отдельных нейронов. При этом на выходе (особенно при распознавании "естественных" образов) разумнее оперировать не "квадратными" пикселями, а более естественным порядком - скажем, гексагональным (возможно, в нескольких ориентациях) - из мульти- или субпиксельных "зон". (В дальнейшем, при работе с трехмерными образами, следует учитывать, что компоненты одного и того же образа могут находиться в разных фокусах - но здесь уже задача посложнее.) При распознавании учитывается контраст (соотношение) между зонами - по яркости, и/или по спектру. Контраст может вычисляться как между соседними зонами, так и между зоной и окружающим ее фоном, по среднему (естественные образы), максимальному или минимальному (для отсева "мусора" в тексте) значению. Образом в результате будет матрица контрастов с приемлемо компактными: фокусом, цветовыми характеристиками (для captcha с переменным цветом - отключаем), пространственной целостностью, типом параметров контраста и их значениями. В случае распознавания символов стандартного текста готовый образ приводится к двумерному черно-белому, и дальше уже идет распознавание формы и сравнение с шаблонами. |
|
13-01-2007 16:21Всё круто. Очень помогло.
модернизировал алгорит и сделал маленьку базку... щас распознаёт ракописные символы от 1 до 5 и H с вероятность 99.999% Если кому надо обращайтесь поделюсь...
Автору большой спасибо.
MixaD@mail.ru
icq 215406710 |
|
29-06-2006 08:37Мне приходилось решать задачку по слитным и даже наезжающим буквам, в рамках эээ... антикэпчингового хулиганства :))))))))
Делал так:
1. берём строку и предполагаем, что она горизонтальна
2. Теперь "откусываем" от нее 1 вертикальную колонку пикселей и ищем в ней буквы
3. "Откусываем" еще столбик пикселей, стыкуем к откусанному в п.2 и ищем буквы
4. При откусывании для каждой тестовой буквы получаем распределение вероятности. Как только распределения пошли вниз - значит букву проскочили.
5. Затем рассматриваем эти вероятности, выбираем самую похожую на правду и выбираем её.
6. Выкидываем из картинки все пиксели относящиеся к распознанной букве, а саму картинку отрезаем по НАЧАЛА распознанной буквы, переходим к п.1 |
|
26-06-2006 04:22Таким вот мтодом расшифровывают только печатные символы!
Совет автору:
для увелечения процента распазнавания нужно, чтоб процен сходства 1 символа находился по формуле -
(колич. черных члеток в образце/колич. "верных" черных клеток в проверяемом изображении)
"верных" - это те которые и в образце и в проверяемом изобр. чёрные.
иначе, белые клетки имеют слишком болшое значение!(та же М)
|
|
11-03-2006 12:04Метод конечно "наивный",и к примеру букву M так и не удалось распознать - даже близко, но все же респект автору за попытку.
Кстати, заметьте, что все действительно сводится к "сложная и долгая задача". |
|
10-03-2006 01:50
08-03-2006 08:28
07-03-2006 00:21По поводу разделения и поворота символов. Если поискать в инете - есть много примеров, как это делается. Сами ABBYY делают так. Вертикально и горизонтально сканируют побитово строку для распознавания. Получается гистограмма, типа:
Ну, а если лист со строками повернут градусов на 30? |
|
06-03-2006 23:44Ура!
Даешь OCR!
Задавим Abbyy! :)
Их библиотеки для разработки стоят большие деньги, просто не реальные. Особенно когда в программульку нужно внедрить маленькую проверку на 2-3 символа. 5 штук баков это не может стоить точно.
По поводу разделения и поворота символов. Если поискать в инете - есть много примеров, как это делается. Сами ABBYY делают так. Вертикально и горизонтально сканируют побитово строку для распознавания. Получается гистограмма, типа:
| || | |
||| |||||| ||
||||||||||| ||||
Вот там где есть дырки - там скорее всего разделение посимвольное. Просто по каждой дырке берется символ и сверяется.
Горизонтальные дырки - естественно для выделения строк.
Еще, конечно, желательно иметь словари для проверки. |
|
06-03-2006 00:39На мой взгляд, есть существенный недостатк - не учитывается поворот образа. |
|
03-03-2006 14:49Статья очень интересна. Не так давно на круглом столе я как раз написал фразу, которая очень похожа на цитируемую автором - задумал написать свой … - даже не берись.
Просмотрев идеи, предложенные автором, понимаю, что решить задачу все-таки бы смог, если бы под рукой была эта статья. Не хватило как раз идеи.
Большое спасибо, уважаемый Юрий.
|
|
03-03-2006 06:58Автор не описал одного, как он предлагает выделить один символ из рукописной строки, а ведь именно этот вопрос и является наиболее актуальным.
К примеру, я постоянно работаю с PDA и набираю тексты стилусом. Я пробовал "рукописный" ввод, но как оказалось, он гораздо более медленный, поскольку приходится "писать посимвольно". Что неудобно.
Необходим алгоритм обрабатывающий именно слитный текст. Без этого все описанное "баловство" |
|
03-03-2006 02:37Поддерживаю ZeroDivide
А подобная библиотечка, (пуская слюни) а еще лучше визуальный компонент, наверняка будет востребованной. |
|
03-03-2006 00:43Ну... что можно сказать, молодец! Собственно почти так все и делается. У меня на винте лежит интервью в Давидом Яном, который подробно освещает эту тему, разумеется без технических деталей, но суть процессов обработки и проблем распознования очень хорошо. Это была передача из цикла Очевидное Невероятное, с Капицей, если кому интересна эта тема, советую найти запись этой передачи.
Ход мыслей у автора материала правильный, однако
Если задумал написать свой … - даже не берись. Дело безнадежное. Это не для одиночек, и тем более не для начинающих (нужна команда серьезных математиков и программистов).
это необходимо, чтобы написать серьезный и способный конкурировать в ABBYY продукт. ABBYY проводит исследования в этой области несколько лет. Вам, возможо, хватит и недели, чтобы довести качество распознавания до 91%, но затем потребуется 3 недели, чтобы довести его до 92% и год, чтобы довети его до 93-94%. Понятно к чему я клоню?
А то, что можно написать средненький алгоритмик в одиночку... с этим ни кто не спорит :)
Автору желаю удачи в развитии этой темы, он все же модолец! Может выпустит бесплатную библиотечку для распознавания... |
|
|
|