استفاده از Speech-to-Text API با سی شارپ

۱. مرور کلی

API تبدیل گفتار به متن گوگل کلود (Google Cloud Speech-to-Text API) به توسعه‌دهندگان این امکان را می‌دهد که با اعمال مدل‌های قدرتمند شبکه عصبی در یک API آسان برای استفاده، صدا را به ۱۲۰ زبان و گونه مختلف به متن تبدیل کنند.

در این آزمایشگاه کد، شما بر استفاده از API تبدیل گفتار به متن با سی‌شارپ تمرکز خواهید کرد. یاد خواهید گرفت که چگونه یک فایل صوتی به زبان انگلیسی و سایر زبان‌ها را برای رونویسی به API تبدیل گفتار به متن ابری ارسال کنید.

آنچه یاد خواهید گرفت

  • نحوه استفاده از پوسته ابری
  • نحوه فعال کردن API تبدیل گفتار به متن
  • نحوه احراز هویت درخواست‌های API
  • نحوه نصب کتابخانه کلاینت گوگل کلود برای سی شارپ
  • نحوه رونویسی فایل‌های صوتی به زبان انگلیسی
  • نحوه رونویسی فایل‌های صوتی با مهر زمانی ورد
  • نحوه رونویسی فایل‌های صوتی به زبان‌های مختلف

آنچه نیاز دارید

  • یک پروژه پلتفرم ابری گوگل
  • یک مرورگر، مانند کروم یا فایرفاکس
  • آشنایی با استفاده از سی شارپ

نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

فقط تا انتها بخوانید آن را بخوانید و تمرین‌ها را انجام دهید

تجربه خود را با C# چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

تجربه خود را در استفاده از خدمات پلتفرم ابری گوگل چگونه ارزیابی می‌کنید؟

تازه کار متوسط ماهر

۲. تنظیمات و الزامات

تنظیم محیط خودتنظیم

  1. وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .

۲۹۵۰۰۴۸۲۱bab6a87.png

37d264871000675d.png

۹۶d86d3d5655cdbe.png

  • نام پروژه، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. شما همیشه می‌توانید آن را به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاه‌های کد، باید شناسه پروژه خود را (که معمولاً با عنوان PROJECT_ID شناخته می‌شود) ارجاع دهید. اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی می‌ماند.
  • برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد هزینه زیادی نخواهد داشت، اگر اصلاً هزینه‌ای داشته باشد. برای خاموش کردن منابع به منظور جلوگیری از پرداخت صورتحساب پس از این آموزش، می‌توانید منابعی را که ایجاد کرده‌اید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

شروع پوسته ابری

اگرچه می‌توان از راه دور و از طریق لپ‌تاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا می‌شود، استفاده خواهید کرد.

فعال کردن پوسته ابری

  1. از کنسول ابری، روی فعال کردن پوسته ابری کلیک کنید d1264ca30785e435.png .

cb81e7c8e34bc8d.png

اگر این اولین باری است که Cloud Shell را اجرا می‌کنید، یک صفحه میانی برای توضیح آن به شما نمایش داده می‌شود. اگر با یک صفحه میانی مواجه شدید، روی ادامه کلیک کنید.

d95252b003979716.png

آماده‌سازی و اتصال به Cloud Shell فقط چند لحظه طول می‌کشد.

7833d5e1c5d18f54.png

این ماشین مجازی مجهز به تمام ابزارهای توسعه مورد نیاز است. این ماشین یک دایرکتوری خانگی پایدار ۵ گیگابایتی ارائه می‌دهد و در فضای ابری گوگل اجرا می‌شود که عملکرد شبکه و احراز هویت را تا حد زیادی افزایش می‌دهد. بخش عمده‌ای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را می‌توان با یک مرورگر انجام داد.

پس از اتصال به Cloud Shell، باید ببینید که احراز هویت شده‌اید و پروژه روی شناسه پروژه شما تنظیم شده است.

  1. برای تأیید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:
gcloud auth list

خروجی دستور

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد:
gcloud config list project

خروجی دستور

[core]
project = <PROJECT_ID>

اگر اینطور نیست، می‌توانید با این دستور آن را تنظیم کنید:

gcloud config set project <PROJECT_ID>

خروجی دستور

Updated property [core/project].

۳. فعال کردن API تبدیل گفتار به متن

قبل از اینکه بتوانید از API تبدیل گفتار به متن استفاده کنید، باید آن را فعال کنید. می‌توانید با استفاده از دستور زیر در Cloud Shell، API را فعال کنید:

gcloud services enable speech.googleapis.com

