Atendimento Sigecom (17) 99674-2437

central de Vendas (17) 99751-9169

Acesso Parceiro

logo-200px-largura
  • Sobre
  • Sigecom
  • Experience
  • Blog
  • Contato
Menu
  • Sobre
  • Sigecom
  • Experience
  • Blog
  • Contato
Programa de Parceiros
logo-200px-largura
  • Sobre
  • Sigecom
  • Experience
  • Blog
  • Programa de Parceiros
  • Contato
Menu
  • Sobre
  • Sigecom
  • Experience
  • Blog
  • Programa de Parceiros
  • Contato

Blog SistemasBr

  • Categorias: SistemasBr Tech
conversao-de-fala-em-texto-na-azure

NÃO reinvente a roda! Como Converter Fala em Texto na Azure

  • João Lucas Farias
  • 24/06/2020

Continuaremos na categoria de Fala dos Serviços Cognitivos da Azure, mostrando, agora, como converter fala em texto! 

Como funciona a Conversão de Fala em Texto na Azure

Interfaces mais amigáveis, que respondem a fala do usuário, estão ganhando cada vez mais espaço no mundo. Construir seu produto com essa funcionalidade pode ser um diferencial competitivo interessante.

Assim como todos os Serviços Cognitivos, o Serviço para Converter Fala em Texto na Azure, também conta com as mesmas características de facilidade de implementação e uso, bem como deixa de lado a necessidade de conhecer toda a dificuldade por trás da inteligência artificial.

Há a possibilidade de se transcrever, com precisão e rapidez, para mais de 30 idiomas.

Vamos demonstrar como implementar essa funcionalidade ao longo do artigo.

Todo o código está disponível no github.

Então, vamos a mão na massa!

1. Tenha seu projeto

Criamos um projeto do tipo ASP.NET Core Web Application, com o template Web Application para ter o projeto criado voltado para o Razor Pages. Demos a ele o nome de AzureCognitiveServices. Confira no primeiro passo do primeiro artigo técnico da série e crie o seu projeto também.

Com o projeto criado e atualizado, procure a Solution Folder com nome de Speech, que é o nome da categoria que continuamos explorando.

Dentro dessa Solution Folder, crie um novo Projeto do tipo Class Library (.NET Core) e o nomeie como SpeechToText.

Até esse ponto, a estrutura do projeto deve ser a seguinte:

estrutura-do-projeto
Estrutura do projeto

2. Configure a Azure

Crie uma conta gratuita no Azure e, logo após, crie um recurso para converter fala em texto, ou utilize o criado no artigo anterior (acesse a busca de recursos clicando aqui) e obtenha a chave e o endpoint do recurso, como na imagem a seguir.

Campos de chave e endpoint do recurso

3. Conecte a Conversão de Fala em Texto ao seu projeto

Voltando ao projeto no Visual Studio, vamos renomear o arquivo Class1.cs para algo mais palatável. Renomeio para TranscricaoDeFala.cs.

Abra o Package Manager Console e execute o seguinte comando para adicionar as bibliotecas do Serviço Cognitivo para Converter Fala em Texto ao projeto que chamamos de SpeechToText.

dotnet add .\SpeechToText package Microsoft.CognitiveServices.Speech --version 1.12.1

Não esqueça, também, de conectar o projeto SpeechToText ao projeto AzureCognitiveServices clicando com o botão direito em cima do projeto AzureCognitiveServices e indo a opção Add > Reference…, depois adicionando o projeto SpeechToText. Assim o projeto AzureCognitiveServices conseguirá acessar o projeto SpeechToText consumir o que precisar.

Adicionando o projeto SpeechToText ao projeto AzureCognitiveServices

4. Implemente a Conversão de Fala em Texto na classe TranscricaoDeFala.cs

Comece colocando todos os Usings necessários para o funcionamento correto da classe:

using Microsoft.CognitiveServices.Speech;
using System;
using System.Threading.Tasks;

Depois adicione as variáveis de instância que utilizaremos ao longo da classe:

