Распознование голоса
- Войдите на сайт для отправки комментариев
Пнд, 30/01/2012 - 20:44
Здравствуйте!
Вообщем есть такая штука: EZ-Builder. И в ней есть распознование голоса(англ.), а мне интересно, есть что-то такое для Arduino. Фишка EZ-B в том, что там не нужно проговаривать команды, просто вводишь текст, а програма распознает всё, и при совпадении выполняет команду.
Заранее спасибо!
Здравствуйте!
Вообщем есть такая штука: EZ-Builder. И в ней есть распознование голоса(англ.), а мне интересно, есть что-то такое для Arduino. Фишка EZ-B в том, что там не нужно проговаривать команды, просто вводишь текст, а програма распознает всё, и при совпадении выполняет команду.
Заранее спасибо!
да есть shield специальный - Arduino Voice Recognition Module
http://www.emartee.com/product/42120/Arduino%20Voice%20Recognition%20Module
http://www.sparkfun.com/products/10963
да есть shield специальный - Arduino Voice Recognition Module
http://www.emartee.com/product/42120/Arduino%20Voice%20Recognition%20Module
http://www.sparkfun.com/products/10963
Кто-нибудь сравнивал эти два shield'a ? Разницы в цене почти в два раза. Они на разных чипах сделаны, интересно знать как хорошо они распознают.
EasyVR вроде бы хорошо работает, есть положительные отывы. А вот первый не понятно, так как отзывов мало, а на демо видео уж как-то очень стараются в произношении и громкости.
Сравнения я не встречал, а небольшие отчеты работы этих модулей видел здесь и здесь
небольшие отчеты работы этих модулей видел здесь и здесь
и еще здесь :)
небольшие отчеты работы этих модулей видел здесь и здесь
и еще здесь :)
Павел, а как всё таки с чувствительностью ? Как далеко микрофон от вас был, и как влияют посторонние шумы? Скажем так, при работающем телевизоре или музыке оно команды распознаёт? Или надо ходить с микрофоном в тишине ? :-)
Павел, а как всё таки с чувствительностью ? Как далеко микрофон от вас был, и как влияют посторонние шумы? Скажем так, при работающем телевизоре или музыке оно команды распознаёт? Или надо ходить с микрофоном в тишине ? :-)
чувствительность очень хорошая, особенно если изначально записать команды в условиях тишины и на расстоянии 3-4х метров, так у меня записывались команды Вики и Свет, остальные - не было возможности....записывал ночью нашептывая в микрофон )) поэтому на видео эти команды приходится повторять и произносить громко (позже как подвернуться необходимые условия....перезапишу их).
на видео, микрофон (установлен под потолок в фальш-панель люстры как и остальное железо) от меня находился на расстоянии 1,5 метра, но распознает с любого угла комнаты, даже если с кухни крикнуть иногда схватывает )
про шумы - сильные шумы мешают....например громкая погремушка ребенка обсалютно гулшила все мои команды ))
при работающей музыке - в течении дня довольно долго играло интернет радио с громкостью для комфортного прослушивания в пределах комнаты - команды распознавались успешно.
при работающем телевизоре - пока еще нетестировалось, редко его включаю, последний раз по моему новогоднее поздравление президента смотрел ))
ходить с микрофоном в моем случае не получится т.к. как я уже сказал выше, он у меня под потолком в люстру встроен :-)
можна микрофончик с услителем и АРУ применить. при правильно отстроеном АРУ даже шепот слышен отчетливо, и в тоже время нет переусиления при нормальном и громком разговоре. по крайней мере, все ролики что видел на тему голосового управления страдают именно некоторым повышением тона.
диалог должен быть непринужденным, как по мне.
Диалог должен быть контрастным и ярким для того что бы его можно было отличить от непринужденного диалога
как по мне так вовсе наоборот, в чем прикол когда приходишь и начинаешь говорить на повышеных тонах... а ночью, что тоже громко говорить???
ведь всеравно, запуск программы по кодовому слову... без него любой диалог игнорируется...
Почитал, взял тоже попробывать EasyVR, с нуля разабрался за один вечер.
Понравилось! Теперь будет в наличии в моем магазине "Модуль голосового управления для Arduino EasyVR"
А к меге помогите подключить EasyVR , в демо коде используется софтовый сериал , и режим бриджа .
У меге 4 аппаратных сериал , вот к 4 хочу подключить , ни как не могу справится со скетчем .
небольшие отчеты работы этих модулей видел здесь и здесь
и еще здесь :)
Классный пример! :) Обработка в EasyVR сделана в две ступени?
Т.е. сначала распознается "Вики" и только потом ловится команда, так?
Тоже хочу взять. В домите 38 Евро http://domit.co.uk/ru/arduino-shields/arduino-veear-easyvr-shield.html
Была ветка про подключение, грабли и обновление прошивки на этом модуле http://arduino.ru/forum/programmirovanie/nuzhna-pomosh-po-easyvr-shield
Была ветка про подключение, грабли и обновление прошивки на этом модуле http://arduino.ru/forum/programmirovanie/nuzhna-pomosh-po-easyvr-shield - ссылка не работает .
И надо подключить именно к меге , к аапаратному сериал , а не через бридж и софтовый .
небольшие отчеты работы этих модулей видел здесь и здесь
и еще здесь :)
Классный пример! :) Обработка в EasyVR сделана в две ступени?
Т.е. сначала распознается "Вики" и только потом ловится команда, так?
использовал модуль VRBot.
ну можно и так сказать "в две ступени", но по научному )) - слово триггер (Вики), при распозновании которого программа переходеит в подменю, в котором уже ожидает другие команды (Свет, Темно, Ярко), в общем все как Вы и предполождили.
использовал модуль VRBot.
ну можно и так сказать "в две ступени", но по научному )) - слово триггер (Вики), при распозновании которого программа переходеит в подменю, в котором уже ожидает другие команды (Свет, Темно, Ярко), в общем все как Вы и предполождили.
VRBot это тоже, что EasyVR?
микрофон штатный, из комплекта?
- ссылка не работает .
Прощу прощения, пробел затесался. Вот правильные ссылки:
http://domit.co.uk/ru/arduino-shields/arduino-veear-easyvr-shield.html
http://arduino.ru/forum/programmirovanie/nuzhna-pomosh-po-easyvr-shield
использовал модуль VRBot.
ну можно и так сказать "в две ступени", но по научному )) - слово триггер (Вики), при распозновании которого программа переходеит в подменю, в котором уже ожидает другие команды (Свет, Темно, Ярко), в общем все как Вы и предполождили.
VRBot это тоже, что EasyVR?
микрофон штатный, из комплекта?
Тоже самое, но EasyVR лучше )
в EasyVR еще есть возможность воспроизводить записанные звуки (до 9 минут записанного звука или речи).
в моем проекте звуки "слушаю"и "повторите" записаны в ардуинку и ею-же воспроизводятся, еще хотел, что бы было подтверждение успешно выполненой команды звуком "готово", но памяти 4кБ ардуинки не хватило ((
Да, микрофон используется штатный.
А какой версией компилятора загоняете скетч в ардуино ? Я на 1.1 не могу скомпилировать , пишет ошибку в библиотеке .
Если не сложно скинте счетч . Используется режим бридж и софтсериал , или чисто на аппаратном UART построено ??
Просто тут вот непонятнка , Есть отдельно платка EasyVR , есть DevKit , вот через дев кит все отлично тестится , на платку звуки и команды записываются . НО когда подключаю к ардуинке то никаких признаков , сериал монитор пишет что не обнаружен EasyVR . Это проделваю на разных платах и на UNO и на Mega .
#include <SoftwareSerial.h> #include "protocol.h" #include <stdint.h> #include <avr/interrupt.h> #include <avr/io.h> #include <avr/pgmspace.h> #include <util/delay.h> #include "listen.h" #include "repeat.h" //#include "performed.h" //#define SAMPLE_RATE 16000 uint8_t _receivePin; uint8_t _transmitPin; long _baudRate; int _bitPeriod; int mute=0; //переменная состояния тишины int svet1state=1; //переменная состояния вкл-выкл SVET_1 int svet2state=1; //переменная состояния вкл-выкл SVET_2 int speakerPin = 11; volatile uint16_t sample=0; volatile uint8_t lastSample, FirstSample; volatile byte new_data,future_data,old_data; volatile byte stat=0; unsigned char *wave; unsigned int length; void setup(){ // PC UART Init pinMode(0, INPUT); // sets the digital pin as input pinMode(1, OUTPUT); // sets the digital pin as output // VRbot UART Init pinMode(12, INPUT); // sets the digital pin as input pinMode(13, OUTPUT); // sets the digital pin as output // Input Output Init pinMode(2,INPUT); // sets the digital pin as input pinMode(3,OUTPUT); // sets the digital pin as output pinMode(4,OUTPUT); // sets the digital pin as output pinMode(5,OUTPUT); // buzz pinMode(7,OUTPUT); // svet_1 pinMode(8,OUTPUT); // svet_2 digitalWrite(3,HIGH); // Set pin 3 high digitalWrite(4,LOW); // Set pin 4 low //digitalWrite(5,HIGH); // test buzz digitalWrite(7,HIGH); // default svet_1=ON digitalWrite(8,HIGH); // default svet_2=ON pinMode(speakerPin, OUTPUT); digitalWrite(11, LOW); // connect Di2 to Di3 to enter Normal mode - Di2 is high // connect Di2 to Di4 to enter Bridge mode - Di2 is low // bridge mode allow direct communication between VRbot module and VRbot GUI software if (digitalRead(2)==LOW){ // if Di2 is LOW enter Bridge mode while(1) { int pc2vr = digitalRead(0); digitalWrite(13, pc2vr); int vr2pc = digitalRead(12); digitalWrite(1, vr2pc); } } // if Di2 is HIGH enter Normal mode Serial.begin(9600); delay(200); Serial.println("Arduino 2009 VRBot control program"); Serial.println("Normal Mode"); // Set up and detect VRbot VRbot_setup();На всякий случай напомню что SoftwareSerial не на любом пине может RX организовать.
На всякий случай сверте свое подключение с разделом "Limitations" на странице библиотеки http://arduino.cc/en/Reference/SoftwareSerial
А "ошибка в библиотеке", убедитесь что не стоит какая-нибудь старая версия SoftwareSerial. Раньше ее нужно было "ставить отдельно", а потом она вошла "в официальную поставку". Может "со старых времен" что-то осталось и "законфликтовало".
На всякий случай напомню что SoftwareSerial не на любом пине может RX организовать.
На всякий случай сверте свое подключение с разделом "Limitations" на странице библиотеки http://arduino.cc/en/Reference/SoftwareSerial
А "ошибка в библиотеке", убедитесь что не стоит какая-нибудь старая версия SoftwareSerial. Раньше ее нужно было "ставить отдельно", а потом она вошла "в официальную поставку". Может "со старых времен" что-то осталось и "законфликтовало".
Дело в том что я не хочу использовать сериалсофт !
На меге есть 4 аппаратных сериал , вот на Serial1 , пины 18 и 19 я и хочу подключить VR .
Подключить и открыть порт не проблема , проблема возникает в другом .
SoftwareSerial port(12,13);
#include "EasyVR.h"
EasyVR easyvr(port);
port.begin(9600);
Вот команды кода где используются софтсериал , получается что к переменной easyvr привязывается все ,
вот строка на пример далее по использованию языка на модуле
easyvr.setLanguage(EasyVR::ITALIAN);
Вот как правильно подправить скетч ?? чтоб не софт сериал а Serial1 ??
SoftwareSerial port(12,13);
Здесь вы определяете объект port класса SoftwareSerial и инициализируете его, задавая пины приема/передачи.
Закомментируйте ее.
#include "EasyVR.h"
Тут вы подцепляете библиотеку для работы с голосом. Оставьте как есть
EasyVR easyvr(port);
Тут сождаете объект easyvr класса EasuVR и инициализируете его, передавая в качестве Serial-интерфейса объект port. Исправьте на что-нибудь типа EasyVR easyvr(Serial1).
port.begin(9600);
Правим на Serial1.begin(9600);
Ну и дальше по тексту (СВОЕГО скетча - не библиотеки) заменяем все вхождения port на Serial1.
Много таких вхождений? Тогда определите переменную port:
ClassName port;
и свяжите ее с объектом Serial1:
port=Serial1;
ClassName здесь - имя класса для аппаратного сериала. Вроде бы HardwareSerial, но это надо проверить на практике.
По идее этого должно быть достаточно...
Попробовал я сделать изменения но ничего не получается , скеч дает ошибку на этих изменениях . В общем помогите подправить код для работы по Serial1 . Вот есть скеч , в нем пины для LED не присвоены пока , но это легко , а вот справится с сериал ну ни как не могу .
#if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #include "SoftwareSerial.h" SoftwareSerial port(12,13); #else // Arduino 0022 - use modified NewSoftSerial #include "WProgram.h" #include "NewSoftSerial.h" NewSoftSerial port(12,13); #endif #include "EasyVR.h" EasyVR easyvr(port); //Groups and Commands enum Groups { GROUP_0 = 0, GROUP_1 = 1, }; enum Group0 { G0_ARDUINO = 0, }; enum Group1 { G1_LED_ON = 0, G1_LED_OFF = 1, }; EasyVRBridge bridge; int8_t group, idx; void setup() { // bridge mode? if (bridge.check()) { cli(); bridge.loop(0, 1, 12, 13); } // run normally Serial.begin(9600); port.begin(9600); if (!easyvr.detect()) { Serial.println("EasyVR not detected!"); for (;;); } easyvr.setPinOutput(EasyVR::IO1, LOW); Serial.println("EasyVR detected!"); easyvr.setTimeout(5); easyvr.setLanguage(0); group = EasyVR::TRIGGER; //<-- start group (customize) } void action(); void loop() { easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening) Serial.print("Say a command in Group "); Serial.println(group); easyvr.recognizeCommand(group); do { // can do some processing while waiting for a spoken command } while (!easyvr.hasFinished()); easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off idx = easyvr.getWord(); if (idx >= 0) { // built-in trigger (ROBOT) // group = GROUP_X; <-- jump to another group X return; } idx = easyvr.getCommand(); if (idx >= 0) { // print debug message uint8_t train = 0; char name[32]; Serial.print("Command: "); Serial.print(idx); if (easyvr.dumpCommand(group, idx, name, train)) { Serial.print(" = "); Serial.println(name); } else Serial.println(); easyvr.playSound(0, EasyVR::VOL_FULL); // perform some action action(); } else // errors or timeout { if (easyvr.isTimeout()) Serial.println("Timed out, try again..."); int16_t err = easyvr.getError(); if (err >= 0) { Serial.print("Error "); Serial.println(err, HEX); } } } void action() { switch (group) { case GROUP_0: switch (idx) { case G0_ARDUINO: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; } break; case GROUP_1: switch (idx) { case G1_LED_ON: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; case G1_LED_OFF: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; } break; } }В принципе получать инфу на сериал монитор мне не надо , достаточно нормальной работы связки .
Тоесть хочу убрать от суды сериалсофт и режим бриджа . Но как чего убираю так скеч не проходит проверку .
Попробовал я сделать изменения но ничего не получается , скеч дает ошибку на этих изменениях .
1) Ну, наверное, все же не скетч, а компилятор.
2) Что за ошибка? (текст сообщений)
Ну и дальше по тексту (СВОЕГО скетча - не библиотеки) заменяем все вхождения port на Serial1.
Можно еще попробовать возложить эту отвественную работу на сам компилятор
Тогда, если нам вдруг придумаете переехать на другой сериал - исправим на #define port Serial2
Попробовал я сделать изменения но ничего не получается , скеч дает ошибку на этих изменениях . В общем помогите подправить код для работы по Serial1 . Вот есть скеч , в нем пины для LED не присвоены пока , но это легко , а вот справится с сериал ну ни как не могу .
Что-то не видно ваших попыток "сделать изменения". Попробуйте вообще выкинуть строки с первой по восьмую. И вместо них написать
И если "будут ошибки", то не нужно предполагать наличие телепатов. Лучше просто скажите что за ошибки.
#include "EasyVR.h" EasyVR easyvr(Serial1); //Groups and Commands enum Groups { GROUP_0 = 0, GROUP_1 = 1, }; enum Group0 { G0_ARDUINO = 0, }; enum Group1 { G1_LED_ON = 0, G1_LED_OF = 1, }; EasyVRBridge bridge; int8_t group, idx; void setup() { // run normally Serial.begin(9600); Serial1.begin(9600); if (!easyvr.detect()) { Serial.println("EasyVR not detected!"); for (;;); } easyvr.setPinOutput(EasyVR::IO1, LOW); Serial.println("EasyVR detected!"); easyvr.setTimeout(5); easyvr.setLanguage(0); group = EasyVR::TRIGGER; //<-- start group (customize) } void action(); void loop() { easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening) Serial.print("Say a command in Group "); Serial.println(group); easyvr.recognizeCommand(group); do { // can do some processing while waiting for a spoken command } while (!easyvr.hasFinished()); easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off idx = easyvr.getWord(); if (idx >= 0) { // built-in trigger (ROBOT) // group = GROUP_X; <-- jump to another group X return; } idx = easyvr.getCommand(); if (idx >= 0) { // print debug message uint8_t train = 0; char name[32]; Serial.print("Command: "); Serial.print(idx); if (easyvr.dumpCommand(group, idx, name, train)) { Serial.print(" = "); Serial.println(name); } else Serial.println(); easyvr.playSound(0, EasyVR::VOL_FULL); // perform some action action(); } else // errors or timeout { if (easyvr.isTimeout()) Serial.println("Timed out, try again..."); int16_t err = easyvr.getError(); if (err >= 0) { Serial.print("Error "); Serial.println(err, HEX); } } } void action() { switch (group) { case GROUP_0: switch (idx) { case G0_ARDUINO: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; } break; case GROUP_1: switch (idx) { case G1_LED_ON: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; case G1_LED_OF: // write your action code here // group = GROUP_X; <-- or jump to another group X for composite commands break; } break; } }Ребятки низкий поклон вам , все разобрался . Спасибочки .
Вот какие изменения сделал и все заработало .
Я сам немного косякнул , после изменения не выбрал что у меня мега , а стояло уно , :) .
Настало время заняться включением света голосом.
Хочу приобрести Voice recognition V3
Кто использует, кто пробовал. Ваше мнение?
Затейница, Вы.)))))
[Скрытый текст]
Пока муж денег дал надо пробовать XD
[/Скрытый текст]