Как разработчик в 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
Это фраза из популярной Французской детской сказки.