استخدام واجهة برمجة تطبيقات تحويل النص إلى كلام مع بايثون

1. نظرة عامة

1215f38908082356.png

تمكّن Text-to-Speech API المطوّرين من إنشاء كلام يشبه البشر. تحوّل واجهة برمجة التطبيقات النص إلى تنسيقات صوتية مثل WAV أو MP3 أو Ogg Opus. ويتيح التطبيق أيضًا إدخالات لغة ترميز تركيب الكلام (SSML) لتحديد فترات الإيقاف المؤقت والأرقام وتنسيق التاريخ والوقت وغيرها من تعليمات اللفظ.

في هذا البرنامج التعليمي، ستركز على استخدام واجهة برمجة تطبيقات تحويل النص إلى كلام مع لغة بايثون.

المعلومات التي ستطّلع عليها

  • كيفية إعداد البيئة
  • كيفية إدراج اللغات المتاحة
  • كيفية إدراج الأصوات المتاحة
  • كيفية دمج الصوت من النص

المتطلبات

  • مشروع على Google Cloud
  • متصفح، مثل Chrome أو Firefox
  • الإلمام باستخدام بايثون

استطلاع

كيف ستستخدم هذا البرنامج التعليمي؟

القراءة فقط اقرأها وأكمِل التمارين

كيف تقيّم تجربتك مع Python؟

حديث متوسط بارع

كيف تقيّم تجربتك مع خدمات Google Cloud؟

حديث متوسط بارع

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
  • يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد تحديده). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (الذي يتم تحديده عادةً على أنّه PROJECT_ID). وإذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. ويمكنك بدلاً من ذلك تجربة طلبك الخاص ومعرفة ما إذا كان متاحًا. ولا يمكن تغييره بعد هذه الخطوة ويبقى طوال مدة المشروع.
  • لمعلوماتك، هناك قيمة ثالثة، وهي رقم المشروع، الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. لن يؤدي إكمال هذا الدرس التطبيقي حول الترميز إلى فرض أي تكاليف، إن وُجدت. لإيقاف تشغيل الموارد لتجنب تحمُّل الفواتير إلى ما هو أبعد من هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

يمكنك إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، إلا أنّك ستستخدم في هذا الدرس التطبيقي Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.

تفعيل Cloud Shell

  1. من Cloud Console، انقر على تفعيل Cloud Shell 853e55310c205094.png.

3c1dabeca90e44e5.png

إذا كانت هذه هي المرة الأولى التي تبدأ فيها Cloud Shell، ستظهر لك شاشة وسيطة تصف ماهيتها. إذا ظهرت لك شاشة وسيطة، انقر على متابعة.

9c92662c6a846a5c.png

من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بخدمة Cloud Shell بضع دقائق فقط.

9f0e51b578fecce5.png

يتم تحميل هذا الجهاز الافتراضي مع جميع أدوات التطوير اللازمة. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ معظم عملك، إن لم يكن كلّه، في هذا الدرس التطبيقي حول الترميز باستخدام متصفّح.

بعد الربط بخدمة 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].

3- إعداد البيئة

قبل أن تتمكن من البدء في استخدام واجهة برمجة التطبيقات Text-to-Speech، شغِّل الأمر التالي في Cloud Shell لتفعيل واجهة برمجة التطبيقات:

gcloud services enable texttospeech.googleapis.com

ينبغي أن تظهر لك على النحو التالي:

Operation "operations/..." finished successfully.

يمكنك الآن استخدام واجهة برمجة تطبيقات "تحويل النص إلى كلام"!

انتقِل إلى الدليل الرئيسي:

cd ~

أنشئ بيئة بايثون افتراضية لعزل التبعيات:

virtualenv venv-texttospeech

تفعيل البيئة الافتراضية:

source venv-texttospeech/bin/activate

تثبيت IPython ومكتبة برامج واجهة برمجة التطبيقات Text-to-Speech:

pip install ipython google-cloud-texttospeech

ينبغي أن تظهر لك على النحو التالي:

...
Installing collected packages: ..., ipython, google-cloud-texttospeech
Successfully installed ... google-cloud-texttospeech-2.16.3 ...

أنت الآن جاهز لاستخدام مكتبة برامج واجهة برمجة تطبيقات تحويل النص إلى كلام!

في الخطوات التالية، ستستخدم مترجمًا تفاعليًا بلغة Python يُسمى 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]:

يمكنك الآن تقديم طلبك الأول وإدراج اللغات المتاحة...

4. إدراج اللغات المتاحة

في هذا القسم، ستحصل على قائمة بجميع اللغات المتاحة.

انسخ الرمز التالي إلى جلسة IPython:

from typing import Sequence

import google.cloud.texttospeech as tts


def unique_languages_from_voices(voices: Sequence[tts.Voice]):
    language_set = set()
    for voice in voices:
        for language_code in voice.language_codes:
            language_set.add(language_code)
    return language_set


def list_languages():
    client = tts.TextToSpeechClient()
    response = client.list_voices()
    languages = unique_languages_from_voices(response.voices)

    print(f" Languages: {len(languages)} ".center(60, "-"))
    for i, language in enumerate(sorted(languages)):
        print(f"{language:>10}", end="\n" if i % 5 == 4 else "")
        

خصِّص بعض الوقت لدراسة الرمز البرمجي ومعرفة طريقة استخدامه لطريقة مكتبة برامج list_voices لإنشاء قائمة باللغات المتاحة.

استدعِ الدالة:

list_languages()

يُفترض أن تظهر لك القائمة التالية (أو أكبر):

---------------------- Languages: 58 -----------------------
     af-ZA     am-ET     ar-XA     bg-BG     bn-IN
     ca-ES    cmn-CN    cmn-TW     cs-CZ     da-DK
     de-DE     el-GR     en-AU     en-GB     en-IN
     en-US     es-ES     es-US     eu-ES     fi-FI
    fil-PH     fr-CA     fr-FR     gl-ES     gu-IN
     he-IL     hi-IN     hu-HU     id-ID     is-IS
     it-IT     ja-JP     kn-IN     ko-KR     lt-LT
     lv-LV     ml-IN     mr-IN     ms-MY     nb-NO
     nl-BE     nl-NL     pa-IN     pl-PL     pt-BR
     pt-PT     ro-RO     ru-RU     sk-SK     sr-RS
     sv-SE     ta-IN     te-IN     th-TH     tr-TR
     uk-UA     vi-VN    yue-HK

تعرض القائمة 58 لغة وخيارًا، مثل:

  • الماندرين الصينية والتايوانية
  • الإنجليزية الأسترالية والبريطانية والهندية والأمريكية،
  • الفرنسية من كندا وفرنسا،
  • البرتغالية من البرازيل والبرتغال.

لم يتم تثبيت هذه القائمة، ويزداد عددها عند توفّر أصوات جديدة.

ملخّص

سمحت لك هذه الخطوة بإدراج اللغات المتاحة.

5- سرد الأصوات المتاحة

في هذا القسم، ستحصل على قائمة بالأصوات المتوفرة بلغات مختلفة.

انسخ الرمز التالي إلى جلسة IPython:

import google.cloud.texttospeech as tts


def list_voices(language_code=None):
    client = tts.TextToSpeechClient()
    response = client.list_voices(language_code=language_code)
    voices = sorted(response.voices, key=lambda voice: voice.name)

    print(f" Voices: {len(voices)} ".center(60, "-"))
    for voice in voices:
        languages = ", ".join(voice.language_codes)
        name = voice.name
        gender = tts.SsmlVoiceGender(voice.ssml_gender).name
        rate = voice.natural_sample_rate_hertz
        print(f"{languages:<8} | {name:<24} | {gender:<8} | {rate:,} Hz")
        

خصِّص بعض الوقت لدراسة الرمز البرمجي ومعرفة كيف يستخدم طريقة مكتبة البرامج list_voices(language_code) لإدراج الأصوات المتاحة بلغة معيّنة.

والآن، احصل على قائمة الأصوات الألمانية المتاحة:

list_voices("de")

ينبغي أن تظهر لك على النحو التالي:

------------------------ Voices: 20 ------------------------
de-DE    | de-DE-Neural2-A          | FEMALE   | 24,000 Hz
de-DE    | de-DE-Neural2-B          | MALE     | 24,000 Hz
...
de-DE    | de-DE-Standard-A         | FEMALE   | 24,000 Hz
de-DE    | de-DE-Standard-B         | MALE     | 24,000 Hz
...
de-DE    | de-DE-Studio-B           | MALE     | 24,000 Hz
de-DE    | de-DE-Studio-C           | FEMALE   | 24,000 Hz
de-DE    | de-DE-Wavenet-A          | FEMALE   | 24,000 Hz
de-DE    | de-DE-Wavenet-B          | MALE     | 24,000 Hz
...

تتوفر أصوات متعددة وأنثى وذكور، بالإضافة إلى أصوات عادية وأصوات WaveNet وNeral2 و Studio:

  • يتم إنشاء الأصوات العادية بواسطة خوارزميات معالجة الإشارات.
  • أصوات WaveNet وNeral2 و Studio هي أصوات ذات جودة أعلى تمّ تجميعها من خلال نماذج تعلُّم الآلة وتبدو طبيعية أكثر.

يمكنك الآن الحصول على قائمة بالأصوات الإنجليزية المتاحة:

list_voices("en")

يُفترض أن يظهر لك شيء كالتالي:

------------------------ Voices: 90 ------------------------
en-AU    | en-AU-Neural2-A          | FEMALE   | 24,000 Hz
...
en-AU    | en-AU-Wavenet-A          | FEMALE   | 24,000 Hz
...
en-GB    | en-GB-Neural2-A          | FEMALE   | 24,000 Hz
...
en-GB    | en-GB-Wavenet-A          | FEMALE   | 24,000 Hz
...
en-IN    | en-IN-Standard-A         | FEMALE   | 24,000 Hz
...
en-IN    | en-IN-Wavenet-A          | FEMALE   | 24,000 Hz
...
en-US    | en-US-Neural2-A          | MALE     | 24,000 Hz
...
en-US    | en-US-News-K             | FEMALE   | 24,000 Hz
...
en-US    | en-US-Standard-A         | MALE     | 24,000 Hz
...
en-US    | en-US-Studio-M           | MALE     | 24,000 Hz
...
en-US    | en-US-Wavenet-A          | MALE     | 24,000 Hz
...

بالإضافة إلى مجموعة من الأصوات المتعدّدة في أجناس وسمات مختلفة، تتوفّر لهجات متعدّدة: الإنجليزية الأسترالية والبريطانية والهندية والإنجليزية الأمريكية.

خصِّص دقيقة من وقتك لإدراج الأصوات المتاحة للّغات والمتغيّرات المفضّلة (أو حتى لجميع اللغات):

list_voices("fr")
list_voices("pt")
list_voices()

ملخّص

سمحت هذه الخطوة بإدراج الأصوات المتاحة. يمكنك الاطّلاع على مزيد من المعلومات حول الأصوات واللغات المتوافقة.

6- إنشاء صوت من النص

يمكنك استخدام واجهة برمجة تطبيقات "تحويل النص إلى كلام" لتحويل سلسلة إلى بيانات صوتية. يمكنك ضبط ناتج تجميع الكلام بعدة طرق، بما في ذلك اختيار صوت فريد أو تعديل المخرجات في درجة الصوت ومستوى الصوت وسرعة الكلام ومعدّل العينة.

انسخ الرمز التالي إلى جلسة IPython:

import google.cloud.texttospeech as tts


def text_to_wav(voice_name: str, text: str):
    language_code = "-".join(voice_name.split("-")[:2])
    text_input = tts.SynthesisInput(text=text)
    voice_params = tts.VoiceSelectionParams(
        language_code=language_code, name=voice_name
    )
    audio_config = tts.AudioConfig(audio_encoding=tts.AudioEncoding.LINEAR16)

    client = tts.TextToSpeechClient()
    response = client.synthesize_speech(
        input=text_input,
        voice=voice_params,
        audio_config=audio_config,
    )

    filename = f"{voice_name}.wav"
    with open(filename, "wb") as out:
        out.write(response.audio_content)
        print(f'Generated speech saved to "{filename}"')
        

خصِّص بعض الوقت لدراسة الرمز البرمجي ومعرفة كيف يستخدم طريقة مكتبة برامج synthesize_speech لإنشاء البيانات الصوتية وحفظها كملف wav.

الآن، أنشئ جملًا ببعض اللهجات المختلفة:

text_to_wav("en-AU-Neural2-A", "What is the temperature in Sydney?")
text_to_wav("en-GB-Neural2-B", "What is the temperature in London?")
text_to_wav("en-IN-Wavenet-C", "What is the temperature in Delhi?")
text_to_wav("en-US-Studio-O", "What is the temperature in New York?")
text_to_wav("fr-FR-Neural2-A", "Quelle est la température à Paris ?")
text_to_wav("fr-CA-Neural2-B", "Quelle est la température à Montréal ?")

ينبغي أن تظهر لك على النحو التالي:

Generated speech saved to "en-AU-Neural2-A.wav"
Generated speech saved to "en-GB-Neural2-B.wav"
Generated speech saved to "en-IN-Wavenet-C.wav"
Generated speech saved to "en-US-Studio-O.wav"
Generated speech saved to "fr-FR-Neural2-A.wav"
Generated speech saved to "fr-CA-Neural2-B.wav"

لتنزيل جميع الملفات التي تم إنشاؤها دفعة واحدة، يمكنك استخدام أمر Cloud Shell هذا من بيئة Python:

!cloudshell download *.wav

تحقَّق من صحة الملف وسينزِّل المتصفح الملفات:

44382e3b7a3314b0.png 4dbccf007cd73b91.png

افتح كل ملف واستمِع إلى النتيجة.

ملخّص

في هذه الخطوة، تمكنت من استخدام واجهة برمجة تطبيقات ميزة "تحويل النص إلى كلام" لتحويل الجمل إلى ملفات صوتية wav. يمكنك قراءة المزيد من المعلومات حول إنشاء ملفات صوتية.

7. تهانينا

1215f38908082356.png

لقد تعلمت كيفية استخدام واجهة برمجة تطبيقات تحويل النص إلى كلام باستخدام لغة بايثون لإنشاء كلام يشبه البشر!

تَنظيم

لتنظيف بيئة التطوير، من Cloud Shell:

  • إذا كنت لا تزال في جلسة IPython، يُرجى الرجوع إلى واجهة الأوامر: exit
  • التوقف عن استخدام بيئة Python الافتراضية: deactivate
  • حذف مجلد البيئة الافتراضية: cd ~ ; rm -rf ./venv-texttospeech

لحذف مشروعك على Google Cloud، اتّبِع الخطوات التالية من Cloud Shell:

  • استرداد رقم تعريف مشروعك الحالي: PROJECT_ID=$(gcloud config get-value core/project)
  • تأكَّد من أنّ هذا هو المشروع الذي تريد حذفه: echo $PROJECT_ID.
  • حذف المشروع: gcloud projects delete $PROJECT_ID

مزيد من المعلومات

الترخيص

هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.