namespace SpeechToText
{
public class TranscricaoDeFala
{
private const string _chave = "<sua chave>";
private const string _endpoint = "<seu endpoint>";

private readonly SpeechConfig _configuracaoDaTranscricao;

Lembre de substituir "<sua chave>" e "<seu endpoint>" pelos valores obtidos no passo 2. Configure a Azure.

O objeto do tipo SpeechConfig é, justamente, o objeto  que utilizaremos para chamar os métodos que o Serviço Cognitivo para Converter Fala em Texto na Azure nos disponibiliza.

Crie um método construtor para que, sempre que essa classe for instanciada, a variável _configuracaoDaTranscricao seja instanciada também.

public TranscricaoDeFala() =>
_configuracaoDaTranscricao = SpeechConfig.FromEndpoint(new Uri(_endpoint), _chave);

Adicione os códigos abaixo e não esqueça de fechar todas as chaves da classe:

public async Task<string> Ouvir(Idioma idioma)
{
_configuracaoDaTranscricao.SpeechRecognitionLanguage = idioma.Codigo;

using var reconhecer = new SpeechRecognizer(_configuracaoDaTranscricao);
var resultado = await reconhecer.RecognizeOnceAsync();

if (resultado.Reason == ResultReason.RecognizedSpeech)
return $"Reconhecido: \"{resultado.Text}\" (em {idioma.Nome})";

var semReconhecimento = "Não foi possível reconhecer a fala.";

if (resultado.Reason == ResultReason.Canceled)
{
var cancelamento = CancellationDetails.FromResult(resultado);

semReconhecimento += $"Cancelado por: \"{cancelamento.Reason}\".";

if (cancelamento.Reason == CancellationReason.Error)
semReconhecimento += $"Erro: \"{cancelamento.ErrorDetails}\".";
}

return semReconhecimento;
}
}
}

Essa classe contém apenas um método, que chamamos de Ouvir(). Tal método é responsável por entender o áudio, a partir da entrada de áudio padrão, que queremos que o Serviço Cognitivo transcreva em texto no idioma que escolhemos que ele entenda.

Dentro dele, o método que efetivamente captura o áudio pela entrada de som padrão é o reconhecer.RecognizeOnceAsync. Após ele, apenas verificamos se a execução foi concluída com sucesso, ou não, e retornamos uma mensagem de acordo com a situação.

A classe inteira pode ser visualizada no github.

5. Crie a classe Idioma.cs ainda no projeto SpeechToText.

Ainda no projeto chamado de SpeechToText crie uma nova classe e dê o nome de Idioma.cs. Essa classe será responsável por guardar informações sobre o idioma escolhido, bem como listar todos os idiomas que temos disponíveis.

Comece colocando o Using necessário para o funcionamento correto da classe:

using System.Collections.Generic;

Depois adicione o método construtor da classe e as propriedades do mesmo.

namespace SpeechToText
{
public class Idioma
{
private Idioma(string nome, string codigo)
{
Nome = nome;
Codigo = codigo;
}

public string Nome { get; private set; }

public string Codigo { get; private set; }

Note que o método construtor da classe é privado, o que indica que ninguém, fora ela mesma, consegue criar instâncias.

Além disso, todas as propriedades possuem sua propriedade set também privada.

Nessa classe temos as informações necessárias para definir qualquer idioma.

Agora, por fim, coloque o restante do código e não esqueça de fechar as chaves ao final da classe.

public static IEnumerable<Idioma> IdiomasDisponiveis() =>
new List<Idioma>(10)
{
new Idioma("Português (Brasil)", "pt-BR"),
new Idioma("Inglês (EUA)", "en-US"),
new Idioma("Espanhol", "es-ES"),
new Idioma("Finlandês", "fi-FI"),
new Idioma("Francês", "fr-FR"),
new Idioma("Italiano", "IT-IT"),
new Idioma("Japonês", "ja-JP"),
new Idioma("Holandês", "nl-NL"),
new Idioma("Russo", "ru-RU"),
new Idioma("Chinês", "zh-CN"),
};
}
}

Esse método, por estar dentro da mesma classe, consegue criar instâncias da mesma. Por isso retorna uma lista contendo diversos idiomas.

Note que todos os idiomas, e seus códigos, estão fixos no código, o que chamamos de hard coded, pois o kit de desenvolvimento para este Serviço Cognitivo ainda não conta com uma forma de listar os idiomas disponíveis. Mas, você pode ver todos acessando aqui. Fique a vontade para adicionar, ou remover, idiomas.

