Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/92: Рейтинг темы: голосов - 92, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 4
1

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

08.05.2015, 19:19. Показов 18104. Ответов 17
Метки нет (Все метки)

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

Может кто-то что-то подобное делал? Если нет, дайте мысль как сделать? и пару кусочков кода
И еще вопрос, можно как-то анализировать голос? например запишу я файл со своим голосом, можно как-то определить что это мой голос или чей-то другой?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2015, 19:19
Ответы с готовыми решениями:

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

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

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

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

17
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
08.05.2015, 23:49 2
Цитата Сообщение от VanGhj Посмотреть сообщение
дайте мысль как сделать?
В FCL есть класс по распознаванию голоса. Но работает он, насколько я знаю, только с англ. языком.
0
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
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
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 4
09.05.2015, 13:16  [ТС] 4
Спасибо! с этим я уже давно разобрался, мне нужно записать файл (свой голос, команду) - нужна активация, что-то типа "ок, гугл" - Microsoft Speech я и использую, но он реагирует даже если тишина, или включен телевизор, вот и хотелось бы сделать слово активатор...
0
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
09.05.2015, 14:46 5
Цитата Сообщение от VanGhj Посмотреть сообщение
но он реагирует даже если тишина, или включен телевизор, вот и хотелось бы сделать слово активатор...
это делается в коде вашего приложения, и от Speech.Recognition не зависит
1
0 / 0 / 0
Регистрация: 08.05.2015
Сообщений: 4
12.05.2015, 13:39  [ТС] 6
активацию хочу сделать по такой схеме:
1. Создам запись голосовой команды
2. Нужно как-то слушать постоянно микрофон, и если сказали "слово" или "фразу" в файле, нужно сделать определенное действие.
без Microsoft.Speech - по активации уже запускать Microsoft.Speech
0
1453 / 845 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
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
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
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
13.05.2015, 18:50 9
Цитата Сообщение от VanGhj Посмотреть сообщение
часто срабатывает когда работает телевизор, может есть настройки? по мимо Confidence? или подскажите как минимизировать ложные срабатывания
Чувствителность микрофона снизить например.
0
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
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
24.08.2015, 22:44 11
Цитата Сообщение от Registrator Посмотреть сообщение
При использовании этого образца выскакивает «Не найден распознаватель с требуемым кодом. Имя параметра: culture»
В чем загвоздка? И как устранить?
Значит он не установлен. Выше есть ссылки на инсталяторы Runtime, SDK и распознаватели для различных языков.
0
7 / 7 / 0
Регистрация: 14.05.2015
Сообщений: 145
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
0 / 0 / 1
Регистрация: 24.10.2012
Сообщений: 252
19.05.2017, 16:49 13
Цитата Сообщение от Someone007 Посмотреть сообщение
Данный пример позволяет голосом запускать/закрывать 4 заранее указанные в коде программы: калькулятор, проводник, блокнот и пэйнт посредством соответствующих голосовых команд: запустить <название программы> и закрыть <название программы>.
а как делать управление по браузеру?
пробовал так
C#
1
 var val4 = new SemanticResultValue("вк", "www.vk.com");
не помогло
0
0 / 0 / 0
Регистрация: 13.08.2018
Сообщений: 2
13.08.2018, 17:40 14
Попробуй
C#
1
var val4 = new SemanticResultValue("вк", "http://vk.com");
0
3 / 3 / 1
Регистрация: 07.09.2015
Сообщений: 11
19.03.2019, 17:07 15
А как можно сделать тест? Ну например Идет звуковой вопрос. Человек отвечает "да" или "нет"
В зависимости от ответа он запускает другой вопрос. и чтобы он записывал данный ответ.
0
0 / 0 / 0
Регистрация: 19.11.2019
Сообщений: 3
19.11.2019, 09:53 16
Скажите пожалуйста, как разобраться с установщиками? И только в них ли дело? У меня в коде 36 ошибок получатся
0
-27 / 7 / 1
Регистрация: 19.07.2011
Сообщений: 627
30.01.2020, 07:57 17
очень странно студия реагирует на этот код. выдает что-то неосмысленное.
1
0 / 0 / 0
Регистрация: 09.05.2019
Сообщений: 29
08.08.2020, 15:24 18
А как можно сделать, чтобы распознавание работало в цикле? У меня распознаётся одно слово и выполняется команда (считывается поток данных с камеры). И после этого уже не работает.
0
08.08.2020, 15:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2020, 15:24
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru