Node.js와 함께 Speech-to-Text API 사용

Node.js와 함께 Speech-to-Text API 사용

이 Codelab 정보

subject최종 업데이트: 12월 15, 2022
account_circle작성자: Anu Srivastava

1. 개요

사용하기 간편한 API로 강력한 신경망 모델을 적용하는 Google Cloud Speech-to-Text API를 사용하면 개발자가 오디오를 120개 언어 및 방언으로 된 텍스트로 변환할 수 있습니다.

이 Codelab에서는 Node.js와 함께 Speech-to-Text API를 사용하는 방법을 중점적으로 알아봅니다. 텍스트 변환을 위해 영어 및 다른 언어로 된 오디오 파일을 Cloud Speech-to-Text API로 전송하는 방법을 알아봅니다.

학습할 내용

  • Speech-to-Text API를 사용 설정하는 방법
  • API 요청 인증 방법
  • Node.js용 Google Cloud 클라이언트 라이브러리를 설치하는 방법
  • 영어로 오디오 파일의 스크립트를 작성하는 방법
  • 단어 타임스탬프가 있는 오디오 파일의 스크립트를 작성하는 방법
  • 다양한 언어로 오디오 파일의 스크립트를 작성하는 방법

필요한 항목

  • Google Cloud Platform 프로젝트
  • 브라우저(Chrome, Firefox 등)
  • JavaScript/Node.js 사용에 관한 지식

설문조사

<ph type="x-smartling-placeholder">

이 튜토리얼을 어떻게 사용하실 계획인가요?

귀하의 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 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID라고 부릅니다.

  1. 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.

이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 새 사용자에게는 $300USD 상당의 무료 체험판 프로그램 참여 자격이 부여됩니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 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

가상 머신은 필요한 모든 개발 도구와 함께 로드됩니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab에서 대부분의 작업은 브라우저나 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. Speech-to-Text API 사용 설정

Speech-to-Text API를 사용하려면 먼저 API를 사용 설정해야 합니다. Cloud Shell에서 다음 명령어를 사용하여 API를 사용 설정할 수 있습니다.

gcloud services enable speech.googleapis.com

4. API 요청 인증

Speech-to-Text API에 요청하려면 서비스 계정을 사용해야 합니다. 서비스 계정은 프로젝트에 속하며 Google 클라이언트 Node.js 라이브러리에서 Speech-to-Text API 요청을 하는 데 사용됩니다. 다른 사용자 계정과 마찬가지로 서비스 계정은 이메일 주소로 표현됩니다. 이 섹션에서는 Cloud SDK를 사용하여 서비스 계정을 만든 후 서비스 계정으로 인증하는 데 필요한 사용자 인증 정보를 만듭니다.

먼저 이 Codelab 전체에서 사용할 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 코드가 새 서비스 계정으로 로그인하는 데 사용할 사용자 인증 정보를 만듭니다. 이러한 사용자 인증 정보를 만들고 다음 명령어를 사용하여 ~/key.json이라는 JSON 파일로 저장합니다.

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

마지막으로 다음 단계에서 다루는 Speech-to-Text API Node.js 라이브러리에서 사용하는 GOOGLE_APPLICATION_CREDENTIALS 환경 변수를 설정하여 사용자 인증 정보를 찾습니다. 다음과 같이 앞에서 만든 사용자 인증 정보 JSON 파일의 전체 경로로 환경 변수를 설정해야 합니다.

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

Speech-to-Text API 인증에 대해 자세히 알아보세요.

5. Node.js용 Google Cloud Speech-to-Text API 클라이언트 라이브러리 설치

먼저 Speech-to-Text API 실습을 실행하는 데 사용할 프로젝트를 만들고 원하는 폴더에서 새로운 Node.js 패키지를 초기화합니다.

npm init

NPM에서 이름 및 버전과 같은 프로젝트 구성에 관한 몇 가지 질문을 합니다. 각 질문에서 ENTER를 눌러 기본 값을 수락합니다. 기본 진입점은 index.js라는 파일입니다.

그런 다음 프로젝트에 Google Cloud Speech 라이브러리를 설치합니다.

npm install --save @google-cloud/speech

Google Cloud용 Node.js 개발을 설정하는 방법에 대한 자세한 내용은 설정 가이드를 참조하세요.

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

1~2분 정도 시간을 내어 코드를 살펴보고 오디오 파일의 스크립트를 작성하는 데 사용되었는지 확인하세요*.*

Encoding 매개변수는 오디오 파일에 사용하는 오디오 인코딩 유형을 API에 알려줍니다. Flac은 .raw 파일의 인코딩 유형입니다 (자세한 내용은 문서 참고).

RecognitionAudio 객체에서 Cloud Storage에 있는 오디오 파일의 URI 또는 오디오 파일의 로컬 파일 경로를 API에 전달할 수 있습니다. 여기서는 Cloud Storage URI를 사용합니다.

프로그램을 실행합니다.

node .

다음과 같은 출력이 표시됩니다.

how old is the Brooklyn Bridge

7. 단어 타임스탬프로 스크립트 작성

Speech-to-Text는 스크립트가 작성된 오디오의 시차 (타임스탬프)를 감지할 수 있습니다. 시차는 제공된 오디오에서 말하는 각 단어의 시작 부분과 끝부분을 표시합니다. 시차 값은 오디오 시작 부분에서 경과된 시간을 100ms 단위로 나타냅니다.

내부의 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
();

1~2분 정도 시간을 내어 코드를 살펴보고 단어 타임스탬프가 있는 오디오 파일의 스크립트를 작성하는 데 코드가 사용되는지 확인해 보세요*.* 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 일반 라이선스에 따라 사용이 허가되었습니다.