A classe inteira pode ser visualizada no github.

6. Crie o arquivo SpeechToText.cshtml no projeto AzureCognitiveServices

Dentro do projeto AzureCognitiveServices utilize a pasta Speech, dentro da pasta Pages. Nesta pasta adicione uma Razor Page e a chame de SpeechToText.cshtml.

Nela, criaremos o formulário responsável por iniciar a captura de áudio, bem como o idioma da fala que será convertida em texto.

Vamos, primeiro, editar o código do servidor. Para isso, clique com o botão direito no arquivo aberto e vá em Go to PageModel ou aperte o F7.

Esse arquivo é responsável pelo código C# desta página. Comece colocando os usings.

using Microsoft.AspNetCore.Mvc.RazorPages;
using SpeechToText;
using System.Collections.Generic;
using System.Linq;

Adicione agora as variáveis que utilizaremos na classe.

namespace AzureCognitiveServices
{
public class SpeechToTextModel : PageModel
{
public string Mensagem { get; private set; } = string.Empty;

public readonly IEnumerable<Idioma> Idiomas;

Temos apenas duas variáveis. A primeira, string Mensagem, é responsável por armazenar a mensagem de sucesso, ou erro, da conversão de fala em texto e, por padrão, começa como uma string vazia (string.Empty).

Já a outra é uma lista que conterá todos os idiomas disponíveis, a chamamos de IEnumerable <Idiomas>.

Crie o método construtor.

public SpeechToTextModel() =>
Idiomas = Idioma.IdiomasDisponiveis();

O método construtor apenas alimenta a lista de Idiomas que criamos para ser exibida no HTML.

Por último, crie o método post para capturar os envios do formulário HTML e não esqueça de fechar as chaves da classe.

public void OnPost()
{
var idioma = Idiomas.FirstOrDefault(n => Request.Form["idioma"].Equals(n.Codigo));
Mensagem = new TranscricaoDeFala().Ouvir(idioma).Result;
}
}
}

O método post dessa classe é bem curto, ele começa verificando qual o idioma foi escolhido e, por fim, chama o método da classe que criamos no passo 4. Implemente a Conversão de Fala em Texto na classe TranscricaoDeFala.cs e armazena o texto resultante na variável Mensagem.

Isso encerra o código da parte do servidor. Vamos voltar a parte do HTML.

A classe HTML terá o código inicial. O altere para isso:

@page
@model AzureCognitiveServices.SpeechToTextModel
@{
ViewData["Title"] = "Fala para Texto";

var corDoAlert = Model.Mensagem.ToLower().StartsWith("não")
? "danger"
: "success";
}

<h1>Fala para Texto</h1>

No início do código HTML verificamos se a variável Mensagem, do servidor, possui alguma informação e qual é ela. Então modificamos a cor do alerta de acordo com isso.

Coloque o seguinte código HTML no restante do arquivo:

<form method="post">
<div class="row">
<div class="col-6">
<div class="form-group">
<label for="idioma">Idioma:</label>
<select class="form-control" name="idioma" id="idioma" required>
@foreach (var idioma in Model.Idiomas)
{
<option value="@idioma.Codigo">@idioma.Nome</option>
}
</select>
</div>
</div>
</div>

<br />
<br />

<div class="form-group">
<button type="submit" class="btn btn-primary">Ouvir</button>
</div>
</form>

@if (!string.IsNullOrWhiteSpace(Model.Mensagem))
{
<div class="alert alert-@corDoAlert alert-dismissible fade show" role="alert">
@Model.Mensagem
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
}

Este código tem apenas o HTML que gerará um formulário contendo o campo para escolha do idioma, obrigatória para Converter Fala em Texto, e um botão para iniciar o processo de captura de áudio pela entrada padrão e transcrição.

Cada opção do campo de idioma é um elemento da lista de Idiomas do servidor, que estamos percorrendo com um foreach.

Ao final, caso a variável Mensagem possua alguma informação, uma alerta é exibido e sua cor depende do conteúdo da mensagem.

