Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Распознание текста на картинке скриптовым языком

Автор: vicnaum
Дата сообщения: 15.04.2007 09:44
ну фиг знает... у меня как-то всё очень гладко складывается. слова там искажаются совсем немного. надо брать крайнюю левую-нижнюю, например, точку, и т.п. и это в подавляющем большинстве случаев будет то что надо, я думаю.

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

вообщем много каких условий можно ввести... думать надо и делать...

эх... надо вспоминать, а то со школьных и универовских олимпиад ничего такого не программил

может напишу чего, как время будет..
Автор: Delphi6
Дата сообщения: 02.08.2007 02:11
Можно сказать заново вернулся к тому что у меня изначально было. Есть капча довольно сложная (с первого взгляда) капча, примеры смотрите в конце поста.

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

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





п.с. Если у кого нет желание делится идеей или кодом на халяву то я понимаю вас, скидывайте в ПМ договоримся
Автор: dacuan
Дата сообщения: 02.08.2007 10:01
Delphi6
Запустил Gimp, поигрался с фильтрами "уровни" и "порог", большую часть шума получилось удалить. Думаю, стоит копать именно в этом направлении: подобрать набор пресетов фильтрации, поочередно их применять и пробовать распознать результат.
Автор: Delphi6
Дата сообщения: 02.08.2007 17:12
dacuan
Спасибо уже начал качать, посмотрю что именно делает данный фильтр.

Я вот решил более конкретизировать свой вопрос. Как называется официально процесс удаления шумов из сканированного текста? Желательно официальный термин на английском языке, как например для распознавания букв есть Optical Character Recognition или Intellectual Character Recognition (с помощью NN).

Заранее спасибо
Автор: Turing
Дата сообщения: 02.08.2007 17:52

Цитата:
dacuan
Спасибо уже начала качать, посмотрю что именно делает данный фильтр.

Я вот решил более конкретизировать свой вопрос. Как называется официально процесс удаления шумов из сканированного текста? Желательно официальный термин на английском языке, как например для распознавания букв есть Optical Character Recognition или Intellectual Character Recognition (с помощью NN).


Официально называется image noise reduction, только тут не стандартный шум, который можно убрать фильтров типа гаусовского, а злостный шум из геометрических фигур. Поэтому стандартные методы не помогут, а на эту конкретную задачу (убирание геометрического шума) никто кроме хакеров не заморачивается...

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

Добавлено:

Цитата:

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


Щас...

Эта задача на самом деле простая - надо просто научиться убирать геометрический шум. Можно так попробовать - выделяешь объекты одного цвета, а потом пытаешься понять - может ли этот объект быть частью символа. А это уже можно на нейронной сети сделать (или на чем-нибудь попроще, типа naive-bayes). Идея такая - каждый объект переводишь в векторное представление и извлекаешь небольшой объем фич (например такой набор: № вершин, среднее расстояние между вершинами, вариация в расстояниях, общая площадь объекта). Потом ручками несколько десятков таких объектов отклассифицировал и натравил нейронку или какой-нибудь другой алгоритм. При правильном выборе фич думаю будет распознавать процентов на 99

А потом уже будут одни буквы без шума
Автор: Delphi6
Дата сообщения: 02.08.2007 20:13
Turing

Цитата:
Официально называется image noise reduction

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

Вот вчера просматривал капчу в увеличенном состоянии и заметил что геометрические фигуры имеют одну особенность все их пикселя одного цвета, даже места где на них накладываются другие геометрические элементы имеют, хотя и отличающий но в тоже время постоянный один цвет. А вот символы наоборот, они состоят не из одного цвета, это из за того что края символов сглаживаются. Это конечно не много, но уже что-то.


Цитата:
Эта задача на самом деле простая - надо просто научиться убирать геометрический шум.

У меня в этой сфере большой пробел, я даже не знаю элементарных подходов (алгоритмов).


Цитата:
А это уже можно на нейронной сети сделать (или на чем-нибудь попроще, типа naive-bayes).

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

А у вас случаем нет доки по данному алгоритму naive-bayes? (можно и на английском).


Цитата:
Можно так попробовать - выделяешь объекты одного цвета, а потом пытаешься понять - может ли этот объект быть частью символа.

Идея понравилась типа не стараться выделить 5 символов, а выделять все возможные, потом пытаться их идентифицировать, в результате у меня должно определиться 5 символов.


Цитата:
Идея такая - каждый объект переводишь в векторное представление и извлекаешь небольшой объем фич

Может подскажете имя алгоритма который можно использовать для этой цели. Заранее спасибо

Ну и самое главное, хотел бы подчеркнуть что если у меня будет все 5 символов на однородном фоне то определить их я могу с 99% вероятностью.

Добавлено:
Читал но некоторые обозначения так и не понял (хотя на отличие закончил физ. мат. школу но когда долго этими знаниями не пользуешься все забываешь )
Наивный байесовский классификатор

Добавлено:

Есля я все правильно понял то в нашем случае C это данные о искомой букве X1, а F1, F2 и т.д. являются уже известными для нас данными о конкретной букве Хn. А данный метода дает вероятность принадлежания буквы X1 к букве Xn.
Автор: Turing
Дата сообщения: 02.08.2007 22:22

Цитата:

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

Неа, стандартный подход - что-то вроде сглажевающего фильтра наложить.


Цитата:

Вот вчера просматривал капчу в увеличенном состоянии и заметил что геометрические фигуры имеют одну особенность все их пикселя одного цвета, даже места где на них накладываются другие геометрические элементы имеют, хотя и отличающий но в тоже время постоянный один цвет. А вот символы наоборот, они состоят не из одного цвета, это из за того что края символов сглаживаются. Это конечно не много, но уже что-то.

Так за это надо хвататься и забыть об общем подходе. Затачиваешь стандартный алгоритм edge detection под это свойство и вся задача решена.


Цитата:

У меня в этой сфере большой пробел, я даже не знаю элементарных подходов (алгоритмов).

Я только элементарные знаю. Читай про shape/object recognition, можно еще книжку прикупить по машинному зрению (machine vision). Но самый простой подход - выделение границ объектов (edge detection), в википедии все про него есть.


Цитата:

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

А у вас случаем нет доки по данному алгоритму naive-bayes? (можно и на английском).

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

naive bayes встроен во все пакеты машинного обучения, есть в википедии: http://en.wikipedia.org/wiki/Naive_bayes_classifier


Цитата:

Может подскажете имя алгоритма который можно использовать для этой цели. Заранее спасибо

Запускаешь edge detection - получаешь растровое представление границ геометрии. Его надо конвертировать в векторное, общий подход х.з. какой, тут лучшие результаты у челов из OCR. Но можно чего-то тупое попробовать - например берем окошки близких друг у другу точек (штук по 40-50), и проводим через них прямые с минимальной ошибкой в квадрате. А потом прямые сглаживаем.

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

Добавлено:

Цитата:

http://upload.wikimedia.org/math/4/7/a/47a22e381fe04c90c2115d4ac369f590.png
Есля я все правильно понял то в нашем случае C это данные о искомой букве X1, а F1, F2 и т.д. являются уже известными для нас данными о конкретной букве Хn. А данный метода дает вероятность принадлежания буквы X1 к букве Xn.


C - это класс, который мы угадываем классификатором, F1....Fn - это некоторые свойства конкретного объекта, для которого мы угадываем. C может быть конкретной буквой, но я бы не советовал - немерено обучающих примеров собрать придется. Лучше, чтобы C - был бинарным - да или нет. Тогда обучаешь его на парах - векторный эталон и конкретный пример из captcha.

Автор: SergeiZZ2
Дата сообщения: 17.06.2008 13:06


как средствами пхп сделать трассировку контура символов? (как показано на рисунке)

Страницы: 123

Предыдущая тема: PHP: Полезные (интересные и оригинальные) решения


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.