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

1. نظرة عامة

1215f38908082356.png

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

في هذا الفيديو التعليمي، ستركز على استخدام واجهة برمجة التطبيقات Text-to-Speech API مع لغة Python.

ما ستتعلمه

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

المتطلبات

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

استطلاع الرأي

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

قراءة المحتوى فقط قراءة المحتوى وإكمال التمارين

كيف تقيّم تجربتك مع 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 API، شغِّل الأمر التالي في Cloud Shell لتفعيل الواجهة:

gcloud services enable texttospeech.googleapis.com

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

Operation "operations/..." finished successfully.

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

انتقِل إلى دليل المنزل:

cd ~

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

virtualenv venv-texttospeech

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

source venv-texttospeech/bin/activate

ثبِّت IPython ومكتبة برامج Text-to-Speech API:

pip install ipython google-cloud-texttospeech

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

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

أنت الآن جاهز لاستخدام مكتبة برامج عميل Text-to-Speech API.

في الخطوات التالية، ستستخدم برنامجًا تفاعليًا لتفسير لغة 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 وNeural2 وأصوات Studio:

  • يتم إنشاء الأصوات العادية باستخدام خوارزميات معالجة الإشارات.
  • أصوات WaveNet وNeural2 و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. إنشاء صوت من نص

يمكنك استخدام Text-to-Speech API لتحويل سلسلة إلى بيانات صوتية. يمكنك ضبط إخراج تركيب الكلام بطرق متنوعة، بما في ذلك اختيار صوت فريد أو تعديل الإخراج من حيث النبرة ومستوى الصوت وسرعة الكلام ومعدّل أخذ العينات.

انسخ الرمز التالي إلى جلسة 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

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

ملخّص

في هذه الخطوة، تمكّنت من استخدام Text-to-Speech API لتحويل الجُمل إلى ملفات صوتية wav. مزيد من المعلومات حول إنشاء ملفات صوتية

7. تهانينا!

1215f38908082356.png

تعرّفت على كيفية استخدام واجهة برمجة التطبيقات Text-to-Speech API باستخدام لغة Python لإنشاء كلام شبيه بالكلام البشري.

تَنظيم

لتنظيف بيئة التطوير، اتّبِع الخطوات التالية من 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 Generic License.