۴. کتابخانه کلاینت Google Cloud Speech-to-Text API را برای C# نصب کنید.

ابتدا، یک برنامه کنسول ساده C# ایجاد کنید که برای اجرای نمونه‌های API تبدیل گفتار به متن از آن استفاده خواهید کرد:

dotnet new console -n SpeechToTextApiDemo

شما باید ببینید که برنامه ایجاد شده و وابستگی‌ها برطرف شده‌اند:

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

سپس، به پوشه SpeechToTextApiDemo بروید:

cd SpeechToTextApiDemo/

و بسته‌ی NuGet Google.Cloud.Speech.V1 را به پروژه اضافه کنید:

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'.

حالا، شما آماده استفاده از API تبدیل گفتار به متن هستید!

۵. رونویسی فایل‌های صوتی

در این بخش، شما یک فایل صوتی از پیش ضبط شده به زبان انگلیسی را رونویسی خواهید کرد. این فایل صوتی در فضای ابری گوگل (Google Cloud Storage) موجود است.

برای رونویسی یک فایل صوتی، ویرایشگر کد را از سمت راست بالای Cloud Shell باز کنید:

fd3fc1303e63572.png

به فایل 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 است (برای جزئیات بیشتر به توضیحات مربوط به نوع کدگذاری مراجعه کنید).

در شیء RecognitionAudio ، می‌توانید uri فایل صوتی خود در فضای ابری یا مسیر فایل محلی فایل صوتی را به API ارسال کنید. در اینجا، ما از uri فضای ابری استفاده می‌کنیم.

دوباره به Cloud Shell برگردید و برنامه را اجرا کنید:

dotnet run

شما باید خروجی زیر را ببینید:

how old is the Brooklyn Bridge

خلاصه

در این مرحله، شما توانستید یک فایل صوتی را به زبان انگلیسی رونویسی کنید و نتیجه را چاپ کنید. درباره رونویسی بیشتر بخوانید.

۶. با مهر زمانی کلمات رونویسی کنید

تبدیل گفتار به متن می‌تواند فاصله زمانی (برچسب زمانی) را برای صدای رونویسی شده تشخیص دهد. فاصله‌های زمانی، ابتدا و انتهای هر کلمه گفتاری را در صدای ارائه شده نشان می‌دهند. مقدار فاصله زمانی، نشان دهنده مدت زمانی است که از ابتدای صدا، با فواصل ۱۰۰ میلی‌ثانیه، گذشته است.

برای رونویسی یک فایل صوتی با در نظر گرفتن فاصله زمانی، به فایل 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,
                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

شما باید خروجی زیر را ببینید:

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"

خلاصه

در این مرحله، شما توانستید یک فایل صوتی به زبان انگلیسی را با استفاده از مهرهای زمانی کلمه رونویسی کنید و نتیجه را چاپ کنید. درباره رونویسی با جابجایی کلمات بیشتر بخوانید.

۷. رونویسی زبان‌های مختلف

API تبدیل گفتار به متن از رونویسی در بیش از ۱۰۰ زبان پشتیبانی می‌کند! می‌توانید لیستی از زبان‌های پشتیبانی شده را اینجا پیدا کنید.

در این بخش، شما یک فایل صوتی از پیش ضبط شده به زبان فرانسه را رونویسی خواهید کرد. این فایل صوتی در فضای ابری گوگل (Google Cloud Storage) موجود است.

برای رونویسی فایل صوتی فرانسوی، به فایل 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://cloud-samples-data/speech/corbeau_renard.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 برگردید و برنامه را اجرا کنید:

dotnet run

شما باید خروجی زیر را ببینید:

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

این جمله‌ای از یک داستان کودکانه محبوب فرانسوی است.

خلاصه

در این مرحله، شما توانستید یک فایل صوتی را به زبان فرانسوی رونویسی کنید و نتیجه را چاپ کنید. درباره زبان‌های پشتیبانی‌شده بیشتر بخوانید.

۸. تبریک می‌گویم!

شما یاد گرفتید که چگونه از API تبدیل گفتار به متن با استفاده از سی شارپ برای انجام انواع مختلف رونویسی روی فایل‌های صوتی استفاده کنید!

تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب پلتفرم گوگل کلود خود برای منابع استفاده شده در این راهنمای سریع:

  • به کنسول پلتفرم ابری بروید.
  • پروژه‌ای را که می‌خواهید خاموش کنید انتخاب کنید، سپس روی «حذف» در بالا کلیک کنید: این کار پروژه را برای حذف زمان‌بندی می‌کند.

اطلاعات بیشتر

مجوز

این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.