lujfcuted9i7o8typ876865cvlk;jp98787 Wiki
Brought to you by:
dovaiprogrammer
Welcome to your wiki!
This is the default page, edit it as you see fit. To add a new page simply reference it within brackets, e.g.: [SamplePage].
The wiki uses Markdown syntax.
Основы алгоритма распознавания и сличения образцов:
Допустим, у вас есть две последовательности чисел
10, 20, 30, 40, 50
и
11, 19, 30, 44, 50
Эти последовательности при отображении, скажем на графике дадут примерно подобные линии
Вопрос, как запрограммировать программу, чтобы она эти две последовательности посчитала равными?
На помощь придет объект Cell - ячейка и такая присказка: у любой ячейки есть и начало и конец.
Итак, объект Cell имеет два поля s и f
Создаем 5 объектов Cell на основе первой последовательности
Вот они: (10,10)(20,20)(30,30)(40,40)(50,50)
Объект Cell также имеет метод eql, который возвращает истину, если входной параметр
помещается между граничными значения s и f (включительно)
Таким образом, после инициализации 5 ячеек первой последовательностью и сравнении в цикле этих ячеек с каждым элементом
второй последовательности получим 40% совпадение между двумя последовательностями.
Но что будет, если под чутким руководством оператора, одна из ячеек изменит свое значение?
(10,11) <- эта (20,20)(30,30)(40,40)(50,50)
Теперь при сравнении в цикле этих ячеек с каждым элементом второй последовательности получим уже 60% совпадение
между двумя последовательностями.
Такое изменение возможно при вызове метода learning нашего объекта Cell.
В этом методе входной параметр сравнивается с граничными условиями и если он меньше s то s присваивается входной параметр.
Если он больше f то f присваивается входной параметр.
Так происходит обучение ячейки на распознавание близко лежащих значений.
Обучив все ячейки добиваемся 100% результата распознавания наших двух последовательностей, как похожих между собой.
Более того, если подать на вход третью подобную последовательность то также получим результат близкий к 100%
Состояние ячеек после обучения можно сохранять, за это и другие операции с нашими ячейками отвечает объект CellsManager.
Это: первичная инициализация ячеек, сравнение входящего образца с ячейками, обучение ячеек и сохранение обученных ячеек.
Используя классы CellsManager и Cell я написал простенькую обучаемую программу распознавания речи.
(разместил ее на sourceforge.net)
Вывод: подобная программная конструкция может оказаться весьма полезной при разработке программ распознавания образов
Last edit: Oleg Dorozhko 2012-09-11
запускаете из cmd
java p226.RecordingTest
а если хотите звук Ма записать, то так:
java p226.RecordingTest ma
Добавил в архив краткую инструкцию по работе с кнопками программы
и бат файл для запуска (под Windows 7)
Также привожу инструкцию по кнопкам ниже:
RS при клике на эту кнопку программа переводится в режим Recognize Sound
Вы говорите - она распознает исходя из ранее записанных звуков
P при клике на эту кнопку программа выдает результат сличения на консоль, с которой была запущена (пока так)
RNS запись нового звука или слога. Скажите слог и подождите секунд десять, потом нажмите паузу.
LSM режим обучения, в этом режиме вы повторяете ранее записанный звук для программы. Скажите слог и подождите секунд десять, потом нажмите паузу.
EXIT выход из программы
Last edit: Oleg Dorozhko 2012-09-13
UPDATE 1.1:
Добавлена консоль и окно логов
Консоль работает так:
При вводе команды: def out point и нажатия ENTER запускается определитель точки,
в которой будут печататься распознанные слова.
Вы просто подводите мышку к нужному вам месту (например окну ввода чата посередке)
и кликаете левым кликом. Координаты запомнятся программой и распознанные слова она будет выводить именно в этой точке.
Также в консоль можно просто вводить любые предложения и они будут печататься в ранее определенной точке.
Продолжается работа над другими командами для консоли