1. نظرة عامة
تمكّن Text-to-Speech API المطوّرين من إنشاء كلام يشبه البشر. تحوّل واجهة برمجة التطبيقات النص إلى تنسيقات صوتية مثل WAV أو MP3 أو Ogg Opus. ويتيح التطبيق أيضًا إدخالات لغة ترميز تركيب الكلام (SSML) لتحديد فترات الإيقاف المؤقت والأرقام وتنسيق التاريخ والوقت وغيرها من تعليمات اللفظ.
في هذا البرنامج التعليمي، ستركز على استخدام واجهة برمجة تطبيقات تحويل النص إلى كلام مع لغة بايثون.
المعلومات التي ستطّلع عليها
- كيفية إعداد البيئة
- كيفية إدراج اللغات المتاحة
- كيفية إدراج الأصوات المتاحة
- كيفية دمج الصوت من النص
المتطلبات
استطلاع
كيف ستستخدم هذا البرنامج التعليمي؟
كيف تقيّم تجربتك مع Python؟
كيف تقيّم تجربتك مع خدمات Google Cloud؟
2. الإعداد والمتطلبات
إعداد بيئة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
- يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد تحديده). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (الذي يتم تحديده عادةً على أنّه
PROJECT_ID
). وإذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. ويمكنك بدلاً من ذلك تجربة طلبك الخاص ومعرفة ما إذا كان متاحًا. ولا يمكن تغييره بعد هذه الخطوة ويبقى طوال مدة المشروع. - لمعلوماتك، هناك قيمة ثالثة، وهي رقم المشروع، الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. لن يؤدي إكمال هذا الدرس التطبيقي حول الترميز إلى فرض أي تكاليف، إن وُجدت. لإيقاف تشغيل الموارد لتجنب تحمُّل الفواتير إلى ما هو أبعد من هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
يمكنك إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، إلا أنّك ستستخدم في هذا الدرس التطبيقي Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.
تفعيل Cloud Shell
- من Cloud Console، انقر على تفعيل Cloud Shell .
إذا كانت هذه هي المرة الأولى التي تبدأ فيها Cloud Shell، ستظهر لك شاشة وسيطة تصف ماهيتها. إذا ظهرت لك شاشة وسيطة، انقر على متابعة.
من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بخدمة Cloud Shell بضع دقائق فقط.
يتم تحميل هذا الجهاز الافتراضي مع جميع أدوات التطوير اللازمة. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ معظم عملك، إن لم يكن كلّه، في هذا الدرس التطبيقي حول الترميز باستخدام متصفّح.
بعد الربط بخدمة Cloud Shell، من المفترض أن تتأكّد من أنّه تمّت مصادقتك وأنّ المشروع مضبوط على رقم تعريف مشروعك.
- شغِّل الأمر التالي في 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`
- شغّل الأمر التالي في 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
تحقَّق من صحة الملف وسينزِّل المتصفح الملفات:
افتح كل ملف واستمِع إلى النتيجة.
ملخّص
في هذه الخطوة، تمكنت من استخدام واجهة برمجة تطبيقات ميزة "تحويل النص إلى كلام" لتحويل الجمل إلى ملفات صوتية wav
. يمكنك قراءة المزيد من المعلومات حول إنشاء ملفات صوتية.
7. تهانينا
لقد تعلمت كيفية استخدام واجهة برمجة تطبيقات تحويل النص إلى كلام باستخدام لغة بايثون لإنشاء كلام يشبه البشر!
تَنظيم
لتنظيف بيئة التطوير، من 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
مزيد من المعلومات
- لاختبار العرض التوضيحي في المتصفّح: https://cloud.google.com/text-to-speech
- مستندات ميزة "تحويل النص إلى كلام": https://cloud.google.com/text-to-speech/docs
- Python على Google Cloud: https://cloud.google.com/python
- مكتبات عميل Cloud للغة Python: https://github.com/googleapis/google-cloud-python
الترخيص
هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.