استخدام واجهة برمجة تطبيقات Speech-to-Text API مع Node.js

استخدام واجهة برمجة تطبيقات Speech-to-Text API مع Node.js

لمحة عن هذا الدرس التطبيقي حول الترميز

subjectتاريخ التعديل الأخير: ديسمبر 15, 2022
account_circleتأليف: Anu Srivastava

1. نظرة عامة

تتيح واجهة Google Cloud Speech-to-Text API للمطوّرين تحويل الصوت إلى نص بـ 120 لغة ومتغيّرًا، وذلك من خلال تطبيق نماذج شبكة عصبية فعّالة على واجهة برمجة تطبيقات سهلة الاستخدام.

في هذا الدرس التطبيقي، ستركّز على استخدام واجهة برمجة تطبيقات Speech-to-Text API من خلال Node.js. ستتعرَّف على طريقة إرسال ملف صوتي باللغة الإنجليزية ولغات أخرى إلى واجهة برمجة تطبيقات Cloud Speech-to-Text API لتحويله إلى نص.

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

  • كيفية تفعيل واجهة برمجة تطبيقات Speech-to-Text API
  • طريقة مصادقة طلبات البيانات من واجهة برمجة التطبيقات
  • كيفية تثبيت مكتبة برامج Google Cloud لنظام Node.js
  • كيفية تحويل الصوت إلى نص في الملفات الصوتية باللغة الإنجليزية
  • كيفية تحويل الصوت إلى نص في الملفات الصوتية التي تتضمّن الطوابع الزمنية للكلمات
  • كيفية تحويل الصوت إلى نص في الملفات الصوتية بلغات مختلفة

المتطلبات

  • مشروع Google Cloud Platform
  • متصفح، مثل Chrome أو Firefox
  • الإلمام باستخدام JavaScript/Node.js

استطلاع

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

ما هو تقييمك لتجربتك في استخدام Node.js؟

ما هو تقييمك لتجربتك في استخدام خدمات Google Cloud Platform؟

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

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

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

يُرجى تذكُّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (سبق أن تم استخدام الاسم أعلاه ولن يكون مناسبًا لك). ستتم الإشارة إليها لاحقًا في هذا الدرس التطبيقي حول الترميز باسم PROJECT_ID.

  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "الحذف سريعًا". الذي يقدم لك نصائح حول كيفية إيقاف تشغيل الموارد حتى لا تتكبّد أي فواتير خارج نطاق هذا البرنامج التعليمي. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج الفترة التجريبية المجانية التي تبلغ قيمتها 300 دولار أمريكي.

بدء Cloud Shell

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

تفعيل Cloud Shell

  1. من Cloud Console، انقر على تفعيل Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

إذا لم يسبق لك بدء تشغيل Cloud Shell، ستظهر لك شاشة وسيطة (الجزء السفلي غير المرئي من الصفحة) تصف ماهيتها. وفي هذه الحالة، انقر على متابعة (ولن تظهر لك مرة أخرى). إليك ما تبدو عليه هذه الشاشة التي تُستخدم لمرة واحدة:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

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

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

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

بعد الربط بخدمة 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`
gcloud config list project

مخرجات الأمر

[core]
project = <PROJECT_ID>

إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:

gcloud config set project <PROJECT_ID>

مخرجات الأمر

Updated property [core/project].

3. تفعيل واجهة برمجة تطبيقات Speech-to-Text API

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

gcloud services enable speech.googleapis.com

4. مصادقة طلبات البيانات من واجهة برمجة التطبيقات

لإرسال طلبات إلى واجهة برمجة التطبيقات Speech-to-Text API، عليك استخدام حساب خدمة. ينتمي حساب الخدمة إلى مشروعك، وتستخدمه مكتبة Node.js في برنامج Google Client لإرسال طلبات البيانات من واجهة برمجة التطبيقات Speech-to-Text. مثل أي حساب مستخدم آخر، يتم تمثيل حساب الخدمة بعنوان بريد إلكتروني. في هذا القسم، ستستخدم حزمة تطوير البرامج (SDK) للسحابة الإلكترونية لإنشاء حساب خدمة، ثم إنشاء بيانات الاعتماد التي ستحتاج إلى المصادقة عليها باعتباره حساب الخدمة.

أولاً، عليك ضبط متغيّر بيئة باستخدام PROJECT_ID الذي ستستخدمه خلال هذا الدرس التطبيقي. إذا كنت تستخدم Cloud Shell، سيتم ضبط هذا المتغيّر لك على النحو التالي:

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

بعد ذلك، أنشِئ حساب خدمة جديدًا للوصول إلى واجهة برمجة تطبيقات Speech-to-Text API باستخدام:

gcloud iam service-accounts create my-speech-to-text-sa \
 
--display-name "my speech-to-text codelab service account"

بعد ذلك، أنشِئ بيانات اعتماد سيستخدمها رمز Node.js لتسجيل الدخول كحساب خدمة جديد. أنشِئ بيانات الاعتماد هذه واحفظها كملف JSON ~/key.json باستخدام الأمر التالي:

gcloud iam service-accounts keys create ~/key.json \
 
--iam-account  my-speech-to-text-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

وأخيرًا، يمكنك ضبط متغيّر البيئة GOOGLE_APPLICATION_CREDENTIALS، الذي تستخدمه مكتبة Speech-to-Text API Node.js، التي ستتناولها في الخطوة التالية، للعثور على بيانات الاعتماد. يجب ضبط متغيّر البيئة على المسار الكامل لملف JSON لبيانات الاعتماد الذي أنشأته، وذلك باستخدام:

export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"

يمكنك الاطّلاع على المزيد من المعلومات حول مصادقة واجهة برمجة تطبيقات Speech-to-Text API.

5. تثبيت مكتبة برامج واجهة برمجة التطبيقات Google Cloud Speech-to-Text API من أجل Node.js

أولاً، أنشئ مشروعًا ستستخدمه لتشغيل التمرين المعملي لواجهة برمجة تطبيقات Speech-to-Text API من خلال إعداد حزمة Node.js جديدة في مجلد من اختيارك:

npm init

تطرح NPM عدة أسئلة حول تهيئة المشروع، مثل الاسم والإصدار. لكل سؤال، اضغط على ENTER لقبول القيم التلقائية. نقطة الإدخال التلقائية هي ملف باسم index.js.

بعد ذلك، ثبِّت مكتبة Google Cloud Speech في المشروع من خلال اتّباع الخطوات التالية:

npm install --save @google-cloud/speech

لمزيد من التعليمات حول كيفية إعداد عملية تطوير Node.js في Google Cloud، يُرجى الاطّلاع على دليل الإعداد.

والآن، أنت جاهز لاستخدام واجهة برمجة تطبيقات Speech-to-Text API.

6. تحويل الملفات الصوتية إلى نص

في هذا القسم، سيتم تحويل الصوت إلى نص في ملف صوتي مسجّل مسبقًا باللغة الإنجليزية. يتوفر الملف الصوتي على Google Cloud Storage.

انتقِل إلى ملف index.js داخل الرمز واستبدِل الرمز بما يلي:

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */

async
function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
 
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';

 
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
 
const audio = {
    uri
: gcsUri,
 
};
 
const config = {
    encoding
: 'LINEAR16',
    sampleRateHertz
: 16000,
    languageCode
: 'en-US',
 
};
 
const request = {
    audio
: audio,
    config
: config,
 
};

 
// Detects speech in the audio file
 
const [response] = await client.recognize(request);
 
const transcription = response.results
     
.map(result => result.alternatives[0].transcript)
     
.join('\n');
  console
.log(`Transcription: ${transcription}`);
}

quickstart
();

خصِّص دقيقة أو دقيقتَين لدراسة الرمز ومعرفة كيفية استخدامه لتحويل الصوت إلى نص في ملف صوتي*.*

تُعلم المَعلمة Encoding واجهة برمجة التطبيقات بنوع ترميز الصوت الذي تستخدمه للملف الصوتي. Flac هو نوع ترميز الملفات بتنسيق .raw (راجِع doc لمعرفة نوع الترميز لمزيد من التفاصيل).

في العنصر RecognitionAudio، يمكنك ضبط واجهة برمجة التطبيقات، إمّا معرّف الموارد المنتظم (URI) الخاص بالملف الصوتي في Cloud Storage أو مسار الملف المحلي للملف الصوتي. نستخدم هنا معرّف موارد منتظم (URI) لخدمة Cloud Storage.

شغِّل البرنامج:

node .

من المفترض أن يظهر لك الناتج التالي:

how old is the Brooklyn Bridge

7. تحويل الصوت إلى نص باستخدام الطوابع الزمنية للكلمات

يمكن لميزة "تحويل الكلام إلى نص" رصد معادلة الوقت (الطابع الزمني) للصوت المحوّل إلى نص. تعرض الفواصل الزمنية بداية ونهاية كل كلمة منطوقة في الصوت المُقدَّم. تمثّل قيمة معادلة الوقت مقدار الوقت المنقضي من بداية الصوت، بزيادات تبلغ 100 ملي ثانية.

انتقِل إلى ملف index.js داخل الرمز واستبدِل الرمز بما يلي:

const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */

async
function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
 
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';

 
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
 
const audio = {
    uri
: gcsUri,
 
};
 
const config = {
    encoding
: 'LINEAR16',
    sampleRateHertz
: 16000,
    languageCode
: 'en-US',
    enableWordTimeOffsets
: true,
 
};
 
const request = {
    audio
: audio,
    config
: config,
 
};

 
// Detects speech in the audio file
 
const [response] = await client.recognize(request);
  response
.results.forEach((result) => {
    result
.alternatives.forEach((alternative) => {
      console
.log(`Transcript: ${alternative.transcript}`);
      console
.log(`Word details:`);
      console
.log(` Word count ${alternative.words.length}`);
      alternative
.words.forEach((item) => {
        console
.log(`  ${item.word}`);
       
const s = parseInt(item.startTime.seconds) +
         item
.startTime.nanos/1000000000;
        console
.log(`   WordStartTime: ${s}s`);
       
const e = parseInt(item.endTime.seconds) +
        item
.endTime.nanos/1000000000;
        console
.log(`   WordEndTime: ${e}s`);
     
});
   
});
 
});
}

quickstart
();

خصِّص دقيقة أو دقيقتَين لدراسة الرمز البرمجي والتأكّد من أنّه يُستخدم لتحويل الصوت إلى نص في ملف صوتي يتضمّن الطوابع الزمنية للكلمات*.* تطلب المَعلمة EnableWordTimeOffsets من واجهة برمجة التطبيقات تفعيل الفواصل الزمنية. (يُرجى الاطّلاع على المستند للحصول على مزيد من التفاصيل).

شغِّل البرنامج مرة أخرى:

node .

من المفترض أن يظهر لك الناتج التالي:

Transcript: how old is the Brooklyn Bridge
Word details:
 
Word count 6
  how
   
WordStartTime: 0s
   
WordEndTime: 0.3s
  old
   
WordStartTime: 0.3s
   
WordEndTime: 0.6s
 
is
   
WordStartTime: 0.6s
   
WordEndTime: 0.8s
  the
   
WordStartTime: 0.8s
   
WordEndTime: 0.9s
 
Brooklyn
   
WordStartTime: 0.9s
   
WordEndTime: 1.1s
 
Bridge
   
WordStartTime: 1.1s
   
WordEndTime: 1.4s

8. تحويل الصوت إلى نص بلغات مختلفة

تتيح واجهة برمجة التطبيقات Speech-to-Text API تحويل الكلام إلى نص بأكثر من 100 لغة. يمكنك العثور على قائمة باللغات المتوافقة هنا.

في هذا القسم، سيتم تحويل الصوت إلى نص من ملف صوتي مسجّل مسبقًا إلى اللغة الفرنسية. يتوفر الملف الصوتي على Google Cloud Storage.

انتقِل إلى ملف index.js داخل الرمز واستبدِل الرمز بما يلي:

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */

async
function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
 
const gcsUri = 'gs://cloud-samples-data/speech/corbeau_renard.flac';

 
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
 
const audio = {
    uri
: gcsUri,
 
};
 
const config = {
    encoding
: 'FLAC',
    languageCode
: 'fr-FR',
 
};
 
const request = {
    audio
: audio,
    config
: config,
 
};

 
// Detects speech in the audio file
 
const [response] = await client.recognize(request);
 
const transcription = response.results
     
.map((result) => result.alternatives[0].transcript)
     
.join('\n');
  console
.log(`Transcription: ${transcription}`);
}

quickstart
();

شغِّل البرنامج مرة أخرى ومن المفترض أن يظهر لك الناتج التالي:

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

هذه جملة من قصة أطفال فرنسية شهيرة.

للحصول على قائمة كاملة باللغات المتوافقة ورموز اللغات، يمكنك الاطّلاع على المستندات هنا.

9. تهانينا!

لقد تعلمت كيفية استخدام واجهة برمجة تطبيقات Speech-to-Text API من خلال Node.js لإجراء أنواع مختلفة من تحويل الصوت إلى نص في الملفات الصوتية.

تَنظيم

لتجنُّب تحمُّل الرسوم المفروضة على حسابك على Google Cloud Platform مقابل الموارد المستخدَمة في عملية البدء السريع هذه:

  • انتقِل إلى وحدة تحكُّم Cloud Platform.
  • اختَر المشروع الذي تريد إيقافه، ثم انقر على "حذف". في الجزء العلوي: يؤدي هذا إلى تحديد موعد المشروع للحذف.

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

الترخيص

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