1. Présentation
Dans cet atelier de programmation, vous allez apprendre à envoyer un fichier audio via l'API Google Cloud Speech-to-Text, puis à générer la transcription dans un document Google. L'API Speech-to-Text est facile à utiliser et applique de puissants réseaux de neurones pour permettre aux développeurs de convertir l'audio en texte. De plus, il est basé sur le machine learning.
Vous allez utiliser l'API Google Docs pour créer un document et y écrire. Vous allez créer une application Java en ligne de commande et exécuter votre code à l'aide du système de compilation Gradle, puis utiliser l'API Docs pour afficher vos résultats.
Points abordés
- Utiliser l'API Google Cloud Speech-to-Text
- Utiliser l'API Google Docs pour créer un document
- Utiliser l'API Docs pour écrire dans un document
Prérequis
- Java installé (version 7 ou ultérieure)
- Gradle installé (version 5 ou ultérieure)
- Accès à Internet et à un navigateur Web
- Un compte Google
- Un projet Google Cloud Platform.
2. Configurer votre projet
Créer votre projet Cloud
- Connectez-vous à la console Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Workspace, vous devez en créer un.)
Mémorisez l'ID du projet. Il s'agit d'un nom unique permettant de différencier chaque projet Google Cloud (le nom ci-dessus est déjà pris ; vous devez en trouver un autre). Il sera désigné par le nom PROJECT_ID tout au long de cet atelier de programmation.
- Vous devez ensuite activer la facturation dans Cloud Console pour pouvoir utiliser les ressources Google Cloud.
L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Veillez à suivre les instructions de la section "Nettoyer" qui indique comment désactiver les ressources afin d'éviter les frais une fois ce tutoriel terminé. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.
Obtenir une clé de compte de service pour l'API Cloud Speech-to-Text

- Accédez à la console GCP et recherchez votre nouveau projet.
- Créer un compte de service
- Télécharger une clé de compte de service au format JSON
- Définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS pour qu'elle pointe vers le chemin d'accès au fichier JSON contenant votre clé de compte de service. Si vous redémarrez votre session shell, vous devrez définir à nouveau la variable.
$ export GOOGLE_APPLICATION_CREDENTIALS="[PATH]"
Exemple :
$ export GOOGLE_APPLICATION_CREDENTIALS="/home/usr/downloads/ServiceAccount.json"
Obtenir des identifiants pour l'API Docs
- De retour dans la console GCP, accédez à Identifiants.
- Créez une clé OAuth 2.0 et téléchargez-la au format JSON.
- Renommez le fichier
credentials.jsonet assurez-vous qu'il se trouve dans le répertoiresrc/main/resources/de votre code.
Activer les API

- Sélectionnez l'onglet Tableau de bord, cliquez sur le bouton Activer les API et les services, puis activez les deux API suivantes :
- Reconnaissance vocale
- Google Docs

