Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/32: Рейтинг темы: голосов - 32, средняя оценка - 4.91
VanGhj
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 4
1

Голосовая активация - распознание команды с микрофона и выполнение определенных действий

08.05.2015, 19:19. Просмотров 6282. Ответов 14
Метки нет (Все метки)

Добрый день!
Хочу сделать голосовую активацию:
1. Создам запись голосовой команды
2. Нужно как-то слушать постоянно микрофон, и если сказали "слово" или "фразу" в файле, нужно сделать определенное действие.

Может кто-то что-то подобное делал? Если нет, дайте мысль как сделать? и пару кусочков кода
И еще вопрос, можно как-то анализировать голос? например запишу я файл со своим голосом, можно как-то определить что это мой голос или чей-то другой?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2015, 19:19
Ответы с готовыми решениями:

Пользователю не хватает прав на выполнение определенных действий на сервере
Доброго времени суток. Помогите решить следующую проблему: Пытаюсь обратиться из системы...

Выполнение определенных действий в зависимости от введенной цифры (Console)
Перерыл интернет, но толком и не нашёл примера нужной мне реализации.. Пользователю предлагается...

Выполнение программой определенных действий до начала ее основной работы
Подскажите у меня есть программа допустим View.exe она постоянно обновляется и постоянно...

Выполнение определенных действий в заданное время
Доброго времени суток! Стало интересно, возможно ли как то заставить программу выполнять какое...

Выполнение определенных действий на сайте
Всем привет! Я новичок на КиберФоруме, никак не решался зарегистрироваться здесь, но вот все-таки...

14
insite2012
Модератор
Эксперт .NET
4878 / 3831 / 1096
Регистрация: 12.10.2013
Сообщений: 11,101
Записей в блоге: 2
08.05.2015, 23:49 2
Цитата Сообщение от VanGhj Посмотреть сообщение
дайте мысль как сделать?
В FCL есть класс по распознаванию голоса. Но работает он, насколько я знаю, только с англ. языком.
0
Someone007
2763 / 2096 / 949
Регистрация: 09.05.2015
Сообщений: 5,204
Завершенные тесты: 1
09.05.2015, 03:06 3
Ссылки по теме:
Microsoft Speech Platform - SDK
Microsoft Speech Platform - Runtime
Microsoft Speech Platform - Runtime Languages
Можно реализовать управление голосом, поддерживается много языков, включая русский.

Добавлено через 1 час 2 минуты
Пример использования:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
using System;
using System.Diagnostics;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Microsoft.Speech.Recognition;
 
namespace VoiceControl
{
    public partial class Form1 : Form
    {
        private CultureInfo _culture;
        private SpeechRecognitionEngine _sre;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                _culture = new CultureInfo("ru-RU");
 
                _sre = new SpeechRecognitionEngine(_culture);
 
                // Setup event handlers
                _sre.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(sr_SpeechDetected);
                _sre.RecognizeCompleted += new EventHandler<RecognizeCompletedEventArgs>(sr_RecognizeCompleted);
                _sre.SpeechHypothesized += new EventHandler<SpeechHypothesizedEventArgs>(sr_SpeechHypothesized);
                _sre.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(sr_SpeechRecognitionRejected);
                _sre.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(sr_SpeechRecognized);
 
                // select input source
                _sre.SetInputToDefaultAudioDevice();
 
                // load grammar
                _sre.LoadGrammar(CreateSampleGrammar1());
                _sre.LoadGrammar(CreateSampleGrammar2());
 
