
Há pouco tempo, apresentei um bot de bate-papo sintático chamado Vanya Razumny (
"Criando IA usando o método glock cuzdra. Odisséia Inteligente" ). O próximo estágio óbvio, pelo qual, como outros criadores de inteligência artificial, eu queria passar - para dar voz à ideia. Parece mais fácil?
No entanto, eu tive que sofrer. Não foi possível resolver alguns problemas, certamente devido ao amadorismo. No entanto, duvido que os profissionais estejam interessados em resolver problemas relacionados. Isso não é interessante para ninguém, então eu não queria. Eu esperava acelerar rapidamente o som e seguir para as idéias subseqüentes ...
Mas as primeiras coisas primeiro.
(Estou escrevendo na esperança de que meus sofrimentos no campo da dublagem ajudem alguém de meu tipo de amante. Este post é inútil para o melhor bisonte).
É claro que a tarefa de pontuação é dividida em duas seções não relacionadas:
- Síntese de texto
- Reconhecimento de fala.
Entendo o primeiro ponto, como o mais fácil. Imediatamente me deparei com um código para iniciantes, apenas algumas linhas.
Síntese de voz predefinidausing 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(); }
Coloquei na fonte e, imagine, o carro diz! Estou um pouco sobrecarregado de alegria. Tão fácil? !!!
Continua sem sentido: anexar uma voz masculina. Infelizmente, uma voz russa está pré-instalada no Windows - feminino: "Microsoft Irina Desktop". E eu tenho um garoto chatbot, não uma garota, não pretendo fazer uma operação para mudar de sexo.
Google novamente, depois de um tempo, estou convencido de que existem poucas vozes masculinas russas. Isso se refere a votos gratuitos, porque serviços pagos não são para meus romances de finanças de canto. Mas há também vozes masculinas gratuitas, por exemplo, a voz "Alexander" da biblioteca doméstica RHVoice. Bem, que seja Alexander.
Infelizmente, a instalação (para mim) é de alguma forma complicada. Mas existem montagens prontas. Faço o download de uma das montagens, instalo-a, subo nas configurações do Windows (Reconhecimento de fala / Texto em fala) e - eis que eis! - Encontro a voz de "Aleksandr" ao lado de "Microsoft Irina Desktop". Com respiração suspensa, eu lancei ...
Tudo funciona no Windows!
Substituirei o Microsoft Irina Desktop por Aleksandr na fonte e ... Nada disso já funciona! Triste, mas não mortal. Vamos consertar isso agora.
Estou estudando o projeto RHVoice, em particular a descrição do arquivo de configuração, experimentando de uma maneira e de outra ... O resultado é o mesmo: em vez de sons, Alexander faz um rosnado ininteligível ou nada, apesar do fato de que o Microsoft Irina lê como um locutor na televisão.
Alguns dias eu ainda espero por algo e mexo, mas depois desisto. Sim, minhas mãos estão tortas. Bem, não sei por que Aleksandr se recusa a conversar, não sei e não encontro resposta nos fóruns.
Ok, estou estudando outras vozes livres, o benefício não é mais do que uma dúzia.
Então me ocorre que se eu quiser que os usuários do Vanya the Reasonable ouçam a mesma voz que eu ouço, um instalador de voz precisará ser instalado no pacote. Isso está além do meu poder, e reluto em participar, portanto, o primeiro parágrafo, "Síntese de texto em fala", termina com rendição vergonhosa.
Eu tomo uma decisão em princípio:
- Vamos para o inferno com um cachorro! Deixe os próprios usuários do chatbot instalarem as vozes que quiserem e escolherem na lista. Anexar uma lista de votos predefinidos é uma tarefa viável.
- Dou voz a Vanya Reasonable em uma voz feminina, porque Vanya é jovem e sua voz ainda não se interrompeu. "E não é nada porque minhas mãos estão saindo da minha bunda", persuadir-me através da psicoterapia.
Com um coração puro, volto ao ponto 2: reconhecimento de fala.
O segundo ponto é decisivo. Quem precisa de um bot de bate-papo que possa reproduzir suas próprias frases na voz, mas não entende a voz do interlocutor ?! Em caso de falha, a empresa de dublagem entra em colapso.
Pesquisando novamente, desta vez frenético, no último suspiro.
O que está sendo revelado? As opções são pagas principalmente: existem gratuitas, mas existem apenas algumas para o idioma russo.
O Yandex SpeechKit aparece como o mais simples da rede, mas salvarei para mais tarde se as opções mais complexas não funcionarem. Eu prefiro obter reconhecimento offline.
Aqui está uma solução totalmente gratuita do CMUSphinx. Estou estudando críticas:
- em primeiro lugar, não há exclamações ultrajantes: irmãos, tudo funciona!
- segundo, a descrição da instalação é completamente obscura para mim. Parece que após a instalação a biblioteca também precisa ser treinada!
Caindo.
Próximo. Microsoft Speech Platform, grátis.
Pesquisei no google e encontrei um
link com uma descrição acessível mais o código-fonte do exemplo. Faça o download da fonte, compile. Eu digo "Um, Dois", e o programa distribui o texto reconhecido. Escravo-o-otayet! ..
Um pouco confuso é o fato de que o texto não é reconhecido por si só, mas deve primeiro ser adicionado ao dicionário. Mas não é assustador: em vez de "um, dois", anexarei um arquivo volumoso com ortografia.
Transfiro o código do código fonte do exemplo para minhas fontes, tento obter o mesmo efeito ... Não compila, cai na recuperação.
Depois, li os comentários com o olho esquerdo e descobri que a solução é adequada para reconhecer comandos, mas não permite trabalhar com texto contínuo. Verifico de acordo com o exemplo original. Sim, “um, dois” reconhece e “um, dois, três” não é completamente: ele não ouve os três. Encontro nos comentários algo como: “O texto contínuo é reconhecido por uma taxa”, e a Microsoft Speech Platform deixa de existir para mim.
Ouvi dizer que o Google fornece seu reconhecedor gratuitamente por um ano, devo verificar.
Eu verifico. Não mais, tanto quanto eu posso julgar.

