Agregar metadatos de reconocimiento

En esta página, se describe cómo agregar detalles adicionales sobre el audio de origen incluido en una solicitud de reconocimiento de voz a Speech-to-Text.

Speech-to-Text tiene varios modelos de aprendizaje automático para convertir un audio grabado en texto. Cada uno de estos modelos ha sido entrenado en función de las características específicas de la entrada de audio, incluido el tipo de archivo de audio, el dispositivo de grabación original, la distancia del interlocutor al dispositivo de grabación, el número de interlocutores en el archivo de audio y otros factores.

Cuando envías una solicitud de transcripción a Speech-to-Text, puedes incluir estos detalles adicionales sobre los datos de audio como metadatos de reconocimiento que envías. En Speech-to-Text, se pueden usar estos detalles para transcribir con mayor exactitud tus datos de audio.

En Google, también se analizan y agregan los casos prácticos más comunes de Speech-to-Text mediante la recopilación de estos metadatos. Así, en Google, se puede dar prioridad a los casos prácticos más importantes para mejorar Speech-to-Text.

Campos de metadatos disponibles

Puedes proporcionar cualquiera de los campos de la lista siguiente en los metadatos de una solicitud de transcripción.

Campo Tipo Descripción
interactionType ENUM Caso práctico del audio.
industryNaicsCodeOfAudio número Sector vertical de la industria del archivo de audio, como un código NAICS de 6 dígitos.
microphoneDistance ENUM Distancia del micrófono al interlocutor.
originalMediaType ENUM Medio original del audio, ya sea audio o video.
recordingDeviceType ENUM Tipo de dispositivo usado para capturar el audio, incluidos smartphones, micrófonos de computadora de escritorio, vehículos, etcétera.
recordingDeviceName string Dispositivo usado para hacer la grabación. Esta string arbitraria puede incluir nombres como "Píxel XL", "VoIP", "Micrófono cardioide", etcétera.
originalMimeType string Tipo MIME del archivo de audio original. Por ejemplo, audio/m4a, audio/x-alaw-basic, audio/mp3 y audio/3gpp, así como otros tipos MIME de archivo de audio.
obfuscatedId string ID del usuario, con privacidad protegida, para identificar el número de usuarios únicos que usan el servicio.
audioTopic string Descripción arbitraria de la cuestión analizada en el archivo de audio. Por ejemplo, "Visita guiada de la Ciudad de Nueva York", "audiencia en tribunal de primera instancia", o "entrevista en vivo entre 2 personas".

Consulta la documentación de referencia de RecognitionMetadata para obtener más información sobre estos campos.

Habilita los metadatos de reconocimiento

Para agregar metadatos de reconocimiento a una solicitud de reconocimiento de voz a la API de Speech-to-Text, configura el campo metadata de la solicitud de reconocimiento de voz en un objeto RecognitionMetadata. La API de Speech-to-Text admite metadatos de reconocimiento para todos los métodos de reconocimiento de voz: speech:recognize speech:longrunningrecognize y Transmisión continua. Consulta la documentación de referencia de RecognitionMetadata para obtener más información sobre los tipos de metadatos que puedes incluir en tu solicitud.

El siguiente código demuestra cómo especificar campos de metadatos adicionales en una solicitud de transcripción.

Protocolo

Consulta el extremo de la API de speech:recognize para obtener los detalles completos.

Para realizar un reconocimiento de voz síncrono, haz una solicitud POST y proporciona el cuerpo de la solicitud apropiado. A continuación, se muestra un ejemplo de una solicitud POST con curl. En el ejemplo, se usa el token de acceso correspondiente a la configuración de una cuenta de servicio para el proyecto con Google Cloud CLI. Si deseas obtener instrucciones para instalar la CLI de gcloud, configurar un proyecto con una cuenta de servicio y conseguir un token de acceso, consulta la guía de inicio rápido.

