استفاده از Speech-to-Text API با Node.js

استفاده از Speech-to-Text API با Node.js

درباره این codelab

subjectآخرین به‌روزرسانی: دسامبر ۱۵, ۲۰۲۲
account_circleنویسنده: Anu Srivastava

1. نمای کلی

Google Cloud Speech-to-Text API به توسعه دهندگان این امکان را می دهد تا با استفاده از مدل های شبکه عصبی قدرتمند در یک API آسان، صدا را به متن در 120 زبان و نوع تبدیل کنند.

در این کد لبه، شما بر روی استفاده از Speech-to-Text API با Node.js تمرکز خواهید کرد. شما یاد خواهید گرفت که چگونه یک فایل صوتی را به زبان انگلیسی و سایر زبان ها برای رونویسی به Cloud Speech-to-Text API ارسال کنید.

  • نحوه فعال کردن Speech-to-Text API
  • نحوه احراز هویت درخواست های API
  • نحوه نصب کتابخانه سرویس گیرنده Google Cloud برای Node.js
  • چگونه فایل های صوتی را به زبان انگلیسی رونویسی کنیم
  • نحوه رونویسی فایل های صوتی با مُهر زمانی word
  • چگونه فایل های صوتی را به زبان های مختلف رونویسی کنیم

آنچه شما نیاز دارید

  • یک پروژه Google Cloud Platform
  • یک مرورگر، مانند کروم یا فایرفاکس
  • آشنایی با Javascript/Node.js

نظرسنجی

چگونه از این آموزش استفاده خواهید کرد؟

تجربه خود را با Node.js چگونه ارزیابی می کنید؟

تجربه خود را در استفاده از سرویس‌های پلتفرم ابری Google چگونه ارزیابی می‌کنید؟

2. راه اندازی و الزامات

تنظیم محیط خود به خود

  1. به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. (اگر قبلاً یک حساب Gmail یا G Suite ندارید، باید یک حساب ایجاد کنید .)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJHHXieCvXw5 Zw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aTQz5GpG0T

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3UUUO1A8CXUF

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID نامیده خواهد شد.

  1. در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورت‌حساب را در Cloud Console فعال کنید .

اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعمل‌های موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه می‌کند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورت‌حساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

Cloud Shell را فعال کنید

  1. از Cloud Console، روی Activate Cloud Shell کلیک کنید H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0ZlWzVDLWD2Ca0ZlUZRWLXT دی کیو .

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4ZIRF6HQWQ2 rbzQ

اگر قبلاً Cloud Shell را راه‌اندازی نکرده‌اید، با یک صفحه میانی (زیر تاشو) روبرو می‌شوید که آن را توصیف می‌کند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4tw1Uo6VRh1

تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7PyRvcD

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.

پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است.

  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. API گفتار به متن را فعال کنید

قبل از شروع استفاده از Speech-to-Text API، باید API را فعال کنید. می توانید API را با استفاده از دستور زیر در Cloud Shell فعال کنید:

gcloud services enable speech.googleapis.com

4. احراز هویت درخواست های API

برای ارسال درخواست به Speech-to-Text API، باید از یک حساب سرویس استفاده کنید. یک حساب سرویس متعلق به پروژه شما است و توسط کتابخانه Google Client Node.js برای درخواست‌های Speech-to-Text API استفاده می‌شود. مانند هر حساب کاربری دیگری، یک حساب سرویس با یک آدرس ایمیل نشان داده می شود. در این بخش، از Cloud SDK برای ایجاد یک حساب سرویس استفاده می‌کنید و سپس اعتبارنامه‌هایی را ایجاد می‌کنید که باید آنها را به عنوان حساب سرویس تأیید کنید.

ابتدا یک متغیر محیطی را با PROJECT_ID خود تنظیم کنید که در سراسر این کد لبه استفاده خواهید کرد، اگر از Cloud Shell استفاده می کنید، این برای شما تنظیم می شود:

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

سپس، یک حساب سرویس جدید برای دسترسی به 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 که در مرحله بعد پوشش داده شده است، برای یافتن اعتبار شما استفاده می شود. متغیر محیطی باید با استفاده از:

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

می‌توانید درباره احراز هویت گفتار به متن API بیشتر بخوانید.

5. کتابخانه سرویس گیرنده Google Cloud Speech-to-Text API را برای Node.js نصب کنید

ابتدا، یک پروژه ایجاد کنید که از آن برای اجرای این آزمایشگاه 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 به API می گوید که از کدام نوع رمزگذاری صوتی برای فایل صوتی استفاده می کنید. Flac نوع رمزگذاری برای فایل‌های خام است (برای جزئیات بیشتر به سند نوع کدگذاری مراجعه کنید).

در شی RecognitionAudio ، می توانید API را یا uri فایل صوتی ما در Cloud Storage یا مسیر فایل محلی فایل صوتی را منتقل کنید. در اینجا، ما از یک Cloud Storage uri استفاده می کنیم.

برنامه را اجرا کنید:

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();

یک یا دو دقیقه وقت بگذارید و کد را مطالعه کنید و ببینید که برای رونویسی یک فایل صوتی با مهرهای زمانی word* استفاده می‌شود*.* پارامتر EnableWordTimeOffsets به API می‌گوید تغییر زمان را فعال کند (برای جزئیات بیشتر به سند مراجعه کنید).

دوباره برنامه خود را اجرا کنید:

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. تبریک می گویم!

شما یاد گرفتید که چگونه با استفاده از Node.js از Speech-to-Text API برای انجام انواع رونویسی روی فایل های صوتی استفاده کنید!

پاک کن

برای جلوگیری از تحمیل هزینه به حساب Google Cloud Platform برای منابع استفاده شده در این شروع سریع:

  • به کنسول Cloud Platform بروید.
  • پروژه‌ای را که می‌خواهید تعطیل کنید انتخاب کنید، سپس روی «حذف» در بالا کلیک کنید: با این کار، پروژه برای حذف برنامه‌ریزی می‌شود.

بیشتر بدانید

مجوز

این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.