Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/167: Рейтинг темы: голосов - 167, средняя оценка - 4.54
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430

Распознавание речи в текст, Google

09.03.2013, 21:19. Показов 34654. Ответов 86
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, я знаю что наверняка я не первый уже это спрашиваю, но может кто использовал в своих работах распознаватель от гугла ? Смотрел статьи на хабре, но без примеров я не могу понять как оно работает.

Поделитесь своими знаниями по распознаванию. Или скиньте какой-нибудь пример рабочий, самый простетский. Мне только нужно чтобы речь (команда - 1-3 слова) выводилась в textBox.

Для чего мне это нужно ? Вот, хочу заставить свою железяку ездить по команде =]




Буду очень благодарен ! Сразу скажу, делаю для себя и для общего развития, не для комерческих целей - для участия в соревнованиях и только.
Миниатюры
Распознавание речи в текст, Google  
6
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2013, 21:19
Ответы с готовыми решениями:

Распознавание речи Google и сохранение результатов в текстовый файл
Здравствуйте. Передо мной стоит задача в создании программы для непрерывного распознавания речи введенной с микрофона и сохранения...

Распознавание речи
Пожалуйста помогите как распознавать звук в языке C#_2010. У меня курсовая работа срок до 15.09.2013г :

Распознавание речи offline
Доброго времени суток. Пожалуйста, подскажите есть ли какие-то рабочие примеры, при помощи которых можно быстро, малой кровью реализовать...

86
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
22.03.2013, 13:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
System.Windows.Threading.DispatcherTimer где присутствует Windows вылазят ошибки, с вопросами о пропущенных ссылках на проект\библиотеку. Вот я и спросил...
А проект какого типа?
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
22.03.2013, 14:11  [ТС]
Сейчас я прошу помощи по тому что WPF. Проект я скинул. Там где производится проверка (AudioThresh) - это прослушка микрофона на порог срабатывания. Если такой есть - нужно вызвать другую программу и ждать 5 секунд пока она не завершится. После завершения 5 секунд - прослушивать дальше все.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
22.03.2013, 17:28
SERGEY199100, пример таймера на WPF
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Threading;
using Timer = System.Timers.Timer;
 
namespace WpfApplication1
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow
    {
        private readonly Timer timer;
        private long i;
        public MainWindow()
        {
            InitializeComponent();
            timer = new Timer(10);
            ThreadStart onTimerElapsed = () => Textbox.Text = i++.ToString(); //Собственно метод, вызывающийся в таймере
            timer.Elapsed += (sender, args) => Dispatcher.BeginInvoke(onTimerElapsed);
            timer.Start();
        }
    }
}
1
4 / 4 / 1
Регистрация: 23.08.2010
Сообщений: 118
22.03.2013, 18:26
Цитата Сообщение от Slicker Посмотреть сообщение
Специально прочитал 2 четверостишья из Пушкина и несколько строк одной из песен Виктора Цоя. Google Speech распознал их на ура полностью и даже с правильными окончаниями.
Выложите видео, как это у Вас получается. Может у Вас звуковая карта хорошая, микрофон? Или дикция хорошая? Я пытался не читать готовый текст с экрана, а проговорить что-то своё кажется, ещё читал из книжки но без рифм.
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
22.03.2013, 18:43
А такой вариант не подойдёт? Просто там вылетает та прога, что с маленьким окошком, я не могу нормально затестить
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            if (Tr || Sum2 > AudioThresh2)
            {
                //waveIn.StartRecording();
 
                Process proc = new Process();
                proc.StartInfo.FileName = @"MainWindow.exe";
                proc.StartInfo.Arguments = "";
                proc.Start();
                proc.WaitForExit();
                //string outputFilename = "OSA_doit.wav";
                //writer.WriteData(buffer, 0, bytesRecorded);
                //recordingState = RecordingState.Recording;
                //Услышали шум
            }
1
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
22.03.2013, 21:32  [ТС]
Цитата Сообщение от tsvigo Посмотреть сообщение
Выложите видео, как это у Вас получается. Может у Вас звуковая карта хорошая, микрофон? Или дикция хорошая? Я пытался не читать готовый текст с экрана, а проговорить что-то своё кажется, ещё читал из книжки но без рифм.
- у меня также не вызывает проблем расспознование гугла - все пока хорошо переводится с приличным положительным коэфициентом. Когда тестите не забывайте что формат и качество записи для гугля нужно .vaw\flac от 8 000 kHz. Там диапазон частотный, за пределами которого гугл все отрыгает. ИМХО.

А я и не подозревал о функции proc.WaitForExit(); Сейчас постараюсь ее протестить. Мне главное чтобы при запуске этого "окошка"exe в условии, которое срабатывает при звуковом скачке не запускалось десять раз окна. А то получится когда мы начинаем говорить - каждые высокие интонации в произношении цельного кука предложения будут вызывать новый запуск окошка. Окошко то - при запуске запускает запись звукового файла в течении 5 секунд, после автоматически сохраняется и закрывается.

Добавлено через 1 минуту
*расспознавать
*куска

Добавлено через 40 минут
ТО что надо работает ! Спасибо =) Пригодится в будущем и в других проектах однозначно.

Купил даже под свою задачу блютус гарнитуру на ухо с микрофоном для голосовых команд непосредственно из "первых уст", а если бы поставил на робота, то, наверняка там от мех-х движений срабатывал бы датчик звука.
Так вот, купить купил а звук на комп и с компа на наушник передается ужасно, я бы это только шумом назвал не более. Использую наушник Jabra BT2045, и блютус-свиток. ПО для cвязи Blusoleil 8.x.x.x.x ( что-то версию продукта не найду где прочесть ) )) Стоит пробная и она скорее всего не позволяет мне передавать достаточный трафик для нормальной работы с гарнитурой. Кто юзал Blusoleil у кого есть стабильная кряканутая версия, дайте скачать или наводку какую-нибудь.

Добавлено через 1 минуту
*bluesoleil
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
22.03.2013, 22:56
.vaw\flac от 8 000 kHz
wav ...по частоте дискретизации это не совсем так, что отвергает. Если вы меняете частоту дискретизации в отправляемом сэмпле, то и в запросе ее нужно изменить "'Content-Type: audio/x-flac; rate=8000' + CRLF + CRLF;"

А то получится когда мы начинаем говорить - каждые высокие интонации в произношении цельного кука предложения будут вызывать новый запуск окошка.
как уже говорил, достаточно отслеживать в непрерывном потоке лишь уровень и выставлять флаг превышения с запуском таймера выдержки, при очередном превышении - таймер выдержки обнулять. По окончании интервала выдержки формировать FLAC и отправлять запрос.

Использую наушник Jabra BT2045, и блютус-свиток. ПО для cвязи Blusoleil 8.x.x.x.x
рекомендую 6.0.227.0. У меня при эмуляции в системе дополнительное аудиоустройство дает двухсторонний поток.
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
22.03.2013, 23:19  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
wav ...по частоте дискретизации это не совсем так, что отвергает. Если вы меняете частоту дискретизации в отправляемом сэмпле, то и в запросе ее нужно изменить "'Content-Type: audio/x-flac; rate=8000' + CRLF + CRLF;"

как уже говорил, достаточно отслеживать в непрерывном потоке лишь уровень и выставлять флаг превышения с запуском таймера выдержки, при очередном превышении - таймер выдержки обнулять. По окончании интервала выдержки формировать FLAC и отправлять запрос.

рекомендую 6.0.227.0. У меня при эмуляции в системе дополнительное аудиоустройство дает двухсторонний поток.
- я сперва об этом говорил точно тоже... И это у меня в планах и было. И это уже реализовано почти.
- попробую поставить. На 8ку 6я версия встанет ?
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
22.03.2013, 23:37
...8-кой не пользуюсь.
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
22.03.2013, 23:50
Цитата Сообщение от tsvigo Посмотреть сообщение
Я пытался не читать готовый текст с экрана, а проговорить что-то своё кажется
А в таком случае стандартные алгоритмы не пойдут. Анализатор должен учитывать что вы можете пропустить некоторые буквы в словах, так что как вы читаете - с дикцией или без - не важно.
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
23.03.2013, 20:15  [ТС]
Мне еще предстоит разобраться как выдергивать из ответа гугла ключевые лова-команды таким условием, что мы заранее предполагаем что говорить могут 2 и более человек. Из этой каши нужно отобрать интересующие нас слова, например "Я сегодня у Васи видел машину выполнить 200 новую" - из этой каши нудно только "Выполнить" и "200".
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
27.03.2013, 20:09  [ТС]
Ребят, почти доделал все что хотел. Сейчас с этим куском кода разбираюсь:

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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
using CUETools.Codecs;
using CUETools.Codecs.FLAKE;
using System.Diagnostics;
 