                // start recognition
                _sre.RecognizeAsync(RecognizeMode.Multiple);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message);
            }
        }
 
        private Choices CreateSampleChoices()
        {
            var val1 = new SemanticResultValue("калькулятор", "calc");
            var val2 = new SemanticResultValue("проводник", "explorer");
            var val3 = new SemanticResultValue("блокнот", "notepad");
            var val4 = new SemanticResultValue("пэйнт", "mspaint");
 
            return new Choices(val1, val2, val3, val4);
        }
 
        private Grammar CreateSampleGrammar1()
        {
            var programs = CreateSampleChoices();
 
            var grammarBuilder = new GrammarBuilder("запустить", SubsetMatchingMode.SubsequenceContentRequired);
            grammarBuilder.Culture = _culture;
            grammarBuilder.Append(new SemanticResultKey("start", programs));
 
            return new Grammar(grammarBuilder);
        }
 
        private Grammar CreateSampleGrammar2()
        {
            var programs = CreateSampleChoices();
 
            var grammarBuilder = new GrammarBuilder("закрыть", SubsetMatchingMode.SubsequenceContentRequired);
            grammarBuilder.Culture = _culture;
            grammarBuilder.Append(new SemanticResultKey("close", programs));
 
            return new Grammar(grammarBuilder);
        }
 
        private void sr_SpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e)
        {
            AppendLine("Speech Recognition Rejected: " + e.Result.Text);
        }
 
        private void sr_SpeechHypothesized(object sender, SpeechHypothesizedEventArgs e)
        {
            AppendLine("Speech Hypothesized: " + e.Result.Text + " (" + e.Result.Confidence + ")");
        }
 
        private void sr_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e)
        {
            AppendLine("Recognize Completed: " + e.Result.Text);
        }
 
        private void sr_SpeechDetected(object sender, SpeechDetectedEventArgs e)
        {
            AppendLine("Speech Detected: audio pos " + e.AudioPosition);
        }
 
        private void sr_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            AppendLine("\t" + "Speech Recognized:");
 
            AppendLine(e.Result.Text + " (" + e.Result.Confidence + ")");
 
            if (e.Result.Confidence < 0.1f)
                return;
 
            for (var i = 0; i < e.Result.Alternates.Count; ++i)
            {
                AppendLine("\t" + "Alternate: " + e.Result.Alternates[i].Text + " (" + e.Result.Alternates[i].Confidence + ")");
            }
 
            for (var i = 0; i < e.Result.Words.Count; ++i)
            {
                AppendLine("\t" + "Word: " + e.Result.Words[i].Text + " (" + e.Result.Words[i].Confidence + ")");
 
                if (e.Result.Words[i].Confidence < 0.1f)
                    return;
            }
 
            foreach (var s in e.Result.Semantics)
            {
                var program = (string)s.Value.Value;
 
                switch (s.Key)
                {
                    case "start":
                        Process.Start(program);
                        break;
                    case "close":
                        var p = Process.GetProcessesByName(program);
                        if (p.Length > 0)
                            p[0].Kill();
                        break;
                }
            }
        }
 
        private void AppendLine(string text)
        {
            richTextBox1.AppendText(text + Environment.NewLine);
            richTextBox1.ScrollToCaret();
        }
    }
}
Данный пример позволяет голосом запускать/закрывать 4 заранее указанные в коде программы: калькулятор, проводник, блокнот и пэйнт посредством соответствующих голосовых команд: запустить <название программы> и закрыть <название программы>.

