이 Codelab 정보
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 클라이언트 라이브러리를 설치하는 방법
- 영어로 오디오 파일의 스크립트를 작성하는 방법
- 단어 타임스탬프가 있는 오디오 파일의 스크립트를 작성하는 방법
- 다양한 언어로 오디오 파일의 스크립트를 작성하는 방법
필요한 항목
설문조사
이 튜토리얼을 어떻게 사용하실 계획인가요?
귀하의 Node.js 사용 경험을 평가해 주세요.
귀하의 Google Cloud Platform 서비스 사용 경험을 평가해 주세요.
2. 설정 및 요구사항
자습형 환경 설정
- Cloud Console에 로그인하고 새 프로젝트를 만들거나 기존 프로젝트를 다시 사용합니다. (Gmail 또는 G Suite 계정이 없으면 만들어야 합니다.)
모든 Google Cloud 프로젝트에서 고유한 이름인 프로젝트 ID를 기억하세요(위의 이름은 이미 사용되었으므로 사용할 수 없습니다). 이 ID는 나중에 이 Codelab에서 PROJECT_ID
라고 부릅니다.
- 그런 후 Google Cloud 리소스를 사용할 수 있도록 Cloud Console에서 결제를 사용 설정해야 합니다.
이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 가이드를 마친 후 비용이 결제되지 않도록 리소스 종료 방법을 알려주는 '삭제' 섹션의 안내를 따르세요. Google Cloud 새 사용자에게는 $300USD 상당의 무료 체험판 프로그램 참여 자격이 부여됩니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
Cloud Shell 활성화
- Cloud Console에서 Cloud Shell 활성화
를 클릭합니다.
이전에 Cloud Shell을 시작하지 않았으면 설명이 포함된 중간 화면(스크롤해야 볼 수 있는 부분)이 제공됩니다. 이 경우 계속을 클릭합니다(이후 다시 표시되지 않음). 이 일회성 화면은 다음과 같습니다.
Cloud Shell을 프로비저닝하고 연결하는 데 몇 분 정도만 걸립니다.
가상 머신은 필요한 모든 개발 도구와 함께 로드됩니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab에서 대부분의 작업은 브라우저나 Chromebook만 사용하여 수행할 수 있습니다.
Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 해당 프로젝트 ID로 이미 설정된 것을 볼 수 있습니다.
- 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 콘솔로 이동합니다.
- 종료할 프로젝트를 선택한 후 '삭제'를 클릭하세요. 상단: 프로젝트 삭제가 예약됩니다.
자세히 알아보기
- Google Cloud Speech-to-Text API: https://cloud.google.com/speech-to-text/docs
- Google Cloud Platform의 Node.js: https://cloud.google.com/nodejs/
- Google Cloud Node.js 클라이언트: https://googlecloudplatform.github.io/google-cloud-node/
라이선스
이 작업물은 Creative Commons Attribution 2.0 일반 라이선스에 따라 사용이 허가되었습니다.