namespace GoogleSpeech
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
 
            txtPath.Text = Settings.Instance.wavName;
            //Запуск расспознавания
            SendFileRun(Settings.Instance.wavName);
        }
        
        private delegate void DoWorkDelegate(String filePath);
              
        private void SendFileRun(String filePath)
        {
          // Disable the button
          DisableStartButtons();
          // Create delegate and make async call
          DoWorkDelegate worker = new DoWorkDelegate(SendFile);
          worker.BeginInvoke(filePath, new AsyncCallback(DoWorkComplete), worker);
        }
 
        private void EnableStartButtons()
        {
 
          if (InvokeRequired)
          {
            Invoke(new MethodInvoker(EnableStartButtons));
          }
          else
          {
            btnBrowse.Enabled = true;
            btnSearch.Enabled = true;
          }
          
        }
 
        private void DisableStartButtons()
        {
          btnBrowse.Enabled = false;
          btnSearch.Enabled = false;
        }
 
 
        private void DoWorkComplete(IAsyncResult workID)
        {
          EnableStartButtons();
          DoWorkDelegate worker = workID.AsyncState as DoWorkDelegate;
          worker.EndInvoke(workID);
          //ReportOnProgress(100, "Запрос произведен");
        }
 
 
        private delegate void ReportOnProgressDelegate(int progress, string msg);
 
        private void ReportOnProgress(int progress, string msg)
        {
          if (InvokeRequired)
          {
            Invoke(new ReportOnProgressDelegate(ReportOnProgress),
              new object[] { progress, msg });
            return;
            ;
          }
                    
            this.Text = Settings.Instance.AppTitle + " —  " + msg;                      
        }
       
        private void SendFile(String filePath)
        {          
          try
          {
            ReportOnProgress(10, "Идет запрос");
            String responseFromServer = GoogleVoice.GoogleSpeechRequest(filePath, Settings.Instance.tmpName);
 
            
            AddLog(responseFromServer + System.Environment.NewLine);
            JSon.RecognitionResult result = JSon.Parse(responseFromServer);
            if (result.hypotheses.Length > 0)
            {
              JSon.RecognizedItem item = result.hypotheses.First();
              //listBox1.Items.Add(String.Format("{0:0.000} ; {1}", item.confidence, item.utterance));
              AddToList(String.Format("{0:0.000} ; {1}", item.confidence, item.utterance));
            }
            else
            {
              AddToList(String.Format("None"));
              //listBox1.Items.Add(String.Format("None"));
            }
 
            ReportOnProgress(100, "Запрос успешно выполнен");
          }
          catch (Exception e)
          {
            ReportOnProgress(100, "Ошибка запроса: " + e.Message);
            AddLog(e.ToString());            
          }
                     
        }
 
        private delegate void AddDelegate(String log);
        private void AddLog(string log)
        {         
            if (InvokeRequired)
            {
              Invoke(new AddDelegate(AddLog), new object[] { log });
              return; 
            }
         
          txtLog.Text += log;
        }
 
      private void AddToList(String item)
      {
 
        if (InvokeRequired)
        {
          Invoke(new AddDelegate(AddToList), new object[] { item });
          return; 
        }
        listBox1.Items.Add(item);
 
      }
 
 
        private void button1_Click(object sender, EventArgs e)
        {
            SendFileRun(Settings.Instance.wavName);
        }
 
        private void btnBrowse_Click(object sender, EventArgs e)
        {
            openFileDialog1.Title = "Open Wave File";
            openFileDialog1.Filter = "Wave files (*.wav)|*.wav";
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }
 
            string sFilePath;
            sFilePath = openFileDialog1.FileName;
            if (sFilePath == "")
            {
                return;
            }
          
            Settings.Instance.wavName = sFilePath;
            txtPath.Text = sFilePath;
            SendFileRun(Settings.Instance.wavName);
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            txtLog.SelectionStart = txtLog.Text.Length;
            txtLog.ScrollToCaret();
            txtLog.Refresh();
        }
 
        private void txtPath_TextChanged(object sender, EventArgs e)
        {
            Settings.Instance.wavName = txtPath.Text;
        }
 
        private void button1_Click_1(object sender, EventArgs e)
        {
 
        }
 
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //string command = listBox1.Text;
            //if (command.Contains("купить велосипед"))
            //{
            //    //создаем новый процесс
            //    Process proc = new Process();
            //    //Запускаем Блокнто
            //    proc.StartInfo.FileName = @"Notepad.exe";
            //    proc.StartInfo.Arguments = "";
            //    proc.Start();
 
            //}
            //if (){}
        }
    }
}
Видите у меня в событии по клику на ListBox1 прописаны комментарии ? Я хочу получив расспознное слово запустить, пока для отладки, просто запуск блокнота. На самом то деле там будет в COM-порт отсылаться команды управления, но пока... Вот, я делаю такой вот способ:

string command = listBox1.Text;
if (command.Contains("купить велосипед"))
{
//создаем новый процесс
Process proc = new Process();
//Запускаем Блокнто
proc.StartInfo.FileName = @"Notepad.exe";
proc.StartInfo.Arguments = "";
proc.Start();
}

В listBox1 выводится коэффициент качества распознавания и сама фраза. Contains.XXX Проверяем в строке XXX нужное нам выражение, если есть - запускаем процесс.

Скажите, правильно ли я сделал ? Или поправьте меня примером.
Суть в том, что я не знаю где проверять это условие. Там все делается в потоках.
Где в коде создается, или обрабатывается listBox1 (AddToList) чтобы там же делать мою проверку\выборку ?

Мне пишет ошибку, что я не в том потоке выполняю операцию с listBox1... =\
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
27.03.2013, 20:20
на этот обработчик ты подписываешься в основном потоке?
C#
1
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
Я просто не пойму, если ты скажем в этом обработчике обращаешься к контролу, то всё нормально, а в указанном выше уже ошибка?
C#
1
private void txtPath_TextChanged(object sender, EventArgs e)
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
27.03.2013, 20:26  [ТС]
Сейчас объясню =)

Добавлено через 5 минут
Код ниже побочный эффект того что я хочу - я хочу как только распознанный текст приходит с гугла и помещается в listBox в виде строки коэфициент и ответ-фраза, проверять содержимое полученное и вычленять оттуда нужные фразы, типа "купить велосипед". )

В txt.log поле, заносится полный ответ от гугла, а в listbox коэф-т и фраза.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string command = listBox1.Text;
            if (command.Contains("ололо"))
            {
                //создаем новый процесс
                Process proc = new Process();
                //Запускаем Блокнто
                proc.StartInfo.FileName = @"Notepad.exe";
                proc.StartInfo.Arguments = "";
                proc.Start();
 
            }
          }
Если действительно, в ответе есть "купить велосипед" и мы нажмем по строке - то запускается процесс, если мы нажме по той же строке но там не будет велосипеда, то процесс не запустится. Как исключить оператора и запускать процесс автоматом после получение ответа от гугла ?
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
27.03.2013, 20:45
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
Как исключить оператора и запускать процесс автоматом после получение ответа от гугла ?
Так, код просмотрел, всё прочитал, вроде понял, но не всё. Какого оператора надо исключить? Так тебе нужен листбокс или нет?

Добавлено через 49 секунд
Ну вот же ты получаешь данные, там и сравнивай:
C#
1
AddToList(String.Format("{0:0.000} ; {1}", item.confidence, item.utterance));
Добавлено через 44 секунды
А тьфу, листбокс тебе нужен.

Добавлено через 1 минуту
Так эти строки не работают или что?
C#
1
2
            string command = listBox1.Text;
            if (command.Contains("ололо"))
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
27.03.2013, 20:50  [ТС]
Цитата Сообщение от Casper-SC Посмотреть сообщение
Так, код просмотрел, всё прочитал, вроде понял, но не всё. Какого оператора надо исключить? Так тебе нужен листбокс или нет?


Добавлено через 1 минуту
Так эти строки не работают или что?
C#
1
2
            string command = listBox1.Text;
            if (command.Contains("ололо"))