Для работы примера требуется установка Microsoft Speech Platform Runtime и Microsoft Speech Platform - Runtime Languages (MSSpeech_SR_ru-RU_TELE.msi).
4
VanGhj
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 4
09.05.2015, 13:16  [ТС] 4
Спасибо! с этим я уже давно разобрался, мне нужно записать файл (свой голос, команду) - нужна активация, что-то типа "ок, гугл" - Microsoft Speech я и использую, но он реагирует даже если тишина, или включен телевизор, вот и хотелось бы сделать слово активатор...
0
Metall_Version
2122 / 1259 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
Завершенные тесты: 2
09.05.2015, 14:46 5
Цитата Сообщение от VanGhj Посмотреть сообщение
но он реагирует даже если тишина, или включен телевизор, вот и хотелось бы сделать слово активатор...
это делается в коде вашего приложения, и от Speech.Recognition не зависит
1
VanGhj
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 4
12.05.2015, 13:39  [ТС] 6
активацию хочу сделать по такой схеме:
1. Создам запись голосовой команды
2. Нужно как-то слушать постоянно микрофон, и если сказали "слово" или "фразу" в файле, нужно сделать определенное действие.
без Microsoft.Speech - по активации уже запускать Microsoft.Speech
0
LeniumSoft
1439 / 829 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
Завершенные тесты: 1
12.05.2015, 15:27 7
Цитата Сообщение от VanGhj Посмотреть сообщение
активацию хочу сделать по такой схеме:
1. Создам запись голосовой команды
2. Нужно как-то слушать постоянно микрофон, и если сказали "слово" или "фразу" в файле, нужно сделать определенное действие.
без Microsoft.Speech - по активации уже запускать Microsoft.Speech
Ну и зачем это всё?

Microsoft.Speech сама слушает постоянно!

Тут:
C#
1
2
3
var grammarBuilder = new GrammarBuilder("запустить", SubsetMatchingMode.SubsequenceContentRequired);
            grammarBuilder.Culture = _culture;
            grammarBuilder.Append(new SemanticResultKey("start", programs));
Словом активации является "запустить". После этого слова идёт команда.

Цитата Сообщение от VanGhj Посмотреть сообщение
Нужно как-то слушать постоянно микрофон, и если сказали "слово" или "фразу" в файле, нужно сделать определенное действие.
Вам нужен будет постоянный анализ спектра и сравнение с шаблоном из файла! Всё это делает Microsoft.Speech. Вы хотите написать свой Microsoft.Speech, который будет запускать уже готовый Microsoft.Speech?
0
VanGhj
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 4
13.05.2015, 17:42  [ТС] 8
Цитата Сообщение от LeniumSoft Посмотреть сообщение
Microsoft.Speech сама слушает постоянно!
часто срабатывает когда работает телевизор, может есть настройки? по мимо Confidence? или подскажите как минимизировать ложные срабатывания

Цитата Сообщение от LeniumSoft Посмотреть сообщение
Вам нужен будет постоянный анализ спектра и сравнение с шаблоном из файла! Всё это делает Microsoft.Speech. Вы хотите написать свой Microsoft.Speech, который будет запускать уже готовый Microsoft.Speech?
я думаю наверно это лучший вариант, "ок, гугл" например срабатывает только от "ок, гугл" - а есть примеры кода?
0
Someone007
2763 / 2096 / 949
Регистрация: 09.05.2015
Сообщений: 5,204
Завершенные тесты: 1
13.05.2015, 18:50 9
Цитата Сообщение от VanGhj Посмотреть сообщение
часто срабатывает когда работает телевизор, может есть настройки? по мимо Confidence? или подскажите как минимизировать ложные срабатывания
Чувствителность микрофона снизить например.
0
Registrator
0 / 0 / 0
Регистрация: 28.03.2012
Сообщений: 6
24.08.2015, 04:25 10
Цитата Сообщение от Someone007 Посмотреть сообщение
Ссылки по теме:
Microsoft Speech Platform - SDK
Microsoft Speech Platform - Runtime
Microsoft Speech Platform - Runtime Languages
Можно реализовать управление голосом, поддерживается много языков, включая русский.

Добавлено через 1 час 2 минуты
Пример использования:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
using System;
using System.Diagnostics;
using System.Globalization;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Microsoft.Speech.Recognition;
 
namespace VoiceControl
{
    public partial class Form1 : Form
    {
        private CultureInfo _culture;
        private SpeechRecognitionEngine _sre;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                _culture = new CultureInfo("ru-RU");
 
                _sre = new SpeechRecognitionEngine(_culture);
 
                // Setup event handlers
                _sre.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(sr_SpeechDetected);
                _sre.RecognizeCompleted += new EventHandler<RecognizeCompletedEventArgs>(sr_RecognizeCompleted);
                _sre.SpeechHypothesized += new EventHandler<SpeechHypothesizedEventArgs>(sr_SpeechHypothesized);
                _sre.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(sr_SpeechRecognitionRejected);
                _sre.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(sr_SpeechRecognized);
 
                // select input source
                _sre.SetInputToDefaultAudioDevice();
 
                // load grammar
                _sre.LoadGrammar(CreateSampleGrammar1());
                _sre.LoadGrammar(CreateSampleGrammar2());
 
                // start recognition
                _sre.RecognizeAsync(RecognizeMode.Multiple);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message);
            }
        }
 
        private Choices CreateSampleChoices()
        {
            var val1 = new SemanticResultValue("калькулятор", "calc");
            var val2 = new SemanticResultValue("проводник", "explorer");
            var val3 = new SemanticResultValue("блокнот", "notepad");
            var val4 = new SemanticResultValue("пэйнт", "mspaint");
 
            return new Choices(val1, val2, val3, val4);
        }
 
        private Grammar CreateSampleGrammar1()
        {
            var programs = CreateSampleChoices();
 
            var grammarBuilder = new GrammarBuilder("запустить", SubsetMatchingMode.SubsequenceContentRequired);
            grammarBuilder.Culture = _culture;
            grammarBuilder.Append(new SemanticResultKey("start", programs));
 
            return new Grammar(grammarBuilder);
        }
 
        private Grammar CreateSampleGrammar2()
        {
            var programs = CreateSampleChoices();
 
            var grammarBuilder = new GrammarBuilder("закрыть", SubsetMatchingMode.SubsequenceContentRequired);
            grammarBuilder.Culture = _culture;
            grammarBuilder.Append(new SemanticResultKey("close", programs));
 
            return new Grammar(grammarBuilder);
        }
 
        private void sr_SpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e)
        {
            AppendLine("Speech Recognition Rejected: " + e.Result.Text);
        }
 
        private void sr_SpeechHypothesized(object sender, SpeechHypothesizedEventArgs e)
        {
            AppendLine("Speech Hypothesized: " + e.Result.Text + " (" + e.Result.Confidence + ")");
        }
 
        private void sr_RecognizeCompleted(object sender, RecognizeCompletedEventArgs e)
        {
            AppendLine("Recognize Completed: " + e.Result.Text);
        }
 
        private void sr_SpeechDetected(object sender, SpeechDetectedEventArgs e)
        {
            AppendLine("Speech Detected: audio pos " + e.AudioPosition);
        }
 
        private void sr_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            AppendLine("\t" + "Speech Recognized:");
 
            AppendLine(e.Result.Text + " (" + e.Result.Confidence + ")");
 
            if (e.Result.Confidence < 0.1f)
                return;
 
            for (var i = 0; i < e.Result.Alternates.Count; ++i)
            {
                AppendLine("\t" + "Alternate: " + e.Result.Alternates[i].Text + " (" + e.Result.Alternates[i].Confidence + ")");
            }
 
            for (var i = 0; i < e.Result.Words.Count; ++i)
            {
                AppendLine("\t" + "Word: " + e.Result.Words[i].Text + " (" + e.Result.Words[i].Confidence + ")");
 
                if (e.Result.Words[i].Confidence < 0.1f)
                    return;
            }
 
            foreach (var s in e.Result.Semantics)
            {
                var program = (string)s.Value.Value;
 
                switch (s.Key)
                {
                    case "start":
                        Process.Start(program);
                        break;
                    case "close":
                        var p = Process.GetProcessesByName(program);
                        if (p.Length > 0)
                            p[0].Kill();
                        break;
                }
            }
        }
 
        private void AppendLine(string text)
        {
            richTextBox1.AppendText(text + Environment.NewLine);
            richTextBox1.ScrollToCaret();
        }
    }
}
Данный пример позволяет голосом запускать/закрывать 4 заранее указанные в коде программы: калькулятор, проводник, блокнот и пэйнт посредством соответствующих голосовых команд: запустить <название программы> и закрыть <название программы>.

Для работы примера требуется установка Microsoft Speech Platform Runtime и Microsoft Speech Platform - Runtime Languages (MSSpeech_SR_ru-RU_TELE.msi).
Доброго времени суток.
При использовании этого образца выскакивает «Не найден распознаватель с требуемым кодом. Имя параметра: culture»
В чем загвоздка? И как устранить?
P.S.
Я пока еще слаб в программировании.
0
Someone007
2763 / 2096 / 949
Регистрация: 09.05.2015
Сообщений: 5,204
Завершенные тесты: 1
24.08.2015, 22:44 11
Цитата Сообщение от Registrator Посмотреть сообщение
При использовании этого образца выскакивает «Не найден распознаватель с требуемым кодом. Имя параметра: culture»
В чем загвоздка? И как устранить?
Значит он не установлен. Выше есть ссылки на инсталяторы Runtime, SDK и распознаватели для различных языков.
0
Tilesto
7 / 7 / 0
Регистрация: 14.05.2015
Сообщений: 145
Завершенные тесты: 2
20.06.2016, 13:54 12
Подниму тему.
Someone007, предоставил код (спасибо), который работает с двумя словами во фразе:
действие + объект, над которым действие происходит.

Как сделать чтобы было больше двух слов? Например: Запустить блокнот через 2 минуты. Утрированный пример, но смысл понятен. Чтобы было не Grammar (Choices) а что-то типа Grammar (Choices (Choices))

Добавлено через 18 минут
Если (по коду выше) в методе CreateSampleGrammar1() добавить строки
C#
1
2
3
grammarBuilder.Append(new SemanticResultKey("start", programs));
var times= CreateSampleChoicesTime();
grammarBuilder.Append(new SemanticResultKey("time", times));
то он отлично будет распознавать все три слова, НО, он будет распознавать ТОЛЬКО все вместе, т.е. просто - включи калькулятор, без времени он не распознает. Нужно чтобы он учитывал не только всю фразу целиком, а также подмножества. Куда "пихнуть" SubsequenceContentRequired?

Добавлено через 48 минут
Решилась проблема, если кому надо:
Microsoft.Speech.Recognition - несколько слов
0
SpartanecLexa
0 / 0 / 1
Регистрация: 24.10.2012
Сообщений: 253
19.05.2017, 16:49 13
Цитата Сообщение от Someone007 Посмотреть сообщение
Данный пример позволяет голосом запускать/закрывать 4 заранее указанные в коде программы: калькулятор, проводник, блокнот и пэйнт посредством соответствующих голосовых команд: запустить <название программы> и закрыть <название программы>.
а как делать управление по браузеру?
пробовал так
C#
1
 var val4 = new SemanticResultValue("вк", "www.vk.com");
не помогло
0
ITkey
0 / 0 / 0
Регистрация: 13.08.2018
Сообщений: 2
13.08.2018, 17:40 14
Попробуй
C#
1
var val4 = new SemanticResultValue("вк", "http://vk.com");
0
KanTs
0 / 0 / 0
Регистрация: 07.09.2015
Сообщений: 7
19.03.2019, 17:07 15
А как можно сделать тест? Ну например Идет звуковой вопрос. Человек отвечает "да" или "нет"
В зависимости от ответа он запускает другой вопрос. и чтобы он записывал данный ответ.
0
19.03.2019, 17:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2019, 17:07

Выполнение определенных действий по времени
Добрый день. Подскажите, пожалуйста, как правильно сделать так, чтобы база выполняла...

Выполнение определенных действий в заданное время
есть форма , таймер, лейбел 1. В таймере прописываем Label1.Caption:=TimeToStr(Time); допустим...

Голосовая активация
Как сделать, чтобы приложение начинало слушать после определенной фразы? Например как Google Now...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru