Как разработчик в 2017 году, я всегда задаюсь вопросом, было бы неплохо написать код машинного обучения в C# .Net framework, чтобы показать своему менеджеру, что я знаю достаточно, чтобы стать руководителем группы, но прошлое прошло, и я оставил эту продуктивную компанию большую часть работы менеджера компании. в мире так же полно скучных идей, как они пытаются сбить людей и демотивировать их от их цели, поскольку они все равно не добились своего на днях я искал мемы в Интернете, и вдруг один из веб-сайтов дает мне два HD-видео по 45 минут каждое, которые сделали мой день, так как теперь, как разработчик ac#, я могу показать концепции машинного обучения, написанные на C#.

так что без лишних слов начнем:

Все благодаря API машинного обучения, созданному Google, теперь я могу напрямую использовать высокоточную модель машинного обучения в своем простом приложении dotnet для развлечения.

Google Cloud Speech-to-Text API позволяет разработчикам преобразовывать аудио в текст на 120 языках и вариантах, применяя мощные модели нейронных сетей в простом в использовании API.

Я использую облачную оболочку, которая представляет собой не что иное, как Linux vm с предустановленным программным обеспечением, если вы хотите установить программное обеспечение на свой компьютер, чтобы сделать его мусором, загрузите инструкцию GCP sdk, приведенную на их странице.

Теперь давайте откроем оболочку/консоль после выбора проекта и пользователя.

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

Службы gcloud позволяют использовать voice.googleapis.com

Аутентификация запросов API

Чтобы отправлять запросы к API преобразования речи в текст, вам необходимо использовать сервисный аккаунт. Сервисный аккаунт принадлежит вашему проекту и используется библиотекой C# клиента Google для выполнения запросов API преобразования речи в текст. Как и любая другая учетная запись пользователя, учетная запись службы представлена ​​адресом электронной почты. В этом разделе вы будете использовать *Cloud SDK * для создания учетной записи службы, а затем создадите учетные данные, которые потребуются для аутентификации в качестве учетной записи службы.

Во-первых, установите переменную среды с вашим PROJECT_ID, который вы будете использовать в этом практическом занятии:

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

Затем создайте новую учетную запись службы для доступа к Vision API:

gcloud iam service-accounts create my-speech-to-text-sa \

--display-name "my speech-to-text lab service account"

Затем создайте учетные данные, которые ваш код C# будет использовать для входа в качестве новой учетной записи службы. Создайте эти учетные данные и сохраните их как файл JSON «~/key.json» с помощью следующей команды:

gcloud iam service-accounts keys create ~/key.json \

--iam-account my-speech-to-text-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

Наконец, установите переменную среды GOOGLE_APPLICATION_CREDENTIALS. Это используется библиотекой Vision API C#, описанной на следующем шаге, для поиска ваших учетных данных. В переменной среды должен быть указан полный путь к созданному вами JSON-файлу учетных данных:

export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"

Вы можете прочитать больше об аутентификации Speech-to-Text API.

Установите клиентскую библиотеку Google Cloud Speech-to-Text API для C#.

Сначала создайте простое консольное приложение C#, которое вы будете использовать для запуска примеров Vision API.

dotnet new console -n SpeechToTextApiDemo

Вы должны увидеть созданное приложение и разрешенные зависимости:

The template "Console Application" was created successfully.

Processing post-creation actions...

...

Restore succeeded.

Затем перейдите в папку VisionApiDemo и добавьте в проект пакет Google.Cloud.Vision.V1 NuGet:

cd SpeechToTextApiDemo/

И добавьте в проект пакет Google.Cloud.Language.V1 NuGet:

dotnet add package Google.Cloud.Speech.V1

info : Adding PackageReference for package 'Google.Cloud.Speech.V1' into project '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.

log : Restoring packages for /home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj...

...

info : PackageReference for package 'Google.Cloud.Speech.V1' version '1.0.1' added to file '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.

Теперь вы готовы использовать Speech-to-Text API!

Транскрибировать аудиофайлы

В этом разделе вы расшифруете предварительно записанный аудиофайл на английском языке. Аудиофайл доступен в Google Cloud Storage.

Примечание. Мы используем предварительно записанный файл, доступный в Google Cloud Storage: gs://cloud-samples-tests/speech/brooklyn.flac. Вы можете прослушать этот файл перед отправкой в ​​Speech-to-Text API здесь.

Откройте редактор кода в верхней правой части Cloud Shell:

Если вы не видите значок, закройте Меню навигации в левом верхнем углу.

Перейдите к файлу Program.cs в папке SpeechToTextApiDemo и замените код следующим:

using Google.Cloud.Speech.V1;

using System;

namespace SpeechToTextApiDemo

{

public class Program

{

public static void Main(string[] args)

{

var speech = SpeechClient.Create();

var config = new RecognitionConfig

{

Encoding = RecognitionConfig.Types.AudioEncoding.Flac,

SampleRateHertz = 16000,

LanguageCode = LanguageCodes.English.UnitedStates

};

var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");

var response = speech.Recognize(config, audio);

foreach (var result in response.Results)

{

foreach (var alternative in result.Alternatives)

{

Console.WriteLine(alternative.Transcript);

}

}

}

}

}

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

Параметр Encoding сообщает API, какой тип аудиокодирования вы используете для аудиофайла. Flac — это тип кодирования для файлов .raw (подробнее о типе кодирования см. в doc).

В объекте RecognitionAudio вы можете передать API либо uri нашего аудиофайла в облачном хранилище, либо локальный путь к аудиофайлу. Здесь мы используем uri облачного хранилища.

Вернувшись в Cloud Shell, запустите приложение. Вы должны увидеть следующий вывод:

dotnet run

Вы должны увидеть следующий вывод:

how old is the Brooklyn Bridge

Примечание. Если этот код C# не работает для вас, проверьте инструкции, которые вы выполняли на этапе Аутентификация запросов API.

Используйте следующую команду для проверки значения переменной среды GOOGLE_APPLICATION_CREDENTIALS:

echo GOOGLE_APPLICATION_CREDENTIALS

Он должен вывести значение "~/key.json".

Если это так, затем убедитесь, что учетная запись службы была создана и находится по адресу "~/key.json", используя:

cat "~/key.json"

Вы должны увидеть что-то похожее на:

{

"type": "service_account",

"project_id": "PROJECT_ID",

"private_key_id": "ff31939192529e07f42e4535fb20bb029def1276",

"Private_key":...

Если вы этого не сделаете, вернитесь к шагу аутентификации запросов API.

На этом этапе вы смогли расшифровать аудиофайл на английском языке и распечатать результат. Подробнее о Транскрибирование.

Расшифровка с временными метками слов

Преобразование речи в текст может определять смещение времени (отметку времени) для расшифрованного аудио. Смещения по времени показывают начало и конец каждого произнесенного слова в предоставленном аудио. Значение смещения времени представляет количество времени, прошедшее с начала звука, с шагом 100 мс.

Чтобы расшифровать аудиофайл со смещением по времени, перейдите к файлу Program.cs внутри SpeechToTextApiDemofolder и обновите код следующим образом:

using Google.Cloud.Speech.V1;

using System;

namespace SpeechToTextApiDemo

{

public class Program

{

public static void Main(string[] args)

{

var speech = SpeechClient.Create();

var config = new RecognitionConfig

{

Encoding = RecognitionConfig.Types.AudioEncoding.Flac,

SampleRateHertz = 16000,

LanguageCode = LanguageCodes.English.UnitedStates,

EnableWordTimeOffsets = true

};

var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");

var response = speech.Recognize(config, audio);

foreach (var result in response.Results)

{

foreach (var alternative in result.Alternatives)

{

Console.WriteLine($"Transcript: { alternative.Transcript}");

Console.WriteLine("Word details:");

Console.WriteLine($" Word count:{alternative.Words.Count}");

foreach (var item in alternative.Words)

{

Console.WriteLine($" {item.Word}");

Console.WriteLine($" WordStartTime: {item.StartTime}");

Console.WriteLine($" WordEndTime: {item.EndTime}");

}

}

}

}

}

}

Потратьте минуту или две, чтобы изучить код и посмотреть, как он используется для расшифровки аудиофайла с временными метками слов*.* Параметр EnableWordTimeOffsets сообщает API о включении временных смещений (дополнительную информацию см. в документе).

Вернувшись в Cloud Shell, запустите приложение:

dotnet run

Вы должны увидеть следующий вывод:

Transcript: how old is the Brooklyn Bridge

Word details:

Word count:6

how

WordStartTime: "0s"

WordEndTime: "0.300s"

old

WordStartTime: "0.300s"

WordEndTime: "0.600s"

is

WordStartTime: "0.600s"

WordEndTime: "0.800s"

the

WordStartTime: "0.800s"

WordEndTime: "0.900s"

Brooklyn

WordStartTime: "0.900s"

WordEndTime: "1.100s"

Bridge

WordStartTime: "1.100s"

WordEndTime: "1.500s"

На этом шаге вы смогли расшифровать аудиофайл на английском языке с временными метками слов и распечатать результат. Подробнее о Транскрибирование со смещением слов.

Транскрипция разных языков

Speech-to-Text API поддерживает транскрипцию более чем на 100 языках! Вы можете найти список поддерживаемых языков здесь.

В этом разделе вы расшифруете предварительно записанный аудиофайл на французском языке. Аудиофайл доступен в Google Cloud Storage.

Примечание. Мы используем предварительно записанный файл, доступный в Google Cloud Storage: gs://speech-language-samples/fr-sample.flac. Вы можете прослушать этот файл перед отправкой в ​​Speech-to-Text API здесь.

Чтобы расшифровать французский аудиофайл, перейдите к файлу Program.cs в папке SpeechToTextApiDemo и замените код следующим:

using Google.Cloud.Speech.V1;

using System;

namespace SpeechToTextApiDemo

{

public class Program

{

public static void Main(string[] args)

{

var speech = SpeechClient.Create();

var config = new RecognitionConfig

{

Encoding = RecognitionConfig.Types.AudioEncoding.Flac,

LanguageCode = LanguageCodes.French.France

};

var audio = RecognitionAudio.FromStorageUri("gs://speech-language-samples/fr-sample.flac");

var response = speech.Recognize(config, audio);

foreach (var result in response.Results)

{

foreach (var alternative in result.Alternatives)

{

Console.WriteLine(alternative.Transcript);

}

}

}

}

}

Потратьте минуту или две, чтобы изучить код и посмотреть, как он используется для расшифровки аудиофайла*.* Параметр LanguageCode сообщает API, на каком языке находится аудиозапись.

Вернувшись в Cloud Shell, запустите приложение:

1

dotnet run

Вы должны увидеть следующий вывод:

1

maître corbeau sur un arbre perché tenait en son bec un fromage

Это фраза из популярной Французской детской сказки.