curl -s -H "Content-Type: application/json" \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    https://speech.googleapis.com/v1p1beta1/speech:recognize \
    --data '{
    "config": {
        "encoding": "FLAC",
        "sampleRateHertz": 16000,
        "languageCode": "en-US",
        "enableWordTimeOffsets":  false,
        "metadata": {
            "interactionType": "VOICE_SEARCH",
            "industryNaicsCodeOfAudio": 23810,
            "microphoneDistance": "NEARFIELD",
            "originalMediaType": "AUDIO",
            "recordingDeviceType": "OTHER_INDOOR_DEVICE",
            "recordingDeviceName": "Polycom SoundStation IP 6000",
            "originalMimeType": "audio/mp3",
            "obfuscatedId": "11235813",
            "audioTopic": "questions about landmarks in NYC"
        }
    },
    "audio": {
        "uri":"gs://cloud-samples-tests/speech/brooklyn.flac"
    }
}

Consulta la documentación de referencia de RecognitionConfig para obtener más información sobre la configuración del cuerpo de la solicitud.

Si la solicitud se completa correctamente, el servidor muestra un código de estado HTTP 200 OK y la respuesta en formato JSON:

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "how old is the Brooklyn Bridge",
          "confidence": 0.98360395
        }
      ]
    }
  ]
}

Node.js

// Imports the Google Cloud client library for Beta API
/**
 * TODO(developer): Update client library import to use new
 * version of API when desired features become available
 */
const speech = require('@google-cloud/speech').v1p1beta1;
const fs = require('fs');

// Creates a client
const client = new speech.SpeechClient();

async function syncRecognizeWithMetaData() {
  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const filename = 'Local path to audio file, e.g. /path/to/audio.raw';
  // const encoding = 'Encoding of the audio file, e.g. LINEAR16';
  // const sampleRateHertz = 16000;
  // const languageCode = 'BCP-47 language code, e.g. en-US';

  const recognitionMetadata = {
    interactionType: 'DISCUSSION',
    microphoneDistance: 'NEARFIELD',
    recordingDeviceType: 'SMARTPHONE',
    recordingDeviceName: 'Pixel 2 XL',
    industryNaicsCodeOfAudio: 519190,
  };

  const config = {
    encoding: encoding,
    sampleRateHertz: sampleRateHertz,
    languageCode: languageCode,
    metadata: recognitionMetadata,
  };

  const audio = {
    content: fs.readFileSync(filename).toString('base64'),
  };

  const request = {
    config: config,
    audio: audio,
  };

  // Detects speech in the audio file
  const [response] = await client.recognize(request);
  response.results.forEach(result => {
    const alternative = result.alternatives[0];
    console.log(alternative.transcript);
  });

Python

from google.cloud import speech_v1p1beta1 as speech

client = speech.SpeechClient()

speech_file = "resources/commercial_mono.wav"

with io.open(speech_file, "rb") as audio_file:
    content = audio_file.read()

# Here we construct a recognition metadata object.
# Most metadata fields are specified as enums that can be found
# in speech.enums.RecognitionMetadata
metadata = speech.RecognitionMetadata()
metadata.interaction_type = speech.RecognitionMetadata.InteractionType.DISCUSSION
metadata.microphone_distance = (
    speech.RecognitionMetadata.MicrophoneDistance.NEARFIELD
)
metadata.recording_device_type = (
    speech.RecognitionMetadata.RecordingDeviceType.SMARTPHONE
)

# Some metadata fields are free form strings
metadata.recording_device_name = "Pixel 2 XL"
# And some are integers, for instance the 6 digit NAICS code
# https://www.naics.com/search/
metadata.industry_naics_code_of_audio = 519190

audio = speech.RecognitionAudio(content=content)
config = speech.RecognitionConfig(
    encoding=speech.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=8000,
    language_code="en-US",
    # Add this in the request to send metadata.
    metadata=metadata,
)

response = client.recognize(config=config, audio=audio)

for i, result in enumerate(response.results):
    alternative = result.alternatives[0]
    print("-" * 20)
    print(u"First alternative of result {}".format(i))
    print(u"Transcript: {}".format(alternative.transcript))