123
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: nightmare, Huntswarrior, Aleks_Crow, {{TNT}} 
Форум » Проекты по робототехнике » Частные проекты » Робот ОСА v9.0 [Голосовое управление] (Пример реализации, поиск материалов)
Робот ОСА v9.0 [Голосовое управление]
Отправлено 09.03.2013 - 23:521
Администраторы
3320 сообщений
Мужчина
Сейчас передо мной состоит задача осуществить голосовое управление автоматизированной системой ОСА (версия 9 - обновленное ПО). Реализация управления осуществляется на C# по примеру рабочей статьи с хабра и использовании сервиса Google по распознованию русской речи(или англоязычной) как вариант управления.



И так, что нужно реализовать:
1. Запись звука в файл .wav
2. Автоматическая отправка файла в сервис Google
3. Вывод распознанного аудио в виде текстовой строки
4. Поиск по строке схожих команд из выборки уже заложенных
5. Выполнение команды
6. Подтверждение выполнения команды.
7. Повтор пункта п.1 цикл.


Прикрепление
5421031.jpg(141Kb)
Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 10.03.2013 - 00:072
Участник
74 сообщений
Мужчина
Было бы неплохо, если использовать в комплекте программу, которая делает анализ всего, (до отправки на сервис гугла, до записи в *.wav), ждет записанного слова до этого, чтобы к примеру выглядело так: "ОСА, выполни программу №1", программа слышит надиктованное ключевое слово "ОСА" далее отправляет последующую запись на сервис гугла. Это позволило бы сократить нагрузку на интернет соединение, и "гугл" не будет слышать все, что происходит.. Программу использовать типа драгона; горыныча; диктатора, там вроде можно надиктовать слова, задать последующее выполнение действий. В данном случае - запись и отправку на гугл.


Профиль Личное сообщение Дом. страница icq Skype
14
Отправлено 10.03.2013 - 09:043
Администраторы
3320 сообщений
Мужчина
Ну инициализация запуска нужна конечно, и понятно дело что можно уменьшить нагрузку. Видел этого гарыныча, даже игрался с ним. Можно сделать так:
1. Ключевое слово для запуска программы записи
2. Команда
3. Ключевое слово для закрытия программы записи.
4. Ключевое слово для запуска программы распознавания.
5. Автоматическое завершение программы после выполнения команды.
6. Подтверждение успешного выполнения команды.

Цитата
Пример: <ОСА> [Вперед] [200] <Выполнять> <Задачу>


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 11.03.2013 - 10:324
Администраторы
3320 сообщений
Мужчина
И так, программу для распознавания я решил использовать из первого поста.
Но, для моей цели нужно автоматизировать процесс записи и его отправки.

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

Вопрос:
1. Использую NAudio, как я понимаю, благодаря ей можно сделать и графики потока, и другие настройки.
2. После окончания разговора с железякой, она должна автоматически завершить сеанс записи, и автоматически отправить его гуглу.

И так, как это реализовать ? По примеру если можно.

В идеале нужно сделать так: запускаем программу, которая прослушивает звук с микрофона\камеры, при достижение определенного пика, запускаем запись и, когда пики перестанут возникать в течении некоторого времени(таймер запускаем после каждого пика и ждем, если по истечению - тишина - запись прекращаем, если появился пик, обнуляем таймер)запись автоматически отправлялась на сервис гугла.

Далее, получив ответ, мы сравниваем его с базой (мб текстовый файл с построчными командами) и найдя из выборки == запускаем соответствующую задачу\процесс.


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 11.03.2013 - 10:425
Администраторы
3320 сообщений
Мужчина
Цитата
Запись аудиофайла.


Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;
using NAudio;
using NAudio.Wave;
using NAudio.FileFormats;
using NAudio.CoreAudioApi;
namespace LL_TVator
{
public partial class Form1 : Form
{
WaveIn waveIn;
WaveFileWriter writer;
string outputFilename = "1.wav";
public Form1()
{
InitializeComponent();
}

void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);
}
else
{
writer.WriteData(e.Buffer, 0, e.BytesRecorded);
}
}
void StopRecording()
{
MessageBox.Show("StopRecording");
waveIn.StopRecording();
}
private void waveIn_RecordingStopped(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
this.BeginInvoke(new EventHandler(waveIn_RecordingStopped), sender, e);
}
else
{
waveIn.Dispose();
waveIn = null;
writer.Close();
writer = null;
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
MessageBox.Show("Start Recording");
waveIn = new WaveIn();
waveIn.DeviceNumber = 0;
waveIn.DataAvailable += waveIn_DataAvailable;
waveIn.RecordingStopped += new EventHandler(waveIn_RecordingStopped);
waveIn.WaveFormat = new WaveFormat(8000, 1);
writer = new WaveFileWriter(outputFilename, waveIn.WaveFormat);
waveIn.StartRecording();
}
catch (Exception ex)
{ MessageBox.Show(ex.Message); }
}
private void button2_Click(object sender, EventArgs e)
{
if (waveIn != null)
{
StopRecording();
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 11.03.2013 - 10:446
Администраторы
3320 сообщений
Мужчина
Но тут не без проблем =\ Код рабочий, но студии не нравится, одна из функций старая говорит, другая неправильно преобразование делает...


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 11.03.2013 - 12:287
Администраторы
3320 сообщений
Мужчина
Цитата
Чуть переделанная версия. Запись производится с частотой 8кГц. Судя по описанию, хром жует от 8 -16 кГц, моно файлы. Остальное изрыгает. Сейчас на работе, не могу проверить микрофон, к сожалению, может в обед успею ))


Код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NAudio.Wave;
using NAudio;

namespace MainWindow
{
     public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
             waveIn = new WaveIn();
             waveIn.DeviceNumber = 0;
             waveIn.DataAvailable += waveIn_DataAvailable;
             waveIn.RecordingStopped += new EventHandler(waveIn_RecordingStopped);
             waveIn.WaveFormat = new WaveFormat(8000, 1);
             writer = new WaveFileWriter(outputFilename, waveIn.WaveFormat);
         }
          
          
         WaveIn waveIn;
         WaveFileWriter writer;
         string outputFilename = "demo.wav";

         void waveIn_DataAvailable(object sender, WaveInEventArgs e)
         {
             writer.WriteData(e.Buffer, 0, e.BytesRecorded);
         }

         void waveIn_RecordingStopped(object sender, EventArgs e)
         {
             waveIn.Dispose();
             waveIn = null;
             writer.Close();
             writer = null;
         }

         

         private void Form1_Load(object sender, EventArgs e)
         {

         }

         private void button1_Click(object sender, EventArgs e)
         {
             waveIn.StartRecording();
         }

         private void button2_Click(object sender, EventArgs e)
         {
             waveIn.StopRecording();
         }

         private void button3_Click(object sender, EventArgs e)
         {
             waveIn.StartRecording();
         }

         private void button4_Click(object sender, EventArgs e)
         {
             waveIn.StopRecording();
         }
     }
}


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 11.03.2013 - 12:328
Администраторы
3320 сообщений
Мужчина
Это правда сырой пока кусок, имеющий только 2 кнопки - запись и стоп. Нужно сделать график, по которому наглядно можно будет отслеживать пики по OY координате, и активировать или останавливать запись.


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Отправлено 11.03.2013 - 12:419
Администраторы
3320 сообщений
Мужчина


Прикрепление
4772537.png(22Kb)
Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Администраторы
3320 сообщений
Мужчина
К примеру, мы имеем ось XY, и заранее известен рабочий(звуки "мира" и тп) фон, в нейтральном положении P1, и пики - точки вершин графика, A1, A2, An, по состоянию которой мы судим обычный ли это фон, или нет. Если пики An имеют диапазон An>P2, то не реагируем, если An>p2 действуем - инициализируем запись.

Судя по примеру, микрофон должен прослушиваться в режиме Online.


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Администраторы
3320 сообщений
Мужчина


Прикрепление
1046838.png(24Kb)
Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Администраторы
3320 сообщений
Мужчина
Если А1 превышает пороговое значение P2, активируем запись и считаем 5 секунд таймером, если по истечению 5 секунд нового Аn не появляется - сохраняем запись. Если по во время ожидания (5с) появляется новый пик An, превышающий пороговое значение P2, обнуляем счетчик, запись не останавливаем.


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Администраторы
3320 сообщений
Мужчина
Бетта тестирование проведено, запись и расспозноание работает. Скриншот с лева расспозновалка, справа запись.



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


Прикрепление
1067504.png(316Kb)
Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Администраторы
3320 сообщений
Мужчина
Как сделать такую ЧТуку



Прикрепление
5487601.png(19Kb)
Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Администраторы
3320 сообщений
Мужчина


Прикрепление
5054680.png(100Kb)
Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
31
Форум » Проекты по робототехнике » Частные проекты » Робот ОСА v9.0 [Голосовое управление] (Пример реализации, поиск материалов)
Страница 1 из 212»
Поиск: