Я думаю, что есть некоторые алгоритмы, которые оценивают разницу между нарисованным символом и ожидаемым, или что-то в этом роде. Любая помощь будет оценена :))Каковы некоторые алгоритмы распознавания рукописного ввода по символу?
ответ
Вы можете реализовать простую нейронную сеть для распознавания рукописных цифр. Простейшим типом реализации является сеть передачи данных, прошедшая через обратную передачу (ее можно обучать стохастически или в пакетном режиме). Есть несколько улучшений, которые вы можете внести в алгоритм backpropagation, который поможет вашей нейронной сети быстрее учиться (импульс, алгоритм Сильвы и Алмейды, имитированный отжиг).
Что касается разницы между реальным символом и ожидаемым изображением, то один из алгоритмов, который я видел, является k-nearest-neighbor algorithm. Here - это статья, описывающая использование метода k - алгоритм поиска младшего соседа для распознавания символов (Редактирование: Раньше у меня была неправильная ссылка. Ссылка, которую я предоставил, требует, чтобы вы заплатили за бумагу, я пытаюсь найти бесплатная версия статьи).
Если вы использовали нейронную сеть, чтобы научиться распознавать символы, шаги, связанные бы:
- Дизайн вашей нейронной сети с соответствующим алгоритмом обучения. Я предлагаю начать с простейшего (стохастического backpropagagation), а затем улучшить алгоритм по желанию, пока вы тренируете свою сеть.
- Получите хороший образец данных обучения. Для моей нейронной сети, которая распознает рукописные цифры, я использовал MNIST database.
- Преобразование данных обучения во входной вектор для вашей нейронной сети. Для данных MNIST вам необходимо бинаризовать изображения. Я использовал пороговое значение 128. Я начал с Otsu's method, но это не дало мне результатов, которые я хотел.
- Создайте свою сеть. Поскольку изображения из MNIST входят в массив из 28x28, у вас есть входной вектор с 784 компонентами и 1 смещение (так 785 входов) в вашу нейронную сеть. Я использовал один скрытый слой с количеством узлов, установленным в соответствии с guidelines outlined here (наряду с уклоном). Ваш выходной вектор будет содержать 10 компонентов (по одному для каждой цифры).
- Случайно представляйте данные тренировки (так произвольно упорядоченные цифры со случайным входным изображением для каждой цифры) в вашу сеть и тренируйте его до тех пор, пока он не достигнет желаемого уровня ошибки.
- Запустите тестовые данные (данные MNIST также с этим связаны) против вашей нейронной сети, чтобы убедиться, что он правильно распознает цифры.
Вы можете проверить пример here (бесстыдного плагина), который пытается распознавать рукописные цифры. Я тренировал сеть, используя данные из MNIST.
Ожидайте провести некоторое время, чтобы ускориться по концепциям нейронной сети, если вы решите пройти этот маршрут. Мне потребовалось не менее 3-4 дней чтения и написания кода, прежде чем я понял концепцию. Хорошим ресурсом является heatonresearch.com. Я рекомендую начать с попытки внедрения нейронных сетей для имитации логических операций AND, OR и XOR (с использованием функции активации порога). Это должно дать вам представление об основных понятиях. Когда это действительно сводится к обучению вашей сети, вы можете попытаться обучить нейронную сеть, которая распознает булевский оператор XOR; это хорошее место, чтобы начать введение в алгоритмы обучения.
Когда дело доходит до построения нейронной сети, вы можете использовать существующие фреймворки, такие как Encog, но я счел, что создание самой сети гораздо более удовлетворительно (вы узнаете больше, как я думаю). Если вы хотите посмотреть на какой-то источник, вы можете проверить проект, который у меня есть на github (бесстыдный плагин), который имеет некоторые базовые классы на Java, которые помогают вам создавать и обучать простые нейронные сети.
Удачи вам!
EDIT
Я нашел несколько источников, которые используют к -ближайших-соседей цифры и/или распознавания символов:
- Bangla Basic Character Recognition Using Digital Curvelet Transform (В curvelet коэффициентам оригинальное изображение, а также его морфологически измененные версии используются для обучения отдельных классификаторов ближайшего соседа k- . Выходные значения этих классификаторов сплавляются с использованием простого , чтобы принять окончательное решение.)
- The Homepage of Nearest Neighbors and Similarity Search
- Fast and Accurate Handwritten Character Recognition using Approximate Nearest Neighbors Search on Large Databases
- Nearest Neighbor Retrieval and Classification
Для ресурсов на нейронные сети, я нашел следующие ссылки, чтобы быть полезным:
- CS-449: Neural Networks
- Artificial Neural Networks: A neural network tutorial
- An introduction to neural networks
- Neural Networks with Java
- Introduction to backpropagation Neural Networks
- Momentum and Learning Rate Adaptation (этой страница переходит несколько усовершенствований стандартного алгоритма обратного распространения, который может привести к быстрому обучению)
В связанной вами статье используется нейронная сеть, а не К-ближайший сосед. –
@PeterO. Ты прав. Я получил ссылку неправильно. Документ, который я имел в виду, был D.Y. Lee. Название «Распознавание рукописного знака с использованием K« Ближайший сосед »,« Радиальная базовая функция »и« Непрозрачные нейронные сети ». Кажется, я не могу найти ссылку на нее, хотя по какой-то причине. Я уточню свой ответ. Спасибо, что указали это. –
Ах, нейронные сети ... напоминает мне о моих годах в uni, когда я хотел работать в AI ... +1 для ностальгии, это были дни ... – Guillaume
Добавление
Если вы не реализовали алгоритмы машинного обучения, прежде чем вы действительно должны проверить: www.ml-class.org
Это свободный класс учил Эндрю Нг, Директор Стэнфордского центра машинного обучения. Курс представляет собой полностью онлайн-курс, посвященный внедрению широкого спектра алгоритмов машинного обучения. Это не слишком усложняет теоретические тонкости алгоритмов, а скорее учит тому, как выбирать, реализовывать, использовать алгоритмы и как их диагностировать. - Уникально в том, что ваша реализация алгоритмов проверяется автоматически! Это здорово для начала работы в машинном обучении, у вас есть мгновенная обратная связь.
Класс также включает в себя как минимум два упражнения по распознаванию рукописных цифр. (Программирование Упражнение 3: с многочленной классификацией и программированием Упражнение 4: с первичными нейронными сетями)
Класс начался некоторое время назад, но его все равно можно зарегистрировать. Если нет, новый запуск должен начаться в начале следующего года. Если вы хотите проверить свои реализации, вам нужно зарегистрироваться для «Расширенного трека».
Один из способов реализации распознавания рукописного текста
Ответ на этот вопрос зависит от ряда факторов, в том числе какого-то ограничение ресурсов у вас есть (встраиваемые платформы) и есть ли у вас хорошая библиотека правильно обозначенные символы: т.е. разные примеры рукописного письма, для которого вы знаете, какую букву они представляют.
Если у вас есть библиотека приличного размера, реализация быстрого и грязного стандартного алгоритма машинного обучения - это, вероятно, путь. Вы можете использовать мультиномиальные классификаторы, нейронные сети или поддерживающие векторные машины.
Я считаю, что машина с векторным носителем будет работать быстрее всего, поскольку есть отличные библиотеки, которые обрабатывают часть кода для обучения компьютера, например. libSVM. Если вы знакомы с использованием алгоритмов машинного обучения, вам потребуется менее 30 минут.
Основная процедура, которую вы, вероятно, хотите реализовать следующим образом:
обучения, что символы «выглядеть»
- Binarise изображений в вашей библиотеке.
- Разверните изображения в векторы/1-D массивы.
- Передайте «векторное представление» изображений в вашей библиотеке и их ярлыки в libSVM, чтобы узнать, как покрытие пикселей относится к изображенному символу для изображений в библиотеке.
- Алгоритм возвращает вам набор параметров модели, которые описывают узнаваемый алгоритм распознавания.
Вы должны повторить 1-4 для каждого символа, который хотите распознать, чтобы получить соответствующий набор параметров модели.
Примечание: шаги 1-4 вы должны выполнить только один раз для своей библиотеки (но один раз для каждого символа, который вы хотите распознать). Вы можете сделать это на своей машине разработчика и включать только параметры в код, который вы отправляете/распространяете.
Если вы хотите, чтобы распознать символ:
Каждый набор параметров модели описывает алгоритм, который проверяет, является ли символ один конкретный символ - или нет. Вы «распознаете» персонажа, проверяя все модели с текущим символом, а затем выбираете модель, которая лучше всего подходит для тестируемого вами символа.
Это тестирование выполняется путем повторного прохождения параметров модели и символа для проверки в развернутой форме в библиотеке SVM, которая вернет доброту соответствия тестируемой модели.
вы проверили, Detexify.Я думаю, что это в значительной степени то, что вы хотите http://detexify.kirelabs.org/classify.html
Это с открытым исходным кодом, поэтому вы можете взглянуть на то, как оно реализовано. Вы можете получить код здесь (если я не помню неправильно, это в Haskell) https://github.com/kirel/detexify-hs-backend
В частности, то, что вы ищете должны быть в Sim.hs
Я надеюсь, что это помогает
Почему в Хаскелле? – loretoparisi
Понятия не имею, что вы могли бы спросить Даниэля Кирша ([email protected]), он очень дружелюбен. – JuanPi
Я * думаю * он использует ближайшего соседа в своем коде тоже. –
- 1. Программное обеспечение для распознавания рукописного ввода Python?
- 2. Библиотека распознавания рукописного ввода для Java
- 3. Механизм распознавания рукописного ввода для веб-приложения
- 4. Алгоритм распознавания рукописного текста
- 5. Китайская библиотека распознавания рукописного ввода для android
- 6. API распознавания рукописного ввода для приложений Android
- 7. Каковы современные алгоритмы распознавания планарных объектов?
- 8. Каковы некоторые общие алгоритмы укладки фокуса?
- 9. нейронная сеть для рукописного распознавания?
- 10. Как реализовать функцию распознавания рукописного ввода в приложении для iPhone?
- 11. Каковы некоторые общие рекомендации по проверке ввода?
- 12. Алгоритмы распознавания образов
- 13. Распознавание рукописного ввода в Китае
- 14. Zinnia (распознавание рукописного ввода) и интеграция PHP
- 15. генерация тестовых данных для распознавания рукописного ввода нулевой сети
- 16. Есть ли библиотека распознавания рукописного ввода для IOS?
- 17. Использование Windows Tablet PC Вход для реализации распознавания рукописного ввода
- 18. Использование Tesseract для распознавания рукописного текста
- 19. Алгоритмы распознавания именных объектов
- 20. Алгоритмы распознавания звука барабана
- 21. Алгоритмы распознавания лиц
- 22. Каковы шаги по написанию рукописного распознавания символов в python? Используя opencv и sci kit узнаете?
- 23. Использование рукописного распознавания чисел Ян Чэн, Чок?
- 24. Символьная скрещивание для распознавания рукописного текста
- 25. Распознавание рукописного ввода с изображения на строку
- 26. Текст, строковые алгоритмы распознавания аккордов?
- 27. API Kairos: Алгоритмы распознавания лиц
- 28. Алгоритмы/реализации распознавания отпечатков пальцев
- 29. Реализация ANN с Python OpenCV для распознавания рукописного текста
- 30. Каковы некоторые хорошие алгоритмы для численного интегрирования для физического движка?
Существует два вида распознавания рукописного ввода: распознавание символов по мере их намотки (онлайн) и распознавание уже нарисованных символов (в автономном режиме). Существуют разные подходы к распознаванию обоих подходов. Какого из них вас больше интересует? –
один раз нарисовал ОДИН символ, машина сразу распознает его и очищает ввод для следующего. – nicks
Английский или неанглийский, его большая разница –