استفاده از API گفتار به متن با پایتون

۱. مرور کلی

9e7124a578332fed.png

API تبدیل گفتار به متن، توسعه‌دهندگان را قادر می‌سازد تا با اعمال مدل‌های شبکه عصبی قدرتمند در یک API آسان برای استفاده، صدا را در بیش از ۱۲۵ زبان و گونه مختلف به متن تبدیل کنند.

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

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

  • چگونه محیط خود را تنظیم کنید
  • نحوه رونویسی فایل‌های صوتی به زبان انگلیسی
  • نحوه رونویسی فایل‌های صوتی با مهر زمانی ورد
  • نحوه رونویسی فایل‌های صوتی به زبان‌های مختلف

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

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

نظرسنجی

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

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

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

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

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

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

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

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

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

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

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

3c1dabeca90e44e5.png

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

9c92662c6a846a5c.png

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

9f0e51b578fecce5.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 تبدیل گفتار به متن استفاده کنید، دستور زیر را در Cloud Shell اجرا کنید تا API فعال شود:

gcloud services enable speech.googleapis.com

شما باید چیزی شبیه به این را ببینید:

Operation "operations/..." finished successfully.

حالا می‌توانید از API تبدیل گفتار به متن استفاده کنید!

به دایرکتوری خانگی خود بروید:

cd ~

یک محیط مجازی پایتون برای جداسازی وابستگی‌ها ایجاد کنید:

virtualenv venv-speech

فعال کردن محیط مجازی:

source venv-speech/bin/activate

IPython و کتابخانه کلاینت Speech-to-Text API را نصب کنید:

pip install ipython google-cloud-speech

شما باید چیزی شبیه به این را ببینید:

...
Installing collected packages: ..., ipython, google-cloud-speech
Successfully installed ... google-cloud-speech-2.25.1 ...

اکنون، شما آماده استفاده از کتابخانه کلاینت Speech-to-Text API هستید!

در مراحل بعدی، از یک مفسر تعاملی پایتون به نام IPython که در مرحله قبل نصب کرده‌اید، استفاده خواهید کرد. با اجرای ipython در Cloud Shell، یک جلسه را شروع کنید:

ipython

شما باید چیزی شبیه به این را ببینید:

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.18.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

آماده‌ای که اولین درخواستت رو مطرح کنی...

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

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

کد زیر را در جلسه IPython خود کپی کنید:

from google.cloud import speech


def speech_to_text(
    config: speech.RecognitionConfig,
    audio: speech.RecognitionAudio,
) -> speech.RecognizeResponse:
    client = speech.SpeechClient()

    # Synchronous speech recognition request
    response = client.recognize(config=config, audio=audio)

    return response


def print_response(response: speech.RecognizeResponse):
    for result in response.results:
        print_result(result)


def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    

لحظه‌ای وقت بگذارید و کد را مطالعه کنید و ببینید که چگونه از متد کتابخانه کلاینت recognize برای رونویسی یک فایل صوتی استفاده می‌کند*.* پارامتر config نحوه پردازش درخواست را نشان می‌دهد و پارامتر audio داده‌های صوتی مورد شناسایی را مشخص می‌کند.

ارسال درخواست:

config = speech.RecognitionConfig(
    language_code="en",
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

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

--------------------------------------------------------------------------------
language_code: en-us
transcript:    how old is the Brooklyn Bridge
confidence:    98%

پیکربندی را به‌روزرسانی کنید تا نقطه‌گذاری خودکار فعال شود و درخواست جدیدی ارسال شود:

config.enable_automatic_punctuation = True

response = speech_to_text(config, audio)
print_response(response)

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

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%

خلاصه

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

۵. دریافت مهر زمانی کلمات

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

برای رونویسی یک فایل صوتی با مهرهای زمانی کلمه، کد خود را با کپی کردن موارد زیر در جلسه IPython خود به‌روزرسانی کنید:

def print_result(result: speech.SpeechRecognitionResult):
    best_alternative = result.alternatives[0]
    print("-" * 80)
    print(f"language_code: {result.language_code}")
    print(f"transcript:    {best_alternative.transcript}")
    print(f"confidence:    {best_alternative.confidence:.0%}")
    print("-" * 80)
    for word in best_alternative.words:
        start_s = word.start_time.total_seconds()
        end_s = word.end_time.total_seconds()
        print(f"{start_s:>7.3f} | {end_s:>7.3f} | {word.word}")
        

لحظه‌ای وقت بگذارید و کد را مطالعه کنید و ببینید که چگونه یک فایل صوتی را با مهرهای زمانی کلمه رونویسی می‌کند*.* پارامتر enable_word_time_offsets به API می‌گوید که جبران‌های زمانی را برای هر کلمه برگرداند (برای جزئیات بیشتر به سند مراجعه کنید).

ارسال درخواست:

config = speech.RecognitionConfig(
    language_code="en",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/brooklyn_bridge.flac",
)

response = speech_to_text(config, audio)
print_response(response)

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

--------------------------------------------------------------------------------
language_code: en-us
transcript:    How old is the Brooklyn Bridge?
confidence:    98%
--------------------------------------------------------------------------------
  0.000 |   0.300 | How
  0.300 |   0.600 | old
  0.600 |   0.800 | is
  0.800 |   0.900 | the
  0.900 |   1.100 | Brooklyn
  1.100 |   1.400 | Bridge?

خلاصه

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

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

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

در این بخش، شما یک فایل صوتی فرانسوی را رونویسی خواهید کرد.

برای رونویسی فایل صوتی فرانسوی، کد خود را با کپی کردن موارد زیر در جلسه IPython خود به‌روزرسانی کنید:

config = speech.RecognitionConfig(
    language_code="fr-FR",
    enable_automatic_punctuation=True,
    enable_word_time_offsets=True,
)
audio = speech.RecognitionAudio(
    uri="gs://cloud-samples-data/speech/corbeau_renard.flac",
)

response = speech_to_text(config, audio)
print_response(response)

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

--------------------------------------------------------------------------------
language_code: fr-fr
transcript:    Maître corbeau sur un arbre perché Tenait dans son bec un fromage maître Renard par l'odeur alléché lui tint à peu près ce langage et bonjour monsieur du corbeau.
confidence:    94%
--------------------------------------------------------------------------------
  0.000 |   0.700 | Maître
  0.700 |   1.100 | corbeau
  1.100 |   1.300 | sur
  1.300 |   1.600 | un
  1.600 |   1.700 | arbre
  1.700 |   2.000 | perché
  2.000 |   3.000 | Tenait
  3.000 |   3.000 | dans
  3.000 |   3.200 | son
  3.200 |   3.500 | bec
  3.500 |   3.700 | un
  3.700 |   3.800 | fromage
...
 10.800 |  11.800 | monsieur
 11.800 |  11.900 | du
 11.900 |  12.100 | corbeau.

خلاصه

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

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

9e7124a578332fed.png

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

تمیز کردن

برای پاکسازی محیط توسعه خود، از Cloud Shell:

  • اگر هنوز در جلسه IPython خود هستید، به پوسته برگردید: exit
  • استفاده از محیط مجازی پایتون را متوقف کنید: deactivate
  • پوشه محیط مجازی خود را حذف کنید: cd ~ ; rm -rf ./venv-speech

برای حذف پروژه Google Cloud خود، از Cloud Shell:

  • شناسه پروژه فعلی خود را بازیابی کنید: PROJECT_ID=$(gcloud config get-value core/project)
  • مطمئن شوید که این پروژه‌ای است که می‌خواهید حذف کنید: echo $PROJECT_ID
  • حذف پروژه: gcloud projects delete $PROJECT_ID

بیشتر بدانید

مجوز

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