Os arquivos inteiros podem ser visualizados no github, tanto o arquivo de HTML, quando a classe do servidor.

7. Adicione ao menu a página para Converter Fala em Texto criada

Agora que tudo está criado, chegamos ao momento de adicionar ao menu a página criada. Para isso, vá na pasta Shared e abra o arquivo _Layout.cshtml. Esse arquivo tem todo o layout que é compartilhado por todas as páginas, o que se repete em todas, como menu e footer, por exemplo.

No artigo anterior criamos um menu para todos os serviços cognitivos da categoria Fala, então, apenas complemente esse menu com mais uma opção.

Logo abaixo da opção de Texto para Fala, adicione o seguinte código:

<a class="dropdown-item" asp-page="/Speech/SpeechToText">Fala para Texto</a>

Isso fará com que o menu tenha mais uma opção, similar a imagem a seguir.

Exemplo do menu com a opção de ir à página Fala para Texto

O arquivo inteiro pode ser visualizado no github.

Conclusão

Com o Serviço para Converter Fala em Texto na Azure conseguimos, de forma rápida, uma aplicação que faz a conversão, rápida, de qualquer fala, em diversos idiomas, para um texto preciso. O que pode ajudar em diversos cenários em um produto.

Com isso, a estrutura atual do seu projeto deve estar se parecendo assim:

Estrutura atual do projeto

Todo o projeto está disponível no github com uma licença que possibilita colaboração. Sinta-se a vontade.

João Lucas Farias

João Lucas Farias

24 anos, Microsoft MVP Programador por paixão e profissão. Comecei como o primeiro estagiário e, hoje, sou líder técnico, de inovação e aprendizado contínuo da equipe. Amo aprender coisas novas, assim como passar o pouco que sei. Especialista em Não Entrar Em Pânico!

Deixe um comentário

Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Buscar

Categorias

 
  • Adequação Fiscal (16)
  • Automação Comercial (9)
  • Controle Financeiro (8)
  • Eventos (4)
  • Gestão e Negócios (12)
  • Leituras que Recomendamos (3)
  • Marketing (3)
  • SIGECOM (20)
  • SistemasBr (3)
  • SistemasBr Tech (11)

Tags

 
ai ATUALIZAR EQUIPAMENTO SAT ATUALIZAR LAYOUT SAT azure azure cognitive services Cadastro cest CFe-Sat controle de estoque controle financeiro custos tributários desenvolvedor eventos fluxo de caixa Funcionário Gestão comercial gestão de estoque gestão financeira ia impostos indevidos inadimplência inteligência artificial Liderança Marketing Digital marketing digital para o comércio marketing digital para pequenas empresas mfe nf-e nfe NOVA ATUALIZACAO obrigatoriedade otimizar controle de estoque reduzir mortalidade empresas regras fiscais sat sefaz Serviço Cognitivo da Azure de Visão Personalizada serviços cognitivos da azure SIGECOM simples nacional sistemasbr software software de gestão comercial tecnologia visão personalizada da azure

Últimos artigos

instagram-para-pequenos-negocios

Instagram para pequenos negócios: como criar engajamento com o público

site-para-pequenas-empresas

Site para pequenas empresas: como ser encontrado na internet

marketing-digital

Marketing Digital: porque ele é importante para pequenas empresas

Assine nossa newsletter e receba conteúdos exclusivos

  • 17 3622 3222
  • contato@sistemasbr.com.br
  • Unidade I
  • Av. João Amadeu, 2345, Centro, Jales, SP
  • Unidade II
  • Av. Ben. R Lisboa, 2675 TR Madrid, SJ Rio Preto, SP

Empresa

  • Início
  • Sobre
  • News
  • Contato
Menu
  • Início
  • Sobre
  • News
  • Contato

serviços

  • Sigecom
  • Experience
  • Parceiros
  • Indique e Ganhe
Menu
  • Sigecom
  • Experience
  • Parceiros
  • Indique e Ganhe

canais

  • Acesso Parceiro
  • Atendimento Sigecom
  • FAQ
  • Blog
Menu
  • Acesso Parceiro
  • Atendimento Sigecom
  • FAQ
  • Blog

Todos os direitos reservados a SistemasBr © 2020