Копание в интернетах показало, что как таковых VRBot’ов уже не существует и вывело меня на сайт их производителя и переемника VeeaR. Переемником VRBot стал модуль, практически не отличающийся от своего предшественника — EasyVR. Также, появилась более «крутая» его версия — SmartVR, которая позволяла писать аж свои приложения для какой-то там встроенной виртуальной машины. Но для SmartVR необходимо было допиливать хоть и немного, но внешний обвес (либо покупать дорогую плату разработчика), по этому для начала, ничтоже сумняшеся, я заказал пару EasyVR на «поковырять», даже и не думая, что мои ковыряния потом зайдут так далеко…
После того, как модули мне пришли, я начал с ними играться. Поставил штатный софт, подключил, пообучал, посмотрел возможности. Конечно, функционал этих модулей из коробки достаточно узок — распознавание некоторого количества команд управления роботом (больше они, ИМХО, ни для чего не годятся), зашитых намертво в прошивку на нескольких европейских языках + возможность добавить до 32-х своих собственных команд (то, ради чего модули и заказывались). Также, была очень заманчивая возможность сделать «избу-говорильню» — прошить в модуль наборы звуков, которые потом можно было бы воспроизводить через него как ответы.
Распознавание зашитых команд было «человеконезависимое», т.е., по факту, модулю было все равно кто и каким голосом называет команды — он их уверенно распознавал (только нужно было обеспечить правильное произношение). Пользовательские же команды требовали сначала обучения под конкретного пользователя. Еще существовала возможность распознавания конкретного человека по характеристикам голоса — «голосовой пароль», что вполне неплохо работало и тоже было достаточно интересной фишкой.
Все вроде было замечательно, но меня очень сильно будоражил вопрос: «почему для SmartVR можно писать свои собственные программы, а для EasyVR нельзя?» И черт меня дернул раскопать всю эту кухню глубже.
Начал я с того, что выяснил такой момент — оба модуля работают на абсолютно одинаковых чипах, RSC-4128 компании Sensory. Что-то из услышанного когда-то давно подсказывало мне, что чип хороший, годный, стабильный и использовался в куче всяких роботизированных игрушек типа Furby. Так оно и оказалось.
На сайте разработчика с большим трудом были найдены и выкачаны разные доки — даташит на чип, описание технологических библиотек, СДК, примеры и много-много другого барахла. После изучения всего добра я влюбился в этот чип 🙂 Его возможности, фактически, оказались уникальны: других специализированных однокристальных решений (кроме более старшего семейства этой же фирмы) как-бы и не существовало. Итак, по порядку.
T2SI использует достаточно сложный и интересный подход. Сначала на компьютере в специальной программе (QuickT2SI) формируются словари путем вбивания нужных слов или фраз с клавиатуры. Затем программа, в зависимости от выбранной языковой модели проводит преобразование этих слов и фраз к фонемам (при необходимости результат можно корректировать, вплоть до ручного набора слов фонемами IPA). После этого можно произвести тонкую настройку распознавания и сформировать объектные файлы с данными для вашего набора слов, которые должны быть включены в программу. Таких наборов может быть очень много, а нужный просто выбирается при вызове библиотечной функции распознавания.
Этот метод сложен технически, использует акустические модели фонем для разных языков, нейросети для их распознавания и
скрытую марковскую модель (HMM) для статистического анализа и угадывания слов. Соль в том, что самая сложная работа — построение и обучение нейросети и формирование скрытой марковской модели — происходит на компьютере, а в устройство зашивается уже готовая нейросеть (в библиотеке на чипе есть софтовый нейропроцессор и анализатор HMM). Готовая нейросеть и модель содержит в себе только нужные состояния и фонемы для набора, поэтому получается очень компактная и быстрая.
Результат работы этого метода, конечно, впечатляет. Получается очень точное распознавание даже на больших словарях и с разными «говорителями». Но у метода есть для нас один очень большой недостаток. Нет модели русского языка 🙁 Причем, принципиально нет никаких ограничений, чтобы ее сделать, но разработчику, походу, это не особо нужно. Тем не менее, есть возможность использовать более-менее похожие модели испанского/итальянского с некоторыми ограничениями и набирать нужные слова сразу фонемами, но это не так удобно, хотя качество распознавания русских слов, запиленных таким образом, достаточно неплохое.
Второй метод — SD — основан на высчитывании огибающих слова/фразы и, возможно еще какой-то информации, типа FFT и генерации «паттерна» — отпечатка, соответствующего этому слову или фразе. По всей видимости, это какой-то векторный массив, наподобие паттернов, описывающих отпечаток пальца после векторного анализа. Только здесь, в качестве исходной информации выступает не картина папиллярного узора, а захваченная звуковая информация. Каждый паттерн занимает в памяти строго определенное количество байт — 256. Из нескольких паттернов в процессе обучения комбинируется «шаблон» (тоже 256 байт), который затем сохраняется в памяти, присваивается к какому-либо словарю и в дальнейшем можно запустить по этому словарю распознавание.
На практике же, при небольшом словаре с разными по произношению словами, система способна точно распознавать слова, даже если их говорит другой человек, что есть очень и очень хорошо!
Учтите, что библиотека занимает кучу ресурсов МК, так что оперативки остается порядка 250-300 байт (+ 256 байт RAMY буфера, которые используются для хранения паттернов при обучении SD и работе SD, но их можно использовать под свои нужды, на то есть библиотечные функции). При работе библиотечных функций практически не остается и процессорного времени, так что будьте аккуратны в прерываниях. Некоторым процессам (распознаванию, например) похеру и они просто будут работать дольше, а некоторым (воспроизведению звука) не похеру, и звук может начать трещать или вообще функция осыпется и вернет ошибку, что «недостаточно свободных циклов». Подробнее описано в документации (там такая большая таблица со всеми цифрами потребления). Но это все мелочи и решаются они просто грамотным программированием.
Да. Все программы из комплекта библиотек бесплатны. Кроме QuickT2SI, которая стоит $3500 в полном варианте. Жадность программы лечится скачиванием мною пропатченой версии по ссылкам во вложении к статье — «link.txt».
24LC64 совершенно спокойно перепаивается в 24LC256 и становится возможным хранить уже 128 шаблонов. 24LC512 к сожалению шире корпусом и на плату не влезает 🙂
Питается модуль от 3 до 5 вольт. На пинах, которые используются под UART стоит микросхема-преобразователь уровней (чтоб можно было шпарить до 5 вольт). На остальные пины подавать больше 3 вольт НЕЛЬЗЯ! Спалите пины или чип! Это вам не AVR!
А теперь самое главное, ради чего все затевалось! Разработчики модуля не афишируют эту возможность, но тем не менее, в модуль можно зашить абсолютно любой код! Устроено все так: в РОМе самого чипа сидит загрузчик, с которым может общаться программка «VeeLoader.exe» от VeeaR (из комплекта оригинального софта). А во флешке, которая на 1 мегабайт, собственно и лежит прошивка. Т.к. чип может работать либо со встроенным РОМом, либо с внешним флэшом, то вот и получается наша картина: подцепляем nXM на 3 вольта и чип стартует с вшитого по маске загрузчика, который может спокойно читать и писать флэшку без всяких ограничений или защит через UART. А если мы оставим висеть nXM свободно (на самом деле pull-down внутри чипа на несколько килоом), то чип будет стартовать с внешней флэшки. Таким образом, достаточно просто скормить HEX-файл своей программы VeeLoader’у и, вуаля, он зашьет ее во флэш! Делов-то 🙂
Вот таким образом мы получили достаточно мощный и недорогой инструмент для работы с натуральной речью, который можем лепить сами как захотим, не ограничиваясь рамками прошивки производителя. Можно делать все, на что хватит фантазии 🙂 Тем более, железка и технологии действительно уникальные, интересные и очень качественно вылизанные производителем (ребята из Sensory — молодцы).
Во вложении вы найдете ссылку на архив со всем необходимым (архив с софтом и пилюлями уникален и больше вы его нигде не достанете):
1. Инструментарий Sensory последних версий: QuickT2SI 3.1.7 (с лечивом), QuickSynthesis 5.2.1, библиотеки FluentChip 3.1.6 с примерами и всей документацией, в том числе на чип и железо.
2. Инструментарий Phyton: Project-SE 1.22.00 (с лечивом)
3. Инструментарий VeeaR: VeeLoader.exe и последняя прошивка EasyVR, если захочется вернуть штатный функционал
Все вопросы и пожелания пишите в комментах. Чем смогу — помогу :)
we.easyelectronics.ru
Новый высококачественный модуль для Ардуино RKP-WT588D-8Mbit на микросхеме WT588D08 (компании Guangzhou Waytronic Electronic Limited) оптимально подходит для большинства задач в робототехнике и системах мехатроники, связанных с воспроизведением коротких голосовых или музыкальных фрагментов.
Модули и микросхемы серии WT588D предназначены для приложений, где требуется простое дешевое решение по хранению-воспроизведению звуковых и музыкальных сообщений длительностью до 17.5 минут с возможностью быстрой и удобной их перезаписи. Смена аудио информации в модулях WT588D осуществляется перепрошивкой микросхемы SPI-flash памяти с помощью недорогого USB-программатора. Запись может производиться прямо в готовом изделии без необходимости извлечения микросхемы из платы.
Основные преимущества модулей и микросхем WT588D
Принципиальная схема голосового модуля WT588D с 16-ю выводами
В простом кнопочном режиме логические управляющие сигналы подают на пять входных линий. В этом режиме каждый вывод сопоставлен одной звуковой/музыкальной группе фрагментов. Активный уровень сигнала — 0. Каждый из пяти входов может быть индивидуально запрограммирован на один из 15 возможных режимов работы, в том числе Edge, Level. On/Off (вход работает по принципу кнопки с фиксацией), Next Loop, Prev Loop (последовательный перебор всех аудио файлов), Pause, Stop, управление громкостью.
Режим одно-проводного последовательного порта, в котором все команды управления передаются от внешнего микроконтроллера через одно-проводную шину данных, всего в этом режиме можно управлять включением до 219 голосовых групп.
Режим трех-проводного последовательного порта, в котором все команды управления передаются от внешнего микроконтроллера через трех-проводную шину данных, всего в этом режиме можно управлять включением до 219 голосовых групп.
Режим трех-проводного последовательного порта с расширенным количеством выходных линий, переключение в этот режим может осуществляться в любой момент по команде внешнего микропроцессора, при этом все восемь свободных выводов микросхемы WT588D начинают работать в качестве выходов, на каждом из них можно устанавливать логический 0 или 1 для управления внешними устройствами.
В режимах последовательного ввода данных, подавая команды управления, можно включать воспроизведение любого из 220 аудио фрагментов, программно регулировать громкость, включать и выключать циклический режим воспроизведения.
В режиме параллельного ввода данных адрес голосовой группы выставляется на входной шине в виде двоичного кода, всего в этом режиме можно управлять включением 219 голосовых групп.
В mp3 режиме выводы микросхемы выполняют те же функции, что и кнопки обычного mp3 плеера: PLAY/PAUSE, STOP, NEXT, PREVIOUS, VOLUME+, VOLUME-.
Режим матрицы кнопок 3х8, в этом режиме номер одной из 24-х звуковых групп задается сигналом от клавиатуры 3х8.
Загрузка готового проекта в микросхему осуществляется с помощью USB-программатора.
Программатор WT588D mini download предназначен для записи скомпилированных звуковых файлов в модули серии WT588D и проверки их работоспособности во всех режимах. С помощью дополнительного переходника позволяет записывать отдельные микросхемы SPI-flash, используемые в модулях и комплектах микросхем серии WT588D. Для осуществления внутрисхемного программирования служит дополнительный разъем, сигналы с него через внешний шлейф подаются непосредственно на выводы микросхемы SPI-flash. Запись и питание программатора осуществляется через стандартный USB-порт, внешний источник питания не требуется.
Подготовка и компиляция файла для записи производится с помощью программы WTW588D VoiceChip. Готовый скомпилированный файл может загружаться в модуль/микросхему как из оболочки программы WTW588D VoiceChip, так и с помощью отдельной утилиты загрузчика.
Эдесь можно скачать программу WTW588D VoiceChip (архив ZIP, размер 11.3 МБ) =>>
Программатор соединяется с компьютером стандартным USB-кабелем. Модули WT588D-28pin и WT588D-16pin вставляются непосредственно в панельку программатора, микросхема SPI-flash вставляется в программатор с помощью дополнительного адаптера-переходника. К аудиовыходу может быть подключен внешний динамик для проверки звучания записанных аудиофайлов.
Просмотров: 10476
Дата: Понедельник, 07 Июля 2014
robot-kit.ru
Плата расширения L293D, ИК-датчик VS1838B, TFT LCD, Модем M590E GSM GPRS, «монитор TFT LCD, датчик движения HC-SR501, ИК-пульт дистанционного управления, Радиомодуль NRF24L01, SD Card Module, Звуковой модуль, 5-axis stepper motor driver, Шаговый двигатель, Модем M590E GSM GPRS, 5-axis stepper motor driver, Часы реального времени DS 3231/DS 1307, терморегулятор W1209 DC, Релейный модуль, датчик движения HC-SR501, Модуль Wi-Fi ESP8266-12E, датчик движения HC-SR501, Передатчик и приемник в диапазоне RF 433 Mhz, Блок питания, L293D, Микросхема контроллера коллекторного электродвигателя, ИК-пульт дистанционного управления, Датчики контроля температуры, Радиомодуль NRF24L01, OKI 120A2, Rotary Encoder, SD Card Module, Беспроводной пульт дистанционного управления, Микросхема контроллера коллекторного электродвигателя, Модуль Bluetooth HC-06,, Модем M590E GSM GPRS, Часы реального времени DS 3231/DS 1307, Mini 360 на схеме LM2596, MP3-TF-16P, L293D, Модуль LCD монитора, Инфракрасные датчики расстояния, Часы реального времени, USB Host Shield, HC-SR501, Cветочувствительный датчик сопротивления, блок питания Mini 360 на схеме LM2596, ЖК-дисплей TFT дисплей, Контроллер L298N, HC-SR501, Модуль MP3 Player WTV020, GSM GPRS, Сервоприводы, Модем M590E GSM GPRS, Часы реального времени DS 3231/DS 1307, Модуль Wi-Fi ESP8266-12E, Инфракрасные датчики расстояния, Card Module, Ультразвуковые дальномеры HC-SR04, Блок питания, Карта памяти SD, Mini 360, Ethernet shield, L293D, блок питания Mini 360 на схеме LM2596, Радиомодуль, датчик температуры DS18B20, ИК-пульт дистанционного управления, USB конвертер UART, ИК-пульт, Антена для модуля WiFi, Ethernet shield, Модуль блока питания XL6009, Микросхема контроллера коллекторного электродвигателя, Модуль качества воздуха MQ-135, Микросхема контроллера коллекторного электродвигателя, ИК-пульт дистанционного управления, SD Card Module, Радиомодуль NRF24L01, двигатель OKI, 5-axis stepper motor driver, L293D, TB6560, Драйвер шагового двигателя TB6600, Шаговый двигатель, Модуль камеры, Блок питания, L293D, блок питания Mini 360 на схеме LM2596, 5axis mach4 interface, Карта памяти SD, Ethernet shield, Контроллер L298N, датчик движения HC-SR501, Модуль Wi-Fi ESP8266-12E, Модуль LCD монитора LCD1602, Шаговый двигатель OKI 120A2, Шаговый двигатель, Шаговый двигатель.
www.progdron.com
Купить на Паркфлаере.
Вопросами озвучки своих Arduino-проектов я задавался не раз. И всегда минусы перевешивали плюсы: либо цена заоблачная, либо ресурсы контроллера потребляет… И вот довелось мне наткнуться на данный модуль. Стоит он копейки — поэтому купил я его не раздумывая. Надо сказать, что информации в сети на него не так уж и много, но я таки с ним справился и поделюсь тем, что удалось «накопать».
1. Модуль снабжен штырьками с удобным шагом в 2.54мм. Это позволяет втыкать его в беспаячную макетку без каких-либо переходников.
2. На борту находится разъем для microSD. Поставщик утверждает, что подходят карты объемом до 1Гб. У меня в наличии было только две карты — 64Мб (древняя «как г***о мамонта» и не уверен, что рабочая) и 2Гб. С первой картой модуль работать отказался, со второй заработал сразу и без каких-либо проблем.
3. Модуль питается от 3.3В. На борту есть перемычка для питания 5В, но экспериментировать я с ней не советую.
4. Модуль может работать как под управлением микроконтроллера, так и в виде самостоятельного плеера с кнопочным управлением. Последний режим меня интересовал мало (схему можно найти в документации в конце статьи). А вот с управлением от МК я разобрался. Схема подключения к Arduino такая:
Что интересно, модуль работает сам по себе в асинхронном режиме, не поглощая ресурсы микроконтроллера. Тот только отдает ему команды управления. А сигнал busy показывает, воспроизводит модуль что-нибудь или простаивает в ожидании.
5. Уж не знаю, почему китайцы обозвали его MP3-плеером, но только MP3 файлы у меня он проигрывать отказался. Заработал у меня он с файлами формата AD4. Ну да не беда — конвертер я нашел.
6. С размещением файлов на карте тоже далеко все не так просто. Все файлы должны размещаться в корневой директории и иметь имена в виде четырехзначных номеров. МК для проигрывания файла отдает модулю команду, содержащую номер трека.
7. Добрые люди написали вполне приличную библиотеку для Arduino. В ней же есть пример, содержащий в том числе и звуковые файлы. Функционал такой:
8. Выход на динамик достаточно слабый. В наушниках играет нормально, но динамик лучше подключать через какой-нибудь аудио усилитель (у меня был усилок на микросхеме TDA7297).
В итоге это оказался наиболее подходящий мне модуль. Озвучку модели танка я делаю именно на нем.
UPD: у модуля обнаружился очень неудобный косяк. Вывод BUSY срабатывает с огромной задержкой — почти в секунду. По этой причине модуль оказался непригоден для циклической непрерывной озвучки.
Ссылки для скачивания:
Даташит (Manual)
Библиотека для Arduino
Конвертер файлов MP3-to-AD4
rc-master.ucoz.ru