Maison >Périphériques technologiques >IA >Comment convertir la parole en texte à l'aide de Node.js
Traducteur | Li Rui
Reviewer | Sun Shujuan
Cet article fournira un bref aperçu de la technologie de reconnaissance vocale et de ses applications courantes, et démontrera une API parole-texte gratuite qui peut être utilisée pour transcrire l'audio en MP3 et WAV. formats de fichiers. Cette démo comprendra des instructions étape par étape pour appeler cette API à l'aide de l'exemple « Exécuter le code Node.js ».
Les gens pensent souvent à la technologie de reconnaissance vocale comme un ajout relativement nouveau au paysage technologique contemporain, et ce n'est qu'une partie de la vérité. La technologie de reconnaissance vocale existe depuis plus d’un demi-siècle, à commencer par les systèmes de reconnaissance de nombres/textes aux fonctions limitées développés par quelques entreprises pionnières au début des années 1950. Bien que la technologie de reconnaissance vocale ait une longue histoire et ait été largement utilisée dans les appareils grand public intelligents au cours de la dernière décennie, la reconnaissance vocale reste aujourd’hui l’une des technologies les plus abstraites du marché. En effet, diverses technologies de reconnaissance vocale couvrent des domaines tels que l'informatique, la linguistique informatique et les mathématiques/statistiques, et nécessitent de grandes quantités d'entrées dans chaque domaine pour obtenir des résultats précis de conversion parole-texte.
À un (très) haut niveau, pour que la technologie de reconnaissance vocale puisse accomplir ses tâches les plus élémentaires, un fichier audio donné doit d'abord être prétraité pour optimiser sa qualité. Celui-ci est ensuite décomposé en signaux composants plus petits et triés. Ces signaux triés doivent être suffisamment petits pour qu'un modèle mathématique puisse les faire correspondre à certains phonèmes (sons spécifiques à la langue qui se combinent pour créer un mot ; comme le bruit « eeee » ou « ahhh »), ce qui permet de faire correspondre ces expressions ou phrases dans les langues sont comparées. En fin de compte, l’objectif d’un service de reconnaissance vocale est simple : deviner aussi précisément que possible quels mots ont été utilisés dans l’audio enregistré, et améliorer et élargir continuellement sa base de données linguistiques jusqu’à ce que les suppositions atteignent un niveau de précision acceptable.
Ce système de recherche d'informations complexe et intrinsèquement limité rend même les services de reconnaissance vocale les plus élémentaires dépendants de la langue et du dialecte, car ils dépendent de la qualité audio. Les variations de langue, d’accent, de vocabulaire et la présence de bruit de fond créent toutes des limites difficiles à surmonter pour un modèle unique de synthèse vocale. En outre, cette complexité reflète le fait fondamental que les services de reconnaissance vocale sont très gourmands en ressources, s'appuyant sur des ensembles de données de référence volumineux et croissants pour la comparaison vocale, nécessitant une puissance de calcul considérable pour utiliser efficacement ces ensembles de données. Ensemble, ces facteurs font de la formation d’un nouveau modèle de synthèse vocale une tâche ardue.
La reconnaissance vocale a émergé en grande partie grâce à certaines innovations omniprésentes sur le marché technologique plus vaste, en particulier la croissance des solutions de stockage de données quasi infinies dans le cloud computing, qui sont devenues un service grand public efficace et utile que les gens reconnaissent désormais. dans leur vie quotidienne. Les gens peuvent communiquer et tenir des conversations directement à l'aide de téléphones mobiles, de lignes fixes et d'appareils de bureau pour rechercher automatiquement les informations dont ils ont besoin, enregistrer et organiser leurs pensées pour une utilisation ultérieure, entendre des messages texte lus à haute voix, et bien plus encore.
Actuellement, les applications grand public ne sont que la pointe de l'iceberg des applications technologiques de reconnaissance vocale. Les progrès dans les nombreux processus interdépendants de reconnaissance vocale créent des opportunités pour étendre la production de transcription audio et encouragent un nombre croissant d'applications commerciales pour la conversion parole en texte. Il existe de nombreux exemples de ce type autour des personnes. De nombreuses plateformes de réunion virtuelle utilisent désormais des services de reconnaissance vocale pour transcrire les présentations d'équipe (souvent en temps réel), et le texte obtenu peut être facilement stocké pour toute personne ayant pu manquer la réunion. Les chatbots utilisent la reconnaissance vocale pour aider les gens à faire des choix sur leur téléphone, et l'audio transcrit de ces conversations peut être utilisé pour autre chose : éclairer de meilleures pratiques de service client à l'avenir. Les conférences, entretiens, présentations et autres allocutions auxquels les gens peuvent assister peuvent être enregistrés et transcrits via des appareils personnels pour éliminer le travail de transcription manuelle des notes. Par exemple, ces transcriptions peuvent être traitées via des modèles de traitement du langage naturel (NLP) pour trouver des informations inédites (ou inédites) à partir du texte transcrit.
Il convient de mentionner que des fonctionnalités utiles de modération de contenu et de référencement sont également disponibles auprès du service évolutif d'analyse de la parole en texte, cette fois dans un environnement de stockage de données d'entreprise. Compte tenu du manque de fiabilité du contenu téléchargé par la plupart des clients, la transcription automatique des fichiers audio téléchargés sur le site Web pourrait facilement ajuster la langue du fichier audio parent afin de garantir sa sécurité pour tous les auditeurs (par exemple pour voir s'il contient un langage très controversé, un discours de haine ou toute forme de harcèlement d’un individu ou d’un groupe). Cela réduit considérablement la charge de travail des réviseurs de contenu et augmente leur efficacité. Ces mêmes fichiers de transcription peuvent également être utilisés pour générer des mots-clés utiles, facilitant ainsi la recherche et la récupération des fichiers audio à partir de grandes bases de données.
Une façon d'exploiter la reconnaissance vocale en tant que service consiste à inclure l'API Cloudmersive Speech to Text. L'API prend actuellement en charge les formats MP3 ou WAV et utilise un modèle d'intelligence artificielle d'apprentissage profond pour fournir une transcription audio de haute précision. Ses paramètres API sont très simples, ne nécessitant qu'un fichier audio et une clé API Cloudmersive (la clé API peut être obtenue en créant un compte gratuit sur son site Web, qui génère jusqu'à 800 appels API par mois). Ce qui suit montre comment créer des appels d'API à l'aide d'extraits de code Node.js complémentaires.
La première étape consiste à installer le SDK Node.js. Cela peut être fait en exécutant la commande suivante :
<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">npm</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">install</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">cloudmersive</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">-</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">speech</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">-</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">api</span><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">-</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">client</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">--</span><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">save</span>
Alternativement, cet extrait peut être ajouté à son package.
<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"dependencies"</span>: {<br><span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"cloudmersive-speech-client"</span>: <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"^1.1.5"</span><br>}
Une fois l'installation terminée, vous pouvez utiliser le bloc de code suivant pour créer des appels API. À ce stade, vous devez vous assurer que vous disposez des paramètres suivants :
(1) Fichier audio MP3 ou WAV.
(2) Clé API CloudMersive.
<span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">CloudmersiveSpeechApiClient</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">require</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'cloudmersive-speech-api-client'</span>);<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">defaultClient</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">CloudmersiveSpeechApiClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">ApiClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">instance</span>;<br><span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">// Configure API key authorization: Apikey</span><br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Apikey</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">defaultClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">authentications</span>[<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'Apikey'</span>];<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Apikey</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">apiKey</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'YOUR API KEY'</span>;<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">apiInstance</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">new</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">CloudmersiveSpeechApiClient</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">RecognizeApi</span>();<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">speechFile</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">Buffer</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">from</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">fs</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">readFileSync</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">"C:\temp\inputfile"</span>).<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">buffer</span>); <span style="color: rgb(106, 115, 125); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">// File | Speech file to perform the operation on.Common file formats such as WAV, MP3 are supported.</span><br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">var</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">callback</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">=</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">function</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>, <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">response</span>) {<br><span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">if</span> (<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>) {<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">console</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>(<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">error</span>);<br>} <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">else</span> {<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">console</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">log</span>(<span style="color: rgb(102, 153, 0); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">'API called successfully. Returned data: '</span> <span style="color: rgb(215, 58, 73); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">+</span> <span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">data</span>);<br>}<br>};<br><span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">apiInstance</span>.<span style="color: rgb(0, 92, 197); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">recognizeFile</span>(<span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">speechFile</span>, <span style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">callback</span>);
Cela termine la construction de l'API sans autres extraits de code. Un appel API réussi renverra une chaîne Textresult contenant les résultats de la transcription API. Il est important de se rappeler que la qualité audio du fichier d'entrée aura un impact significatif sur la capacité de l'API à créer des transcriptions précises. Il est donc recommandé de prétraiter et d'optimiser autant que possible la qualité audio avant de mettre en œuvre cette opération.
Titre original : Comment exploiter la synthèse vocale avec Node.js, auteur : Brian O'Neill
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!