Como usar a API Speech-to-Text com Node.js

Como usar a API Speech-to-Text com Node.js

Sobre este codelab

subjectÚltimo dez. 15, 2022 atualizado
account_circleEscrito por Anu Srivastava

1. Visão geral

Com a API Cloud Speech-to-Text, os desenvolvedores convertem áudio em texto em 120 idiomas e variantes ao aplicar modelos de rede neural avançados em uma API fácil de usar.

Neste codelab, você vai se concentrar no uso da API Speech-to-Text com Node.js. Você vai aprender a enviar um arquivo de áudio em inglês e outros idiomas à API Cloud Speech-to-Text para transcrição.

O que você vai aprender

  • Como ativar a API Speech-to-Text
  • Como autenticar solicitações de API
  • Como instalar a biblioteca de cliente do Google Cloud para Node.js
  • Como transcrever arquivos de áudio em inglês
  • Como transcrever arquivos de áudio com carimbos de data/hora de palavras
  • Como transcrever arquivos de áudio em diferentes idiomas

O que é necessário

  • Um projeto do Google Cloud Platform
  • Um navegador, como o Chrome ou o Firefox
  • Familiaridade com JavaScript/Node.js

Pesquisa

Como você vai usar este tutorial?

Como você classificaria sua experiência com o Node.js?

Como você classificaria sua experiência com o uso dos serviços do Google Cloud Platform?

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. Faça login no Console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma se você ainda não tiver uma conta do Gmail ou do G Suite.

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID.

  1. Em seguida, será necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.

A execução deste codelab não será muito cara, se for o caso. Siga todas as instruções na seção "Limpeza", que orienta você sobre como encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de avaliação gratuita de US$ 300.

Inicie o Cloud Shell

Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

Ativar o Cloud Shell

  1. No Console do Cloud, clique em Ativar o Cloud ShellH7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Se você nunca tiver iniciado o Cloud Shell, verá uma tela intermediária (abaixo da dobra) com a descrição do que ele é. Se esse for o caso, clique em Continuar e você não o verá novamente. Esta é uma tela única:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Praticamente todo o seu trabalho neste codelab pode ser feito em um navegador ou no seu Chromebook.

Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto já estará configurado com seu ID do projeto.

  1. Execute o seguinte comando no Cloud Shell para confirmar que você está autenticado:
gcloud auth list

Resposta ao comando

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

Resposta ao comando

[core]
project = <PROJECT_ID>

Se o projeto não estiver configurado, configure-o usando este comando:

gcloud config set project <PROJECT_ID>

Resposta ao comando

Updated property [core/project].

3. Ativar a API Speech-to-Text

Antes de começar a usar a API Speech-to-Text, você precisa ativá-la. É possível ativar a API usando o seguinte comando no Cloud Shell:

gcloud services enable speech.googleapis.com

4. Autenticar as solicitações de API

Para fazer solicitações à API Speech-to-Text, você precisa usar uma conta de serviço. Uma conta de serviço pertence ao seu projeto e é usada pela biblioteca Node.js do cliente do Google para fazer solicitações da API Speech-to-Text. Como qualquer outra conta de usuário, uma conta de serviço é representada por um endereço de e-mail. Nesta seção, você vai usar o SDK Cloud para criar uma conta de serviço e, em seguida, criar as credenciais necessárias para autenticar como a conta de serviço.

Primeiro, defina uma variável de ambiente com seu PROJECT_ID para usar neste codelab. Se você estiver usando o Cloud Shell, ela será definida automaticamente:

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

Em seguida, crie uma nova conta de serviço para acessar a API Speech-to-Text usando:

gcloud iam service-accounts create my-speech-to-text-sa \
 
--display-name "my speech-to-text codelab service account"

Em seguida, crie credenciais que o código Node.js usará para fazer login como a nova conta de serviço. Crie essas credenciais e salve-as como um arquivo JSON ~/key.json usando o seguinte comando:

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

Por fim, defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS, que é usada pela biblioteca Node.js da API Speech-to-Text, abordada na próxima etapa, para encontrar suas credenciais. A variável de ambiente deve ser definida para o caminho completo do arquivo JSON de credenciais que você criou. Para isso, use:

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

Leia mais sobre como autenticar a API Speech-to-Text.

5. Instalar a biblioteca de cliente da API Cloud Speech-to-Text para Node.js

Primeiro, crie um projeto que você vai usar para executar este laboratório da API Speech-to-Text e inicialize um novo pacote Node.js em uma pasta de sua escolha:

npm init

O NPM faz várias perguntas sobre a configuração do projeto, como nome e versão. Para cada pergunta, pressione ENTER para aceitar os valores padrão. O ponto de entrada padrão é um arquivo chamado index.js.

Em seguida, instale a biblioteca do Google Cloud Speech no projeto:

npm install --save @google-cloud/speech

Para mais instruções sobre como configurar um desenvolvimento em Node.js para o Google Cloud, consulte o Guia de configuração.

Agora, está tudo pronto para você usar a API Speech-to-Text.

6. Transcrever arquivos de áudio

Nesta seção, você vai transcrever um arquivo de áudio pré-gravado em inglês. O arquivo de áudio está disponível no Google Cloud Storage.

Navegue até o arquivo index.js dentro do e substitua o código pelo seguinte:

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

Reserve alguns minutos para estudar o código e ver que ele é usado para transcrever um arquivo de áudio*.*

O parâmetro Encoding informa à API o tipo de codificação de áudio que você está usando para o arquivo de áudio. Flac é o tipo de codificação usada com os arquivos .raw. Para mais detalhes, consulte o documento sobre o tipo de codificação.

No objeto RecognitionAudio, é possível transmitir à API o URI do arquivo de áudio no Cloud Storage ou o caminho do arquivo local. Estamos usando um URI do Cloud Storage.

Execute o programa:

node .

Você verá esta resposta:

how old is the Brooklyn Bridge

7. Transcrever com carimbos de data/hora de palavras

A Speech-to-Text pode detectar ajustes de horário (carimbo de data/hora) para o áudio transcrito. Os ajustes de horário mostram o início e o fim de cada palavra falada no áudio fornecido. Um valor de ajuste de horário representa a quantidade de tempo decorrido desde o início do áudio, em incrementos de 100 ms.

Navegue até o arquivo index.js dentro do e substitua o código pelo seguinte:

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

Reserve alguns minutos para estudar o código e conferir que ele é usado para transcrever um arquivo de áudio com marcações de tempo de palavras*.* O parâmetro EnableWordTimeOffsets instrui a API a ativar os ajustes de horário. Consulte o documento para mais detalhes.

Execute o programa novamente:

node .

Você verá esta resposta:

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. Transcrever idiomas diferentes

A API Speech-to-Text oferece suporte à transcrição em mais de 100 idiomas. Confira uma lista de idiomas compatíveis neste link.

Nesta seção, você vai transcrever um arquivo de áudio pré-gravado em francês. O arquivo de áudio está disponível no Google Cloud Storage.

Navegue até o arquivo index.js dentro do e substitua o código pelo seguinte:

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

Execute o programa novamente. A saída a seguir será exibida:

maître corbeau sur un arbre perché tenait en son bec un fromage

Essa é uma frase de um famoso conto infantil francês.

Para conferir a lista completa de idiomas compatíveis e códigos de idioma, consulte a documentação aqui.

9. Parabéns!

Você aprendeu a usar a API Speech-to-Text com Node.js para realizar diferentes tipos de transcrição em arquivos de áudio.

Limpar

Para evitar a cobrança na sua conta do Google Cloud Platform pelo uso de recursos neste guia de início rápido, siga estas etapas:

  • Acesse o console do Cloud Platform.
  • Selecione o projeto que você quer encerrar e clique em "Excluir". Na parte superior: isso programa a exclusão do projeto.

Saiba mais

Licença

Este conteúdo está sob a licença Atribuição 2.0 Genérica da Creative Commons.