necrpetrovich
03.01.2014, 10:42
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Всем нам хорошо известно о том, что в гугл хроме появилась возможность набора текста голосом. В данной теме я покажу как это можно использовать в своих программах.
Распознавание происходит в несколько этапов :
1. Запись звука в формате FLAC
2. Отправка данных в гугл
3. Расшифровка принятых данных
И так , все по порядку.
1. Запись звука в формате FLAC. Для этого есть компонент New Audio . О нем я напомню чуть позже.
2. Отправка данных в гугл . Отправлять файл flac нужно на ссылку
[Ссылки могут видеть только зарегистрированные и активированные пользователи] .
Для этого можно использовать функцию :
function TMainForm.[Ссылки могут видеть только зарегистрированные и активированные пользователи](Const URL, FieldName, FileName: String; Const Data: TStream; Const ResultData: TStrings): Boolean;
const
CRLF = #$0D + #$0A;
var
[Ссылки могут видеть только зарегистрированные и активированные пользователи] T[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Bound, Str: String;
begin
Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary';
HTTP := T[Ссылки могут видеть только зарегистрированные и активированные пользователи]
try
if UseProxy then
begin
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := ProxyAddress;
if ProxyPort <> '' then
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := ProxyPort
else
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := '3128';
if ProxyAuth then
begin
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := ProxyUser;
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := ProxyUserPasswd;
end;
end;
Str := '--' + Bound + CRLF;
Str := Str + 'content-disposition: form-data; name="' + FieldName + '";';
Str := Str + ' filename="' + FileName + '"' + CRLF;
Str := Str + 'Content-Type: audio/x-flac; rate='+IntToStr(DXAudioIn.InSampleRate) + CRLF + CRLF;
[Ссылки могут видеть только зарегистрированные и активированные пользователи](Pointer(Str)^, Length(Str));
[Ссылки могут видеть только зарегистрированные и активированные пользователи](Data, 0);
Str := CRLF + '--' + Bound + '--' + CRLF;
[Ссылки могут видеть только зарегистрированные и активированные пользователи](Pointer(Str)^, Length(Str));
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := 'audio/x-flac; rate='+IntToStr(DXAudioIn.InSampleRate);
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36';
Result := [Ссылки могут видеть только зарегистрированные и активированные пользователи]('POST', URL);
ResultData.LoadFromStream([Ссылки могут видеть только зарегистрированные и активированные пользователи]);
finally
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
end;
end;
Эта функция переделанная т.к недавно гугл ожесточил правила.
Использовать можно так :
[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]', 'userfile', ExtractFilename(OutFileName), Stream, StrList);
где
Stream — это поток TFileStream в который мы читаем наш записанный файл в формате FLAC.
StrList — это TStringList с ответом от Google.
3. Расшифровка принятых данных
В ответ к нам придет строка примерно такая :
{«status»:0,«id»:«5e34348f2887c7a3cc27dc3695ab4575-1»,«hypotheses»:[{«utterance»:«привет»,«confidence»:0.7581704}]}
Если статус приходит "0" значит запись распознана. utterance — распознанная фраза .
Ну, а далее можно использовать определенную команду по определенному слову. В среднем, у меня уходит на распознавании 2 сек.
Статью написал : Stas971
Источник: [Ссылки могут видеть только зарегистрированные и активированные пользователи]
Всем нам хорошо известно о том, что в гугл хроме появилась возможность набора текста голосом. В данной теме я покажу как это можно использовать в своих программах.
Распознавание происходит в несколько этапов :
1. Запись звука в формате FLAC
2. Отправка данных в гугл
3. Расшифровка принятых данных
И так , все по порядку.
1. Запись звука в формате FLAC. Для этого есть компонент New Audio . О нем я напомню чуть позже.
2. Отправка данных в гугл . Отправлять файл flac нужно на ссылку
[Ссылки могут видеть только зарегистрированные и активированные пользователи] .
Для этого можно использовать функцию :
function TMainForm.[Ссылки могут видеть только зарегистрированные и активированные пользователи](Const URL, FieldName, FileName: String; Const Data: TStream; Const ResultData: TStrings): Boolean;
const
CRLF = #$0D + #$0A;
var
[Ссылки могут видеть только зарегистрированные и активированные пользователи] T[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Bound, Str: String;
begin
Bound := IntToHex(Random(MaxInt), 8) + '_Synapse_boundary';
HTTP := T[Ссылки могут видеть только зарегистрированные и активированные пользователи]
try
if UseProxy then
begin
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := ProxyAddress;
if ProxyPort <> '' then
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := ProxyPort
else
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := '3128';
if ProxyAuth then
begin
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := ProxyUser;
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := ProxyUserPasswd;
end;
end;
Str := '--' + Bound + CRLF;
Str := Str + 'content-disposition: form-data; name="' + FieldName + '";';
Str := Str + ' filename="' + FileName + '"' + CRLF;
Str := Str + 'Content-Type: audio/x-flac; rate='+IntToStr(DXAudioIn.InSampleRate) + CRLF + CRLF;
[Ссылки могут видеть только зарегистрированные и активированные пользователи](Pointer(Str)^, Length(Str));
[Ссылки могут видеть только зарегистрированные и активированные пользователи](Data, 0);
Str := CRLF + '--' + Bound + '--' + CRLF;
[Ссылки могут видеть только зарегистрированные и активированные пользователи](Pointer(Str)^, Length(Str));
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := 'audio/x-flac; rate='+IntToStr(DXAudioIn.InSampleRate);
[Ссылки могут видеть только зарегистрированные и активированные пользователи] := 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36';
Result := [Ссылки могут видеть только зарегистрированные и активированные пользователи]('POST', URL);
ResultData.LoadFromStream([Ссылки могут видеть только зарегистрированные и активированные пользователи]);
finally
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
end;
end;
Эта функция переделанная т.к недавно гугл ожесточил правила.
Использовать можно так :
[Ссылки могут видеть только зарегистрированные и активированные пользователи]('[Ссылки могут видеть только зарегистрированные и активированные пользователи]', 'userfile', ExtractFilename(OutFileName), Stream, StrList);
где
Stream — это поток TFileStream в который мы читаем наш записанный файл в формате FLAC.
StrList — это TStringList с ответом от Google.
3. Расшифровка принятых данных
В ответ к нам придет строка примерно такая :
{«status»:0,«id»:«5e34348f2887c7a3cc27dc3695ab4575-1»,«hypotheses»:[{«utterance»:«привет»,«confidence»:0.7581704}]}
Если статус приходит "0" значит запись распознана. utterance — распознанная фраза .
Ну, а далее можно использовать определенную команду по определенному слову. В среднем, у меня уходит на распознавании 2 сек.
Статью написал : Stas971
Источник: [Ссылки могут видеть только зарегистрированные и активированные пользователи]