Não excluo que pesquisei no Google incorretamente, mas não me culpo: compartilho com meus iniciantes a experiência pessoal que adquiri.
Eu vou desistir de Yandex. Aqui estão as exclamações "Irmãos, tudo funciona!" o suficiente, e indivíduos particulares, mediante solicitação individual, podem obter o serviço gratuitamente. Vi o anúncio com meus próprios olhos. Posso me conectar ao SpeechKit pela API, estão disponíveis instruções.
Venho desistir e o que vejo? A empresa acabou de apresentar o Yandex.Cloud, onde mudou o serviço de tecnologia da fala. Não tenho orgulho, vou me registrar na nuvem: provavelmente tudo está igual lá antes ...
E aqui uma terrível chatice me espera:
- Em primeiro lugar, você não pode ouvir sobre o uso gratuito do reconhecedor. É verdade que eles concedem uma concessão com a qual você pode pagar pelo serviço por um tempo. Ok, continuo me registrando ...
- E que negócio é esse ?! Para trabalhar com o serviço, eles exigem que eu indique os detalhes de um cartão bancário. Trecho de uma carta enviada para mim como criador do perfil na nuvem:

Em algum lugar eu vi isso: na minha opinião, no Google. Portanto, Yandex tomou um exemplo de um amigo sênior.
Estou surpreso com a ausência de posts indignados em Habré. Bem, eles não precisam apenas de dinheiro para os serviços, mas pedem a chave do apartamento onde está o dinheiro! De qualquer maneira, enfurece-me que, por algum tempo, o banco não possa distribuir meu próprio dinheiro de acordo com a decisão do gerente do banco, e aqui o segundo tio exige essencialmente o mesmo direito. Além disso, antes de concordar em mudar para a versão paga. Ainda não cheguei a um acordo com esse tio e, por precaução, já me dou as chaves do apartamento. Ah, que gentil e prudente!
Sabe, tio Yandex, não tenho nada contra você e uso seus serviços com prazer, mas, desculpe, até ter a oportunidade de escolher, você não receberá a senha do meu cartão bancário. E especialmente para você elaborar um cartão com dois rublos, não tenho tempo, e isso não é rentável.
Aqui, uma nota chama a atenção sobre a imperfeição das tecnologias de reconhecimento de fala. O ponto é que, no momento, nada de bom foi feito no campo do reconhecimento de fala e não vale a pena usar sistemas de reconhecimento. Juro e me resigno ao pensamento de que, no futuro próximo, Vanya, o Inteligente, não falará.
O parágrafo abaixo é o próximo artigo sobre serviços de reconhecimento de fala online. Os serviços online não são adequados, é claro. Bem, eu reconheço o som nas winforms, mas não no site ... Sem a menor esperança, clico no link e ...
No dia seguinte, o bot de bate-papo ganha voz.
Apresentando a varinha mágica:
speechpad.ru . Eu aviso que o serviço só funciona no Chrome. Isso não me impede: eu uso qualquer Chrome. E ele tem o mecanismo do Google: aparentemente, algumas oportunidades desconhecidas para mim para usar o serviço permanecem gratuitas.
O Speechpad tem uma interface simples, mas bastante funcional:

A conexão do reconhecedor leva um tempo mínimo.
Depois de ler as instruções, a primeira coisa que faço é integrar o serviço ao SO. É verdade que a integração é paga, mas 100 rublos por mês, independentemente do volume de reconhecimento, é outra questão! Não são tarifas draconianas para cada peça reconhecida. Além disso, é dado um período de teste de dois dias para familiarização.
Faço o registro no site, pressiono o botão de ligar do período de teste, em um minuto instalo algumas das Pribluda especificadas nas instruções e tudo funciona. Princípio de ação - o texto reconhecido é adicionado no local do cursor. Realmente reconhecido e realmente adicionado. É reconhecido não sem erros, mas, do meu ponto de vista, é satisfatório.
Após algumas horas de teste, chego à conclusão de que é mais racional usar a área de transferência, e esse recurso é gratuito. Aqui, é claro, não para todos:
- ao integrar com o SO, o cursor deve estar em um campo específico do chatbot. Durante os testes, esqueço várias vezes e mudo do bot de bate-papo para o VS, como resultado do qual o texto reconhecido é direcionado para a fonte;
- ao usar a área de transferência, é proibido usar a área de transferência; caso contrário, o texto copiado para a área de transferência de um programa de terceiros aparecerá instantaneamente no chatbot. Algumas vezes eu também me deparei com isso, mas logo me acostumo.
No final, paro na área de transferência.
Tudo, o problema está resolvido.
Mais tempo do que conectar o reconhecimento do speechpad, leva para não reconhecer as frases ditas pelo bot de bate-papo. Eu suo muito até que me chegue que é mais fácil desligar o microfone. Pesquisando no código mudo do microfone.
Código On / Off do microfone using NAudio.CoreAudioApi;
* - os comentários não são meus, mas copiados e colados. Não dou o link, pois o proprietário admite que ele próprio possui o código no Google nas entranhas da Internet de língua inglesa.
** - Fiz pequenas alterações no código. Antes da frase do bot de bate-papo, desligo o microfone; depois da frase que ligo, o serviço escuta apenas minhas frases, mas não escuta o bot de bate-papo.
Aqui está o resultado final:
Para garantir a integridade das minhas impressões, estou navegando em uma dúzia de sites com reconhecimento de fala. Em princípio, todos são parecidos e a maioria dos mecanismos é do Google, mas a capacidade de receber texto explicitamente para a área de transferência não foi encontrada. A julgar pelos comentários, em alguns lugares há a possibilidade de dar voz aos sites, mas não me aprofundo neste tópico. Como se costuma dizer, eles não estão procurando o bem do bem.
Agora, outro problema: acho que seria bom restringir a animação que pronuncia o discurso proferido. Eu quero algo mais simples: uma biblioteca para C # com uma escolha de caractere. Mas me disseram que não existe no .NET ...
Na verdade, é isso. O jovem tem uma voz feminina, mas, em geral, o modo de voz está funcionando.
Espero apresentar em breve Vanya the Reasonable de uma forma mais apresentável. Nos últimos tempos, foi significativamente atualizado e mais sábio: passou do Access para o PostgreSQL, aprimorou os algoritmos, foi possível conectar dicionários, construir o banco de dados inicial de respostas típicas - outra pessoa, enfim.