Chatbot fait entendre ou souffre amateur



Il n'y a pas si longtemps, j'ai présenté un bot de discussion syntaxique nommé Vanya Razumny ( «Création de l'IA en utilisant la méthode glock cuzdra. Intelligent Odyssey» ). La prochaine étape évidente, que, comme d'autres créateurs d'intelligence artificielle, je voulais traverser - pour donner une voix à l'idée originale. Cela semblerait plus facile?

Cependant, j'ai dû souffrir. Il n'a pas été possible de résoudre certains problèmes, certainement en raison de l'amateurisme. Cependant, je doute que les professionnels soient intéressés à résoudre des problèmes connexes. Ce n'est intéressant pour personne, donc je ne voulais pas. J'espérais rapidement fixer le son et passer aux idées suivantes ...

Mais tout d'abord.

(J'écris dans l'espoir que mes souffrances dans le domaine du doublage aideront quelqu'un de mon genre d'amants. Ce billet est inutile pour le meilleur bison).

Il est clair que la tâche de notation est divisée en deux sections indépendantes:

  1. Synthèse de texte
  2. Reconnaissance vocale.

Je prends le premier point, comme le plus simple. Immédiatement, je tombe sur un code pour les débutants, juste quelques lignes.

Synthèse vocale prédéfinie
using System.Speech.Synthesis; public static void getSpeech(string text) { SpeechSynthesizer speaker = new SpeechSynthesizer(); speaker.SetOutputToDefaultAudioDevice(); string selectedVoice = Properties.Settings.Default.Voice; speaker.SelectVoice("Microsoft Irina Desktop"); speaker.Rate = 1; speaker.Volume = 100; speaker.Speak(text); speaker.Dispose(); } 


Je l'ai mis à la source, et imaginez, dit la voiture! Je suis un peu submergé de joie. Si facile? !!!

Cela n'a pas de sens: attacher une voix masculine. Malheureusement, une voix russe est préinstallée dans Windows - femelle: "Microsoft Irina Desktop". Et j'ai un chatbot boy, pas une fille, je n'ai pas l'intention de lui faire une opération pour changer de sexe.

Google à nouveau, après un certain temps, je suis convaincu qu'il y a peu de voix masculines russes. Cela fait référence aux votes gratuits, car les services payants ne sont pas pour mes romances de finance de chant. Mais il y a, il y a aussi des voix masculines libres, par exemple, la voix "Alexander" de la bibliothèque nationale RHVoice. Eh bien, que ce soit Alexander.

Malheureusement, l'installation (pour moi) est en quelque sorte compliquée. Mais il y a des assemblages prêts à l'emploi. Je télécharge l'un des assemblages, l'installe, monte dans les paramètres Windows (reconnaissance vocale / synthèse vocale) et - voilà! - Je trouve la voix de «Aleksandr» à côté de «Microsoft Irina Desktop». Avec haleine je lance ...

Tout fonctionne sous Windows!

Je vais remplacer Microsoft Irina Desktop par Aleksandr dans la source et ... Pas une fichue chose ne fonctionne déjà! Triste mais pas mortel. Nous allons le réparer maintenant.

J'étudie le projet RHVoice, en particulier la description du fichier de configuration, j'expérimente de cette façon et que ... Le résultat est le même: au lieu des sons, Alexander fait un grognement inintelligible ou rien du tout, malgré le fait que Microsoft Irina se lit comme un annonceur à la télévision.

Après quelques jours, j'espère encore quelque chose et je déconne, mais j'abandonne. Oui, mes mains sont tordues. Eh bien, je ne sais pas pourquoi Aleksandr refuse de parler, je ne sais pas, et je ne trouve pas de réponse sur les forums.

D'accord, j'étudie d'autres voix libres, l'avantage n'est pas supérieur à une douzaine.

Ensuite, il m'apparaît que si je veux que les utilisateurs de Vanya le raisonnable entendent la même voix que j'entends, alors un installateur de voix devra être installé dans le package. C'est au-delà de mon pouvoir, et je suis réticent à m'y engager, donc le premier paragraphe, «Synthèse du texte en discours», se termine par une reddition honteuse.

Je prends une décision de principe:

  1. Allons en enfer avec un chien! Laissez les utilisateurs du chatbot installer eux-mêmes les voix qu'ils souhaitent et choisissez dans la liste. Joindre une liste de votes prédéfinis est une tâche réalisable.
  2. J'exprime Vanya Raisonnable d'une voix féminine, car Vanya est jeune et sa voix n'est pas encore cassée. "Et ce n'est pas du tout parce que mes mains sortent de mon cul", me persuade-je par la psychothérapie.

Avec un cœur pur, je passe au point 2: la reconnaissance vocale.

Le deuxième point est décisif. Qui a besoin d'un chat bot capable de reproduire ses propres phrases en voix, mais qui ne comprend pas la voix de l'interlocuteur?! En cas d'échec, l'entreprise de doublage s'effondre.

Googler à nouveau, cette fois frénétique, dans le dernier souffle.

Que révèle-t-on? Les options sont pour la plupart payantes: il y en a gratuitement, mais il n'y en a que quelques-unes pour la langue russe.

Le Yandex SpeechKit apparaît comme le plus simple du réseau, mais je l'enregistrerai pour plus tard si les options plus complexes ne fonctionnent pas. Je préfère obtenir une reconnaissance hors ligne.

Voici une solution entièrement gratuite de CMUSphinx. J'étudie les revues:

  • tout d'abord, il n'y a pas d'exclamations scandaleuses: frères, tout fonctionne!
  • deuxièmement, la description de l'installation est complètement absurde pour moi. Il semble qu'après l'installation, la bibliothèque doit également être formée!

Tomber.

Ensuite. Microsoft Speech Platform, gratuit.

Je google et trouve un lien avec une description accessible plus le code source de l'exemple. Téléchargez la source, compilez. Je dis «un, deux» et le programme diffuse le texte reconnu. Slave-o-otayet! ..

Un peu déroutant est le fait que le texte n'est pas reconnu par lui-même, mais il doit d'abord être ajouté au dictionnaire. Mais ce n'est pas effrayant: au lieu de "un, deux", je vais joindre un volumineux fichier avec l'orthographe.

Je transfère le code du code source de l'exemple vers mes sources, j'essaye d'obtenir le même effet ... Il ne compile pas, il tombe dans la récupération.

Ensuite, j'ai lu les commentaires avec mon œil gauche et je trouve que la solution convient à la reconnaissance des commandes, mais ne permet pas de travailler avec du texte continu. Je vérifie selon l'exemple d'origine. Oui, "un, deux" reconnaît, et "un, deux, trois" n'est pas complètement: il n'entend pas les trois. Je trouve dans les commentaires quelque chose comme: «Le texte continu est reconnu pour une redevance», et la plate-forme Microsoft Speech cesse d'exister pour moi.

J'ai entendu dire que Google fournit son identifiant gratuitement pendant un an, je devrais vérifier.

Je vérifie. Pas plus, pour autant que je puisse en juger.



Je n’exclus pas que j’ai fait une recherche incorrecte sur Google, mais ne me blâmez pas: je partage avec mes débutants l’expérience personnelle que j’ai acquise.

Je vais abandonner Yandex. Voici les exclamations "Frères, tout fonctionne!" assez, et les particuliers, sur demande individuelle, peuvent obtenir le service gratuitement, j'ai vu l'annonce de mes propres yeux. Je peux me connecter à SpeechKit par API, des instructions sont disponibles.

Je viens de renoncer et que vois-je? La société vient de présenter Yandex.Cloud, où elle a déplacé le service de technologie vocale. Je ne suis pas fier, je vais m'inscrire dans le Cloud: probablement tout est le même qu'avant ...

Et ici, une terrible déception m'attend:

  1. Premièrement, vous ne pouvez pas entendre parler de l'utilisation gratuite du module de reconnaissance. Certes, ils accordent une subvention avec laquelle vous pouvez payer le service pendant un certain temps. D'accord, je continue de m'inscrire ...
  2. Et c'est quoi cette affaire?! Pour travailler avec le service, ils me demandent d'indiquer les détails d'une carte bancaire. Extrait d'une lettre qui m'a été envoyée en tant que créateur du profil dans le Cloud:



Quelque part, je l'ai vu: à mon avis, sur Google. Par conséquent, Yandex a pris l'exemple d'un ami senior.

Je suis surpris par l'absence de messages indignés sur Habré. Eh bien, ils n'ont pas seulement besoin d'argent pour les services, mais demandent la clé de l'appartement où se trouve l'argent! Cela me rend furieux de toute façon que depuis un certain temps maintenant, la banque ne puisse pas donner mon propre argent selon la décision du directeur de la banque, et ici le deuxième oncle exige essentiellement le même droit. De plus, avant d'accepter de passer à la version payante. Je n'ai pas encore passé d'accord avec cet oncle, et je me donne déjà les clés de l'appartement, au cas où. Ah, quelle gentille et prudente!

Vous savez, mon oncle Yandex, je n'ai rien contre vous, et j'utilise vos services avec plaisir, mais, désolé, jusqu'à ce que j'aie la possibilité de choisir, vous ne recevrez pas le mot de passe de ma carte bancaire. Et spécialement pour vous de dresser une carte avec deux roubles, je n'ai pas le temps, et ce n'est pas rentable.

Ici, une note attire l'attention sur l'imperfection des technologies de reconnaissance vocale. Le fait est qu'à l'heure actuelle, rien de bon n'a été fait dans le domaine de la reconnaissance vocale, et cela ne vaut pas la peine d'utiliser des systèmes de reconnaissance. Je jure et me résigne à l'idée que dans un avenir proche Vanya l'Intelligent ne parlera pas.

Le paragraphe ci-dessous est le prochain article sur les services de reconnaissance vocale en ligne. Les services en ligne ne sont bien sûr pas adaptés. Bon je reconnais le son dans les winforms, mais pas sur le site ... Sans le moindre espoir, je clique sur le lien et ...

Le lendemain, le bot de chat gagne la voix.

Présentation de la baguette magique: speechpad.ru . Je vous préviens que le service ne fonctionne que dans Chrome. Cela ne m'arrête pas: j'utilise n'importe quel Chrome. Et il a le moteur de Google: apparemment, certaines possibilités qui me sont inconnues d'utiliser le service restent gratuites.

Speechpad a une interface simple mais assez fonctionnelle:



La connexion du module de reconnaissance prend un minimum de temps.

Après avoir lu les instructions, la première chose que je fais est d'intégrer le service avec OS. Certes, l'intégration est payante, mais 100 roubles par mois, quel que soit le volume de reconnaissance, c'est une autre affaire! Ce ne sont pas des tarifs draconiens pour chaque pièce reconnue. De plus, une période d'essai de deux jours est prévue pour la familiarisation.

Je m'inscris sur le site, j'appuie sur le bouton de mise sous tension de la période de test, dans une minute j'installe quelques Pribluda spécifiés dans les instructions, et tout fonctionne. Principe d'action - le texte reconnu est ajouté à l'emplacement du curseur. Vraiment reconnu et vraiment ajouté. Il est reconnu non sans erreurs, mais, de mon point de vue, il est satisfaisant.

Après quelques heures de test, j'arrive à la conclusion qu'il est plus rationnel d'utiliser le presse-papiers, et cette fonctionnalité est gratuite. Ici, bien sûr, pas pour tout le monde:

  • lors de l'intégration avec OS, le curseur doit se trouver sur un champ de chatbot spécifique. Pendant les tests, j'oublie plusieurs fois et je passe du chat bot à VS, à la suite de quoi le texte reconnu est conduit dans la source;
  • lors de l'utilisation du presse-papiers, il est en conséquence interdit d'utiliser le presse-papiers, sinon le texte copié dans le presse-papiers à partir d'un programme tiers apparaîtra instantanément dans le chatbot. Quelques fois, je rencontre aussi cela, mais bientôt je m'y habitue.

Finalement je m'arrête au presse-papiers.

Tout, le problème est résolu.

Plus de temps que de connecter la reconnaissance à partir du clavier vocal, il faut pour ne pas reconnaître les phrases prononcées par le chat bot. Je transpire beaucoup jusqu'à ce qu'il m'atteigne qu'il est plus facile d'éteindre le microphone. Googler le code de coupure du microphone.

Code d'activation / désactivation du microphone
 using NAudio.CoreAudioApi; //-  public static void Mute(bool start) { CoreAudioMicMute CAMM = new CoreAudioMicMute(); CAMM.SetMute(start); } internal class CoreAudioMicMute { private MMDevice[] rgMicDevice; //      int MaxMicro = 0; public CoreAudioMicMute() { try { MMDeviceEnumerator DevEnum = new MMDeviceEnumerator(); MMDeviceCollection devices = DevEnum.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active); // DataFlow.Capture - (     ), //DeviceState.Active -   //   (  ) MaxMicro = 0; for (int i = 0; i < devices.Count; i++) // devices.Count -  ( ) { MMDevice deviceAt = devices[i]; if (deviceAt.DataFlow == DataFlow.Capture && deviceAt.State == DeviceState.Active) // - (     ,   //"if(...",      deviceAt,   - DeviceFriendlyName //  FriendlyName,       ( //   .) { ++MaxMicro; } } //    () () ()   (,   ) rgMicDevice = new MMDevice[MaxMicro]; MaxMicro = 0; for (int i = 0; i < devices.Count; i++) { MMDevice deviceAt = devices[i]; if (deviceAt.DataFlow == DataFlow.Capture && deviceAt.State == DeviceState.Active) //   () { MaxMicro++; rgMicDevice[MaxMicro - 1] = deviceAt; } } } catch (Exception) { } } public void SetMute(bool mute) //,       private MMDevice[] rgMicDevice { try { for (int i = 0; i < MaxMicro; i++) { rgMicDevice[i].AudioEndpointVolume.Mute = mute; //= true -   (  ) } } catch (Exception) { } } } 


* - les commentaires ne sont pas les miens, mais copiés-collés. Je ne donne pas le lien, car son propriétaire admet qu'il a lui-même google le code dans les entrailles de l'Internet anglophone.
** - J'ai apporté des modifications mineures au code.

Avant la phrase du chat bot, j'éteins le microphone, après la phrase que j'allume, par conséquent, le service n'entend que mes phrases, mais n'entend pas le bot de chat.

Voici le résultat final:

Pour être complet dans mes impressions, je parcours une dizaine de sites avec reconnaissance vocale. En principe, tout le monde se ressemble et la plupart des moteurs proviennent de Google, mais la possibilité de recevoir explicitement du texte dans le presse-papiers n'est pas trouvée. À en juger par les commentaires, à certains endroits, il est possible d'exprimer des sites, mais je ne me penche pas sur ce sujet. Comme on dit, ils ne recherchent pas le bien du bien.

Maintenant un autre problème: je pense que ce serait bien de resserrer l'animation qui prononce le discours prononcé. Je veux quelque chose de plus simple: une bibliothèque pour C # avec un choix de caractère. Mais on m'a dit qu'il n'y en avait pas dans .NET ...

En fait, c'est tout. Le jeune homme a une voix féminine, mais en général, le mode vocal fonctionne.

J'espère présenter bientôt Vanya le raisonnable sous une forme plus présentable. Au cours du temps passé, il a été considérablement mis à jour et plus sage: il est passé d'Access à PostgreSQL, les algorithmes se sont améliorés, il a été possible de connecter des dictionnaires, de constituer la base de données initiale de réponses typiques - une autre personne, en bref.

Source: https://habr.com/ru/post/fr433974/


All Articles