Vous êtes maintenant prêt à commencer à travailler avec votre code.
3. Configurer votre code
Obtenir l'exemple de code
Pour obtenir l'exemple de code, téléchargez le fichier ZIP sur votre ordinateur…
Vous pouvez également cloner le dépôt GitHub à partir de la ligne de commande.
$ git clone git@github.com:googleworkspace/docs-transcript-codelab.git
Vous allez travailler dans le fichier CreateTranscript.java du répertoire start. Les fichiers Gradle ne doivent pas être modifiés.
Dans votre répertoire, accédez au dossier start et ouvrez le fichier CreateTranscript.java. Faites défiler la page jusqu'à la déclaration de la classe CreateTranscript.
public class CreateTranscript {
private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
// Specify audio file name below.
private static final String AUDIO_FILENAME = "audioFile.wav";
private static final String TOKENS_DIRECTORY_PATH = "tokens";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String APPLICATION_NAME = "CreateTranscript";
private static final List<String> SCOPES = Collections.singletonList(DocsScopes.DOCUMENTS);
Pour votre variable SCOPES, vous avez indiqué que votre code pourra afficher et gérer les documents Google Docs de votre utilisateur. Si votre code nécessite une autorisation différente ou plus étendue que cet accès, veillez à ajuster cette variable en conséquence en fonction des champs d'application OAuth 2.0 pour les API Google.
Par exemple, si vous n'écrivez pas dans un document Google Docs, vous pouvez remplacer le champ d'application par DOCUMENTS_READONLY. La variable SCOPES est nécessaire non seulement pour que votre application dispose des autorisations d'accès appropriées, mais aussi pour maintenir la transparence avec les utilisateurs. Les habilitations spécifiques que vous demandez sont affichées sur la page de validation OAuth, où l'utilisateur doit donner son consentement pour utiliser l'application.
Renommer des variables
Assurez-vous que les variables ci-dessus sont correctement déclarées pour votre projet.
- Assurez-vous que AUDIO_FILENAME est défini sur le nom du fichier de démonstration que vous envoyez à l'API Speech-to-Text. Dans votre fichier CreateTranscript.java, il devrait déjà être correctement défini.
- Renommez CREDENTIALS_FILE_PATH en lui donnant le nom du fichier d'identifiants téléchargé (qui doit être "/
credentials.json'"). Assurez-vous que ce fichier se trouve dans le répertoiresrc/main/resourcesde votre dossier. Si le clonage GitHub ne le fait pas pour vous, veillez à créer ce répertoire.
Vous pouvez maintenant commencer à exécuter votre code.
4. Initialiser un client Docs
Dans le fichier CreateTranscript.java, recherchez la déclaration de la méthode principale et jetez un coup d'œil à son contenu :
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Docs service = new Docs.Builder(HTTP_TRANSPORT, JSON_FACTORY,
getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
Autorisation des fonctions
La première tâche que vous effectuez ici consiste à créer la Docs service (variable). Le service représente un client API autorisé, qui contient vos identifiants et, dans ce cas, votre authentification d'utilisateur final.
Dans votre code, toute fonction qui effectue un appel à l'API Docs devra utiliser cette variable service pour effectuer des tâches liées à Docs.
5. Créer un document Google Docs
Vous allez créer un document Google avec un titre spécifique. Copions donc le code ci-dessous dans la fonction createDocument.
Document doc = new Document().setTitle("Transcript for " +
AUDIO_FILENAME);
doc = service.documents().create(doc).execute();
String documentId = doc.getDocumentId();
return documentId;
Cette fonction renvoie l'ID de fichier Drive du document Google Docs. Cet ID se trouve dans l'URL du document.
Ensuite, vous allez initialiser le client Speech-to-Text.
6. Appeler l'API Speech-to-Text
La prochaine tâche que vous souhaitez effectuer dans votre code consiste à obtenir la transcription écrite du fichier audio. Dans CreateTranscript.java, recherchez la fonction getTranscript().
Commencez par obtenir le chemin d'accès et les octets audio du fichier audio :
SpeechClient speech = SpeechClient.create();
Path path = Paths.get(AUDIO_FILENAME);
byte[] data = Files.readAllBytes(path);
ByteString audioBytes = ByteString.copyFrom(data);
Configurer la reconnaissance vocale
Ensuite, vous devez initialiser correctement la variable RecognitionConfig.
Ici, config fournit des informations sur la façon dont votre outil de reconnaissance vocale doit traiter votre demande. Vous devrez modifier setLanguageCode() si, par exemple, votre fichier audio est dans une autre langue que l'anglais, et modifier setSampleRateHertz() si votre fichier audio a un taux d'échantillonnage différent en Hertz (1 600 est optimal).
RecognitionConfig config =
RecognitionConfig.newBuilder()
.setEncoding(AudioEncoding.LINEAR16)
.setLanguageCode("en-US")
.setSampleRateHertz(8000)
.build();
RecognitionAudio audio =
RecognitionAudio.newBuilder().setContent(audioBytes).build();
RecognizeResponse response = speech.recognize(config, audio);
List<SpeechRecognitionResult> results = response.getResultsList();
Préparer le texte
Enfin, gérez la variable result de transcription du fichier audio et préparez-la à être insérée dans un document.
Chaque élément des résultats est une transcription de type SpeechRecognitionAlternatives. Chaque élément contient donc deux parties : une transcription textuelle et le score de confiance correspondant de l'API.
List<Request> requests = new ArrayList<>();
for (SpeechRecognitionResult result : results) {
// Using the first + most likely alternative transcript
SpeechRecognitionAlternative alternative =
result.getAlternativesList().get(0);
String toInsert = alternative.getTranscript();
// Add requests array list to return.
requests.add(
new Request()
.setInsertText(
new InsertTextRequest()
.setText(toInsert)
.setEndOfSegmentLocation(new
EndOfSegmentLocation().setSegmentId(""))));
}
return requests;
7. Insérer du texte dans un document
Vous allez maintenant insérer le texte de la transcription dans le document Google Docs. Pour modifier un document, vous devez utiliser la méthode BatchUpdate. BatchUpdate est un conteneur pour différents types de requêtes d'écriture. Ici, vous utiliserez InsertTextRequest.
EndOfSegmentLocation est un paramètre important qui spécifie l'emplacement dans votre document où vous souhaitez imprimer votre texte. Dans le code source, vous insérez du texte dans le corps de votre document.
Insérons le code ci-dessous dans votre fonction pour voir comment les résultats de l'API Speech-to-Text associés aux appels à l'API Docs peuvent nous permettre d'insérer la transcription d'un fichier audio dans un document Google Docs :
BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();
service.documents().batchUpdate(docId,
body.setRequests(insertRequests)).execute();
Créer la demande
Lorsque vous effectuez la requête BatchUpdate, vous définissez deux spécifications très importantes : ce que vous souhaitez imprimer (.setText()) et l'endroit où vous souhaitez le faire dans votre document (.setIndex(1)).
Vous avez maintenant inséré la transcription de votre fichier audio dans le document que vous avez créé.
8. Exécuter le code
Maintenant que vous disposez de tout le code nécessaire pour récupérer un fichier audio, obtenir sa transcription et l'imprimer dans un document Google Docs nouvellement créé, passons à la pratique !
Étant donné que vous allez exécuter votre code Java à l'aide du système de compilation Gradle, vous devez indiquer à votre fichier build.gradle ce qu'il doit compiler et exécuter. Dans ce projet et d'autres, assurez-vous de conserver le mainClassName en cohérence avec la classe Java que vous souhaitez exécuter.
Parfait ! Vous êtes maintenant prêt à exécuter votre code. Pour ce faire, saisissez la commande suivante dans la ligne de commande :
$ gradle run
Authentification de l'utilisateur final
La première fois que vous exécuterez ce code, une URL s'affichera dans le terminal. Vous serez invité à vous connecter à votre compte de service et à autoriser l'accès à ses documents Google Docs. Une fois l'accès autorisé, un nouveau fichier est stocké dans votre répertoire.
Dans votre répertoire de travail, vous verrez un dossier nouvellement créé intitulé tokens, contenant un fichier StoredCredential. Il s'agit du jeton d'authentification que vous venez de fournir, que votre client a demandé au serveur d'authentification Google, extrait de sa réponse et qu'il va maintenant envoyer à toute API que vous appelez.
Solution
Si votre code ne fonctionne pas, examinez le fichier CreateTranscript.java dans le dossier finish. Ce fichier contient l'intégralité de votre code, exactement comme il doit être pour s'exécuter correctement.
Examinons maintenant le résultat.
9. Afficher les résultats
Vous venez de créer un document Google contenant la transcription de votre fichier audio. Examinons-le.
Ce document a été créé avec le compte avec lequel l'utilisateur final a fourni l'autorisation. Vous pouvez, par exemple, partager automatiquement ce document avec d'autres utilisateurs à l'aide de l'API Drive.
Voici ce que vous devriez voir en utilisant votre code source et le fichier audio fourni :

10. Félicitations !
Vous avez appris à créer un document Google Docs, à appeler l'API Speech-to-Text et à insérer la transcription de votre fichier audio dans le document créé.
Améliorations possibles
Voici quelques idées pour réaliser une intégration plus réussie :
- Configurez votre code pour qu'il écoute lorsqu'un fichier audio a été ajouté à votre bucket Google Cloud Storage Drive, et déclenchez une fonction Google Cloud pour exécuter ce code.
- Insérer du texte dans un document Google Docs non vide
En savoir plus
- Consultez la documentation pour les développeurs concernant l'API Google Docs.
- Publiez vos questions et trouvez des réponses sur Stack Overflow à l'aide du tag google-docs-api.