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
- كيفية تحويل الصوت إلى نص في الملفات الصوتية باللغة الإنجليزية
- كيفية تحويل الصوت إلى نص في الملفات الصوتية باستخدام الطوابع الزمنية للكلمات
- كيفية تحويل الصوت إلى نص في الملفات الصوتية بلغات مختلفة
المتطلبات
استطلاع الرأي
كيف ستستخدم هذا البرنامج التعليمي؟
كيف تقيّم تجربتك مع Node.js؟
ما هو تقييمك لتجربة استخدام خدمات Google Cloud Platform؟
2. الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. (إذا لم يكن لديك حساب على Gmail أو G Suite، عليك إنشاء حساب).
تذكَّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (الاسم أعلاه مستخدَم حاليًا ولن يكون متاحًا لك، نأسف لذلك). سيتم الإشارة إليه لاحقًا في هذا الدرس العملي باسم PROJECT_ID.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد Google Cloud.
لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "التنظيف" الذي ينصحك بكيفية إيقاف الموارد حتى لا تتحمّل رسومًا تتجاوز هذا البرنامج التعليمي. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
تفعيل Cloud Shell
- من Cloud Console، انقر على تفعيل Cloud Shell
.
إذا لم يسبق لك بدء Cloud Shell، ستظهر لك شاشة وسيطة (الجزء السفلي غير المرئي من الصفحة) توضّح ماهيته. في هذه الحالة، انقر على متابعة (ولن تظهر لك مرة أخرى). في ما يلي الشكل الذي ستظهر به هذه الشاشة لمرة واحدة:
يستغرق توفير Cloud Shell والاتصال به بضع لحظات فقط.
يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إنجاز معظم العمل في هذا الدرس التطبيقي حول الترميز، إن لم يكن كله، باستخدام متصفّح أو جهاز Chromebook فقط.
بعد الاتصال بـ 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`
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، عليك استخدام حساب خدمة. حساب الخدمة هو حساب خاص بمشروعك، وتستخدمه مكتبة Google Client Node.js لتقديم طلبات إلى Speech-to-Text API. وكما هو الحال مع أي حساب مستخدم آخر، يتم تمثيل حساب الخدمة بعنوان بريد إلكتروني. في هذا القسم، ستستخدم Cloud SDK لإنشاء حساب خدمة، ثم ستنشئ بيانات الاعتماد اللازمة للمصادقة بصفتك حساب الخدمة.
أولاً، اضبط متغيّر بيئة باستخدام رقم تعريف المشروع الذي ستستخدمه طوال هذا الدرس التطبيقي حول الترميز، وإذا كنت تستخدم 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، ثم ابدأ حزمة Node.js جديدة في مجلد من اختيارك:
npm init
يطرح NPM عدة أسئلة حول إعدادات المشروع، مثل الاسم والإصدار. لكل سؤال، اضغط على ENTER لقبول القيم التلقائية. نقطة الدخول التلقائية هي ملف باسم index.js.
بعد ذلك، ثبِّت مكتبة Google Cloud Speech في المشروع:
npm install --save @google-cloud/speech
للحصول على مزيد من التعليمات حول كيفية إعداد بيئة تطوير Node.js على Google Cloud، يُرجى الاطّلاع على دليل الإعداد.
أنت الآن جاهز لاستخدام واجهة برمجة التطبيقات Speech-to-Text.
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 (راجِع المستند لمعرفة المزيد من التفاصيل حول نوع الترميز).
في العنصر 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 باستخدام Node.js لإجراء أنواع مختلفة من عمليات تحويل الصوت إلى نص على ملفات صوتية.
تَنظيم
لتجنُّب تحمّل رسوم في حسابك على Google Cloud Platform مقابل الموارد المستخدَمة في هذا الدليل السريع، اتّبِع الخطوات التالية:
- انتقِل إلى وحدة تحكّم Cloud Platform.
- اختَر المشروع الذي تريد إيقافه، ثم انقر على "حذف" في أعلى الصفحة: يؤدي ذلك إلى تحديد موعد لحذف المشروع.
مزيد من المعلومات
- Google Cloud Speech-to-Text API: https://cloud.google.com/speech-to-text/docs
- Node.js على Google Cloud Platform: https://cloud.google.com/nodejs/
- برنامج Google Cloud Node.js: https://googlecloudplatform.github.io/google-cloud-node/
الترخيص
يخضع هذا العمل لترخيص المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0 Generic License.