Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/30: Рейтинг темы: голосов - 30, средняя оценка - 4.50
 Аватар для TermenatorX
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 145

Нужен пример распознавания речи с библиотекой Speech

09.05.2015, 23:27. Показов 6887. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите с распознаванием речи с библиотекой Speech. Надо считывать речь беспрерывно и выделять из неё команды (насколько понял надо юзать Choices). Если можете напишите пример.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.05.2015, 23:27
Ответы с готовыми решениями:

Требуется С/С++ программист для работы с библиотекой распознавания речи
Есть интересная задача для опытного С/С++ программиста со знаниями в области обработки speech, распознавания речи и/или статистических...

Пример. Облачный синтезатор речи Google. (Google speech synthesis. Example)
Может сгодится кому. :) В метод передаем фразу, получаем mp3 файлик со звуком. public static void textToSpeech(String text,...

Нужен пример с библиотекой Clang
Добрый вечер. Нужен пример с какой нибудь "шарповой" вариацией библиотеки clang. CppSharp, ClangSharp, не так важно. Никак у меня не...

48
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
27.05.2015, 21:23
Студворк — интернет-сервис помощи студентам
Не телепат, будете зажевывать мысль, буду игнорировать.
0
 Аватар для TermenatorX
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 145
01.06.2015, 18:53  [ТС]
Можно вопрос это зачем
Delphi
1
2
inc(gl_inc);
 if gl_inc > 1000 div timer1.Interval then begin
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
01.06.2015, 19:22
...выдержка 1000 мс при тиках таймера меньше 1000 мс. На функционал не влияет.
0
 Аватар для TermenatorX
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 145
13.07.2015, 18:46  [ТС]
raxp, можно ли проследить когда функция speech закончит выполнение, у меня просто после распознавания текста он сразу же синтезируется и вылазит ошибка. Есть вариант пустить её в поток но все же.
Вложения
Тип файла: rar Test.rar (1.07 Мб, 5 просмотров)
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
13.07.2015, 20:45
...функция recognize возвращает параметры:
- full_answer_google,
- recognize_flag,
- recognize_text,
- recognize_accuracy.

Поскольку при новом распознавании ID в full_answer_google всегда разный, то появление новой команды легко отслеживается путем сравнения предыдущего состояния:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 full_answer_google:= '';
   recognize(full_answer_google,
             recognize_flag,
             recognize_text,
             recognize_accuracy);
 
   // результаты
   if gl_full_answer_google <> full_answer_google then begin
    if (recognize_text<>'Не распознано...')and(recognize_text<>'') then begin
     // делаем чего-нибудь 
     //command(recognize_text);
    end
   end;
  // запоминаем
   gl_full_answer_google:= full_answer_google;
p.s.: я бы конечно мог добавить функцию обратного вызова приложения из библиотеки для того, чтобы дергать этим событием в аппликэйшен из потока в либе, и положить inc с описанием функи, но как показала практика народ имеет трудности с каллбеками, особенно в других языках . Так что да, такое событие можно добавить, но... не заинтересован.
0
 Аватар для TermenatorX
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 145
20.07.2015, 11:09  [ТС]
raxp, я насчет Google translate, там идёт проговаривание фразы.
Delphi
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
unit Maya;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Controls, Forms,
  StdCtrls, ExtCtrls, ComCtrls;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Panel2: TPanel;
    Label2: TLabel;
    Edit1: TEdit;
    CheckBox1: TCheckBox;
    Button1: TButton;
    Panel1: TPanel;
 
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Timer1Timer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    procedure Detect(s:string);
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
{$R *.dfm}
 
 
 
var
    get_soundlevel: function: integer; stdcall;           // текущий уровень громкости
    recognize     : procedure(var
                              full_answer_google,         // полная строка ответа от сервиса
                              recognize_flag,             // признак распознавания
                              recognize_text: pansichar;  // распознанный текст
                              var
                              recognize_accuracy: integer // достоверность распознавания, %
                              ); stdcall;
    start         : procedure(threshold_level,            // уровень порога срабатывания, %
                            delay_off:                  // задержка отключения, мс
                            integer;
                            ruen:                       // язык распознавания
                            pansichar); stdcall;
    stop          : procedure; stdcall;
    speech:function(text,              // текст для озвучивания
                     myLang: pansichar): integer; // исходный язык текста
                     stdcall;
    LibHandle, LibHandle1: THandle;
 
 
function LinkProc(ProcName: string):Pointer;
begin
 result:= GetProcAddress(LibHandle, PChar(ProcName))
end;
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 stop;
 FreeLibrary(LibHandle);
 FreeLibrary(LibHandle1);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 LibHandle:= LoadLibrary('GoogleSpeechRecognizeAPI3.dll');
 LibHandle1:= LoadLibrary('GoogleTranslateAPI.dll');
 if LibHandle1 <> 0 then speech:= GetProcAddress(LibHandle1, 'speech');
 if LibHandle <> 0 then begin
  start:= LinkProc('start');
  stop := LinkProc('stop');
  get_soundlevel:= LinkProc('get_soundlevel');
  recognize:= LinkProc('recognize');
  start(10, 1000, 'ru');
 end;
end;
 
procedure TForm1.Detect(s:string);
begin
Label2.Caption:=s;
timer1.Enabled:=false;
if AnsiLowerCase(s)='привет' then speech('Шла Саша по шоссе и сосала сушку','ru');
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
 if LibHandle <> 0 then
  FreeLibrary(LibHandle);
  if LibHandle1 <> 0 then
  FreeLibrary(LibHandle1);
end;
 
// визуализация текущего уровня REALTIME
procedure TForm1.Timer1Timer(Sender: TObject);
var temp: integer;
    //
    full_answer_google,          // полная строка ответа от сервиса
    recognize_flag,              // признак распознавания
    recognize_text: pansichar;   // распознанный текст
    recognize_accuracy: integer; // достоверность распознавания, %
begin
 if (LibHandle  <> 0)  and (LibHandle1  <> 0) and(CheckBox1.Checked=true)then begin
 
 temp:= get_soundlevel;
 panel2.Height:= 100 * temp div 100;
 label1.Caption:= format('%d', [temp]) + '%';
 
 // распознать REALTIME по превышению порога с задержкой
  full_answer_google:= '';
  recognize_flag:= '';
  recognize_text:= '';
  recognize(full_answer_google,
            recognize_flag,
            recognize_text,
            recognize_accuracy);
   if recognize_flag='Распознано...' then
   begin
 
   Detect(recognize_text);
   timer1.Enabled:=true;
   end;
 end;
 
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Detect(Edit1.Text);
end;
 
end.
Вот когда выполняется Detect(recognize_text) и распознанная фраза "привет" то выполняется функция speech('Шла Саша по шоссе и сосала сушку','ru') но она не успевает выполнится - её прерывает таймер.
Вот вопрос как раз-таки в этом: как узнать когда выполнится speech и включать таймер.

Добавлено через 1 минуту
Можно конечно посчитать количество слов и сделать задержку, с учётом на то, что каждое слово 1 секунда, но всё же.
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
20.07.2015, 13:14
...вы хотите распознавать речь, переводить и после воcпроизводить перевод?

Для этих целей мною разработана библиотека 'SpeechTranslateSpeech.DLL', в которой решена данная задача.
0
 Аватар для TermenatorX
2 / 2 / 0
Регистрация: 14.02.2013
Сообщений: 145
20.07.2015, 23:45  [ТС]
Нет язык один.

Добавлено через 20 секунд
Ответ нужен на том же языке.

Добавлено через 1 минуту
Просто вылетает функция из-за таймера. Таймер надо выключить до speech и включить когда проговорит.
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
21.07.2015, 06:56
В 'SpeechTranslateSpeech.DLL' статус воспроизводимого аудиопотока отслеживается через методы MCI.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.07.2015, 06:56

Нужен пример типового модуля распознавания команд для консольного приложения
я собираюсь это делать, но чувствую, что сейчас буду изобретать велосипед. я собираюсь делать это так - у меня ожидание на ввод строки...

Распознавание речи. Google Speech API
Здравствуйте. Я прикрепляю простую программу для распознавания речи с помощью Google API. Она работает, но есть некоторые вопросы. ...

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

Распознавание речи (google speech api)
Здравствуйте, сейчас произошли какие то изменения у гугла, я была бы очень признательна, если бы Вы смогли помочь разобраться с...

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


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

Или воспользуйтесь поиском по форуму:
49
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания ..., ... чистая наука. Пока что-то проходит модерацию на Хабре, стоит развить мысль ...
Hrethgir 20.07.2026
К таким радикальным взглядам я конечно в той публикации не приходил, но чтобы скоротать вечер, решил углубиться немного. 1. Почему показания термометра заряжены целью? Цель заложена в самом. . .
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ По ссылке 403. Не очень информативно такую ссылку постить. Запись от Usaga размещена Сегодня в 06:46 . . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru