۱. مرور کلی
API تبدیل گفتار به متن گوگل کلود (Google Cloud Speech-to-Text API) به توسعهدهندگان این امکان را میدهد که با اعمال مدلهای قدرتمند شبکه عصبی در یک API آسان برای استفاده، صدا را به ۱۲۰ زبان و گونه مختلف به متن تبدیل کنند.
در این آزمایشگاه کد، شما بر استفاده از API تبدیل گفتار به متن با Node.js تمرکز خواهید کرد. یاد خواهید گرفت که چگونه یک فایل صوتی به زبان انگلیسی و سایر زبانها را برای رونویسی به API تبدیل گفتار به متن ابری ارسال کنید.
آنچه یاد خواهید گرفت
- نحوه فعال کردن API تبدیل گفتار به متن
- نحوه احراز هویت درخواستهای API
- نحوه نصب کتابخانه کلاینت گوگل کلود برای Node.js
- نحوه رونویسی فایلهای صوتی به زبان انگلیسی
- نحوه رونویسی فایلهای صوتی با مهر زمانی ورد
- نحوه رونویسی فایلهای صوتی به زبانهای مختلف
آنچه نیاز دارید
نظرسنجی
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با Node.js چگونه ارزیابی میکنید؟
تجربه خود را در استفاده از خدمات پلتفرم ابری گوگل چگونه ارزیابی میکنید؟
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. (اگر از قبل حساب Gmail یا G Suite ندارید، باید یکی ایجاد کنید .)
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژههای Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.
- در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .
اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعملهای بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش میدهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
شروع پوسته ابری
اگرچه میتوان از راه دور و از طریق لپتاپ، گوگل کلود را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهید کرد.
فعال کردن پوسته ابری
- از کنسول ابری، روی فعال کردن پوسته ابری کلیک کنید
.
اگر قبلاً Cloud Shell را شروع نکردهاید، یک صفحه میانی (در زیر صفحه) به شما نمایش داده میشود که توضیح میدهد چیست. در این صورت، روی ادامه کلیک کنید (و دیگر هرگز آن را نخواهید دید). آن صفحه یکبار مصرف به این شکل است:
آمادهسازی و اتصال به Cloud Shell فقط چند لحظه طول میکشد.
این ماشین مجازی با تمام ابزارهای توسعهای که نیاز دارید، مجهز شده است. این ماشین یک دایرکتوری خانگی ۵ گیگابایتی پایدار ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. بخش عمدهای از کار شما در این آزمایشگاه کد، اگر نگوییم همه، را میتوان به سادگی با یک مرورگر یا کرومبوک انجام داد.
پس از اتصال به 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].
۳. فعال کردن API تبدیل گفتار به متن
قبل از اینکه بتوانید از API تبدیل گفتار به متن استفاده کنید، باید آن را فعال کنید. میتوانید با استفاده از دستور زیر در Cloud Shell، API را فعال کنید:
gcloud services enable speech.googleapis.com
۴. درخواستهای API را تأیید اعتبار کنید
برای ارسال درخواست به API تبدیل گفتار به متن، باید از یک حساب کاربری سرویس (Service Account) استفاده کنید. یک حساب کاربری سرویس متعلق به پروژه شماست و توسط کتابخانه Google Client Node.js برای ارسال درخواستهای 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 که در مرحله بعدی به آن پرداخته میشود، برای یافتن اعتبارنامههای شما استفاده میشود، تنظیم کنید. متغیر محیطی باید با استفاده از دستور زیر، روی مسیر کامل فایل JSON اعتبارنامههایی که ایجاد کردهاید، تنظیم شود:
export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"
میتوانید درباره احراز هویت API تبدیل گفتار به متن بیشتر بخوانید.
۵. کتابخانه کلاینت 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، لطفاً به راهنمای راهاندازی مراجعه کنید.
حالا، شما آماده استفاده از API تبدیل گفتار به متن هستید!
۶. رونویسی فایلهای صوتی
در این بخش، شما یک فایل صوتی از پیش ضبط شده به زبان انگلیسی را رونویسی خواهید کرد. این فایل صوتی در فضای ابری گوگل (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 نوع کدگذاری برای فایلهای .raw است (برای جزئیات بیشتر به توضیحات مربوط به نوع کدگذاری مراجعه کنید).
در شیء RecognitionAudio ، میتوانید uri فایل صوتی خود در فضای ابری یا مسیر فایل محلی فایل صوتی را به API ارسال کنید. در اینجا، ما از uri فضای ابری استفاده میکنیم.
برنامه را اجرا کنید:
node .
شما باید خروجی زیر را ببینید:
how old is the Brooklyn Bridge
۷. رونویسی با مهر زمانی کلمات
تبدیل گفتار به متن میتواند فاصله زمانی (برچسب زمانی) را برای صدای رونویسی شده تشخیص دهد. فاصلههای زمانی، ابتدا و انتهای هر کلمه گفتاری را در صدای ارائه شده نشان میدهند. مقدار فاصله زمانی، نشان دهنده مدت زمانی است که از ابتدای صدا، با فواصل ۱۰۰ میلیثانیه، گذشته است.
به فایل 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 به 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
۸. رونویسی زبانهای مختلف
API تبدیل گفتار به متن از رونویسی در بیش از ۱۰۰ زبان پشتیبانی میکند! میتوانید لیستی از زبانهای پشتیبانی شده را اینجا پیدا کنید.
در این بخش، شما یک فایل صوتی از پیش ضبط شده به زبان فرانسه را رونویسی خواهید کرد. این فایل صوتی در فضای ابری گوگل (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
این جملهای از یک داستان کودکانه محبوب فرانسوی است.
برای لیست کامل زبانها و کدهای زبان پشتیبانیشده، به مستندات اینجا مراجعه کنید.
۹. تبریک میگویم!
شما یاد گرفتید که چگونه از API تبدیل گفتار به متن با استفاده از Node.js برای انجام انواع مختلف رونویسی روی فایلهای صوتی استفاده کنید!
تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب پلتفرم گوگل کلود خود برای منابع استفاده شده در این راهنمای سریع:
- به کنسول پلتفرم ابری بروید.
- پروژهای را که میخواهید خاموش کنید انتخاب کنید، سپس روی «حذف» در بالا کلیک کنید: این کار پروژه را برای حذف زمانبندی میکند.
اطلاعات بیشتر
- رابط برنامهنویسی کاربردی تبدیل گفتار به متن گوگل کلود: https://cloud.google.com/speech-to-text/docs
- Node.js روی پلتفرم ابری گوگل: https://cloud.google.com/nodejs/
- کلاینت گوگل کلود نود جی اس: https://googlecloudplatform.github.io/google-cloud-node/
مجوز
این اثر تحت مجوز عمومی Creative Commons Attribution 2.0 منتشر شده است.