-эти 2 строки работают как мне надо, а вот где их разместить в коде ? Чтобы не по нажатию проверялось а по приходу ответаа от гугла(при размещении ответа в листбоксе)
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
27.03.2013, 20:56
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
Суть в том, что я не знаю где проверять это условие. Там все делается в потоках.
Где в коде создается, или обрабатывается listBox1 (AddToList) чтобы там же делать мою проверку\выборку ?
Я бы вообще во всяких листбоксах и прочих контролах ничего не проверял и не обращался бы к ним из кода классов, которые работают с тем же гуглом. Я бы передавал в методы параметры полученные из контролов, создал бы события получения данных, подписался бы на них и из обработчиков бы выводил инфу на листбокс, к примеру. Всё зависит от задачи.

Добавлено через 4 минуты
Создай класс работающий с гуглом, убери методы отправки и получения данных из класса формы, в том классе, который ты создашь не обращайся к контролам, все данные получай через параметры методов
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
27.03.2013, 21:18
В общем я бы так делал, примерно:
C#
1
2
3
4
5
6
7
8
9
10
11
    internal class GoogleData
    {
        public GoogleData(string confidence, long utterance)
        {
            Confidence = confidence;
            Utterance = utterance;
        }
 
        public string Confidence { get; protected set; }
        public long Utterance { get; protected set; }
    }
C#
1
2
3
4
5
6
7
8
9
    internal class GoogleDataEventArgs : EventArgs
    {
        public GoogleDataEventArgs(GoogleData data)
        {
            Data = data;
        }
 
        public GoogleData Data { get; protected set; }
    }
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
    internal class GoogleInteraction
    {
        public event EventHandler<GoogleDataEventArgs> DataReceived;
 
        public void SendData(string filePath)
        {
            ThreadPool.QueueUserWorkItem(
                new WaitCallback(unused =>
                    {
                        bool success = false;
                        //Получаем данные типа :)
                        GoogleData data = new GoogleData("Купить молока", 99L);
                        success = true;
                        //Всё, кажись получили
 
                        if (success)
                        {
                            OnDataReceived(new GoogleDataEventArgs(data));
                        }
                    }));
 
        }
 
        public void OnDataReceived(GoogleDataEventArgs e)
        {
            EventHandler<GoogleDataEventArgs> handler = DataReceived;
            if (handler != null)
                handler(this, e);
        }
    }
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
    public partial class Form1 : Form
    {
        private GoogleInteraction _google;
 
        public Form1()
        {
            InitializeComponent();
            //Кстати, можно передавать контекст синхронизации и тогда в обработчиках не нужен будет вызов Invoke
            _google = new GoogleInteraction(); //_google = new GoogleInteraction(SynchronizationContext.Current); 
            _google.DataReceived += Google_DataReceived;
        }
 
        private void Google_DataReceived(object sender, GoogleDataEventArgs e)
        {
            AddToDataListBox(string.Format("{0} - {1}", e.Data.Confidence, e.Data.Utterance));
        }
 
        private void StartButton_Click(object sender, EventArgs e)
        {
            _google.SendData("Бла-бла-бла");
        }
 
        private void AddToDataListBox(string item)
        {
            if (InvokeRequired)
                Invoke((Action<string>)AddToDataListBox, item);
            else
                dataListBox.Items.Add(item);
 
        }
    }
Вложения
Тип файла: rar WinForms_GoogleBlaBlaBla.rar (14.2 Кб, 78 просмотров)
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
27.03.2013, 21:23
Вот тебе инфа за контекст синхронизации: Как правильно работать с SynchronizationContext?
1
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
27.03.2013, 21:45  [ТС]
Ого, нехило информации подкинул для размышлений на ночь )) Спасибо, попробую разобраться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.03.2013, 21:45

Распознавание речи по языку
Всем привет. Прощу помочь советам. Есть идея написать приложение для распознавание языка. Например, приложение будет слушать, и если он...

Как реализовать распознавание речи
Подскажите пожалуйста как сделать программу для распознавания текста в речь

Распознавание речи, записанной с микрофона
Доброго времени суток! Нужно сделать программку которая будет с микрофона а потом переводить голос в текст и выводить на монитор. Проблема...

Распознавание речи с использованием Speech API
Есть более-менее рабочая программа на C# по распознаванию речи и аккуратным интерфейсом, которую можно доработать. Чтобы на диплом была...

Как сделать распознавание речи на Microsoft.Speech?
Привет всем, надо сделать распознавание речи на РУССКОМ ЯЗЫКЕ. Использую библиотеку Microsoft.Speech. И мне надо распознавать не фразы, а...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru