Reconhecimento de Voz com Python

Ao ver o Tony Stark (Homem de Ferro) nos filmes da Marvel, sempre dava vontade de ter um assistente virtual como o Jarvis. A Siri, Cortana e Alexa ainda não possuem o mesmo nível de interação. Pesquisando na Internet encontrei o projeto https://kripytonianojarvis.com/site/ que eu achei bem interessante.

Mas acho que ainda não é o que eu quero, então decidi (tentar) criar uma assistente virtual. Sei que não será fácil e esse projeto será uma espécie de hobby.

A primeira parte é a comunicação por voz com o computador, assim preciso que a máquina entenda a minha fala. Nesse post vou mostrar código em python para capturar a fala do microfone e transformar em texto, gravando em um arquivo.

Vamos ao Código.

Instalação das Bibliotecas

pip install SpeechRecognition
pip install pyaudio

Se você estiver no Windows será necessário utilizar:

pip install pipwin
pipwin install pyaudio

Apesar do código não chamar explicitamente o Pyaudio ele é necessário para podermos acessar o microfone. Portanto, é imprescindível que ele esteja instalado corretamente.

Código completo

import speech_recognition as sr


def EscreveArquivo(mensagem):
    try:
        with open("transcricao_audio.txt", "a") as file:
            file.write(str(mensagem) + "\n")
            file.close()
    except:
        print("Erro na Escrita da " + mensagem)


r = sr.Recognizer()
mensagem = ""

while(mensagem != "desligar"):
    with sr.Microphone() as source:
        r.adjust_for_ambient_noise(source)
        print("Diga Algo:")
        audio = r.listen(source)
        print("Hello")


    try:
        mensagem = r.recognize_google(audio, language='pt-BR')
        print("Você falou: " + mensagem)
    except sr.UnknownValueError:
        print("Google Speech Recognition não pode entender o que você falou!")
    except sr.RequestError as e:
        print("Não foram obtidos resultados do  Google Speech Recognition service; {0}".format(e))

    EscreveArquivo(mensagem)

Escrita em Arquivo

import speech_recognition as sr


def EscreveArquivo(mensagem):
    try:
        with open("transcricao_audio.txt", "a") as file:
            file.write(str(mensagem) + "\n")
            file.close()
    except:
        print("Erro na Escrita da " + mensagem)

Essa primeira parte do código tem a importação de biblioteca e a função para escrever o texto transcrito. Isso será importante para no futuro enviarmos a mensagem de texto com comandos para o computador e outros equipamentos. Já pensou ligar a cafeteira com comando de voz. Muito Show!

Reconhecimento de Voz

r = sr.Recognizer()
mensagem = ""

while(mensagem != "desligar"):
    with sr.Microphone() as source:
        r.adjust_for_ambient_noise(source)
        print("Diga Algo:")
        audio = r.listen(source)
        print("Hello")


    try:
        mensagem = r.recognize_google(audio, language='pt-BR')
        print("Você falou: " + mensagem)
    except sr.UnknownValueError:
        print("Google Speech Recognition não pode entender o que você falou!")
    except sr.RequestError as e:
        print("Não foram obtidos resultados do  Google Speech Recognition service; {0}".format(e))

O Reconhecimento de voz é realizado pelo Google Speech Recognition e no nosso exemplo está ajustado para entender o português. Há dois tratamentos de erro. O primeiro erro refere-se ao fato da máquina não entender o que foi dito, já o segundo está relacionado a conexão com a rede do Google. Para tudo funcionar corretamente é necessário ter conexão com a Internet.

O Google Speech Recognition é uma rede neural de treinamento para o reconhecimento de fala. Ela é bem robusta pois na maioria das vezes irá reconhecer a fala sem uma etapa de calibração do timbre de voz.

Interessante notar que o programa funciona até receber, por voz, o comando “desligar”.

Conclusão

Foi escrito um código simples que captura o que foi falado e exibe em formato de texto na tela. Além disso, tudo o que foi falado fica gravado em um arquivo de texto e o programa é encerrado ao falarmos “desligar”.

Para trabalhos futuros iremos acrescentar comandos para que o computador execute tarefas através do comando de voz.

Como Estudar Para Concursos Públicos

Imagem de Free-Photos por Pixabay

O jeito que cada um estuda é peculiar e inerente a cada pessoa, sendo personalíssimo, assim não existe um método perfeito de estudo. Mesmo que você repita os métodos de um concurseiro que conseguiu a primeira colocação em todos os concursos que participou, não há garantias de sucesso.

No início é interessante você pesquisar  métodos diferentes, abrangendo  várias pessoas e escolher aquele que melhor se adapta a você. Com certeza nessa fase da vida, você já deve ter vários métodos de estudo e precisa saber porquê estudar para concurso público é diferente de estudar para uma prova de faculdade, por exemplo. Aqui uso as palavras de Alexandre Meirelles : “Você precisa reter o conhecimento durante um longo período de tempo, por isso, você tem que interagir com o material de estudo.” 

Dessa forma eu vou dar algumas dicas e relatar a forma como eu estudo.

DICAS: 

  1. Não tentar decorar tudo
    • É humanamente impossível decorar todas as informações que você precisará ler, selecione com cuidado o estritamente necessário para decorar.
  2. Procurar ter um entendimento geral da disciplina
    • Como não é possível decorar tudo, você tem que ter uma idéia de como a disciplina funciona para, em muitos casos, responder as questões baseado em um raciocinio analítico. Então, mesmo que você não saiba a resposta exata, conseguirá descobrir a resposta mais provável e com o tempo isso fará uma enorme diferença.
  3. Estudar através das perguntas: 
    • O quê é isso?
    • Para que serve?
    • Quem usa? 
    • Como se usa?
    • Observações Interessantes.
    • Exceções.
    • Essa é a base para a construção de qualquer conhecimento. Tendo essa estrutura como base a assimilação e o entendimento de qualquer assunto ficará mais fácil. Preste muita atenção nas exceções, pois é o que cai com mais frequência em provas.
  4. Manter o estudo constante e realizar provas sempre como “teste”
    • O que funciona aqui é a filosofia do “Treine duro, jogue fácil!”. Você deve fazer simulados da vida real, ou seja, provas de concursos que você não deseja assumir, mas que tenham disciplinas e conteúdos relacionados com o que você estuda.
    • Como você não está preocupado com a aprovação, não precisará ficar nervoso e nem preocupado se estudou tudo ou não. Apenas vá lá e faça o melhor.
    • Isso vai ajudar a você manter a tranquilidade nos dias de prova, resolvendo o maior número de questões corretamente. Não ficar ansioso para fazer uma prova é talvez o bem mais valioso de um concurseiro!
    • Avalie o que você fez de errado e o que fez certo, sempre procurando melhorar para a próxima. Dessa maneira você não fica frustrado com as reprovações e continua sempre estudando até chegar o dia da sua aprovação!
  5. Resolva questões de prova desde o início
    • Não espere terminar toda a matéria para resolver questões, pois você pode estar perdendo um tempo precioso. As questões auxiliam a determinar o rumo do estudo, aprofundar mais determinado assunto ou a procurar novas fontes de informações.

Essa é a minha forma de estudar, espero ser útil para vocês.
Boa Sorte nas provas!

ITIL 4

ITIL (Information Technology Infrastructure Library) é o framework para gerenciamento de serviços de TI (ITSM) mais adotado mundialmente. Define uma abordagem holística ao gerenciamento de serviços, focando no gerenciamento de serviços de ponta a ponta, da demanda ao valor. Fornece orientação para o fornecimento de serviços de TI de qualidade, fazendo uso de práticas (processos, funções e outras habilidades requeridas). 
ITIL 4 fornece às organizações a orientação necessária para enfrentar os novos desafios da gerência de serviço e de utilizar o potencial da tecnologia moderna. Ele é projetado para garantir um sistema flexível, coordenado e integrado para a governança efetiva e gestão de serviços habilitados para TI. Os benefícios a serem alcançados são:

  • Melhoria dos serviços em TI
  • Custos Reduzidos
  • Maior Satisfação do Cliente
  • Melhoria da Produtividade
  • Melhor Utilização dos conhecimentos e experiência
  • Melhor Prestação de serviços de terceiros
  • Alinhamento com as necessidades do negócio

ITIL 4 fornece o guia para tratar os novos desafios através de uma estrutura flexível, coordenada e integrada para governança e gerenciamento efetivo de serviços baseados em TI. “Na ITIL tudo pode, nada deve.” A ITIL adota as melhores práticas que são flexíveis a ponto de você adotar e adaptar aos seus processos.

Gerenciamento de Serviço de TI (ITSM)

É um conjunto de capacidades organizacionais especializadas que permitem entregar valor aos clientes na forma de serviço. O desenvolvimento dessas capacidades organizacionais exige o conhecimento e compreensão de :

  • Natureza do Valor
  • Natureza e escopo das partes interessadas(stakeholders)
  • Como a criação de valor pode acontecer por meio dos serviços

Valor e Criação em Conjunto

Valor (value) pode ser definido como os benefícios, a utilidade e a importância percebidos de algo que é produzido ou fornecido.

O valor deve ser uma criação conjunta (co-creation), fruto da colaboração entre provedores, consumidores, e outras organizações relevantes nas relações de serviço.

Produtos e Serviços

  • Produto: Uma configuração dos recursos de uma organização projetados para oferecer valor para um consumidor.
  • Serviço: Um meio de permitir a criação conjunta de valor (co-creation), facilitando os resultados que os clientes desejam alcançar, sem que o cliente tenha que gerenciar custos e riscos específicos.
  • Recursos: pessoas, informações, tecnologia, processos, parceiros, fornecedores.
  • Cada produto tem valor para os consumidores e podem ser adaptados para atender às necessidades de cada grupo de cliente em particular.
  • Produtos podem ser complexos, e nem sempre deixam visíveis todos os seus componentes e suporte para sua entrega, de forma completa.
  • Os serviços estão baseados em um ou mais produtos.

Tipos de Serviço

  • Principal: Atendem as necessidades principais dos clientes e representam algum valor. Preparam a base para geração de satisfação e utilização continua.
  • Apoio: Serviços Necessários para suportar a entrega do serviço principal.
  • Itensificador:Sviços adicionais que estimulam os clientes verificarem o valor que a TI está entregando à organização.

Referências:

     [1] https://pt.wikipedia.org/wiki/Information_Technology_Infrastructure_Library

Análise de Requisitos

Pressman [1] nos informa que o processo de engenharia de requisitos é realizado por meio da execução de sete funções distintas: concepção, levantamento, elaboração, negociação, especificação, validação e gestão. A ação da modelagem de requisitos resulta em um ou mais dos seguintes tipos de modelos: 

  • Modelos baseados em cenários de requisitos do ponto de vista de vários “atores” do sistema.
  • Modelos de dados que representam o domínio de informações para o problema.
  • Modelos orientados a classes: que representam classes orientadas a objetos (atributos e operações) e a maneira por meio da qual as classes colaboram para atender aos requisitos do sistema.
  • Modelos orientados a fluxos que representam os elementos funcionais do sistema e como eles transformam os dados à medida que percorrem o sistema.
  • Modelos comportamentais que representam como o software se comporta em consequência de “eventos” externos.

Os requisitos de software podem ser classificados da seguinte forma [2]:

  • Requisitos Funcionais: são declarações de serviços que o sistema deve fornecer, de como o sistema deve reagir a entradas específicas e de como o sistema deve se comportar em determinadas situações. Em alguns casos, os requisitos funcionais também podem explicitar o que o sistema não deve fazer.
  • Requisitos Não Funcionais: são restrições aos serviços ou funções oferecidas pelo sistema. Incluem restrições de timing, restrições no processo de desenvolvimento e restrições impostas pelas normas. Ao contrário das características individuais ou serviços do sistema, os requisitos não funcionais, muitas vezes, aplicam-se ao sistema como um todo.

Os requisitos não funcionais podem ser provenientes das características requeridas para o software (requisitos de produto), da organização que desenvolve o software (requisitos organizacionais) ou de fontes externas [2].

QFD (Quality function Deployment) é uma técnica de gestão da qualidade que traduz as necessidades do cliente para requisitos técnicos do software. O QFD “concentra-se em maximizar a satisfação do cliente por meio da processo de engenharia de software” [1]. O QFD identifica três tipos de requisitos: Requisitos Normais, Requisitos Esperados, Requisitos Fascinantes.

Referências:

[1] Pressman, Roger. Engenharia de Software 6ª edição (2006).
[2] Sommerville, Ian. Engenharia de Software 9ª edição (2012).

Dicas Overleaf

Imagem de wiredsmartio por Pixabay

Overleaf é um editor LateX colaborativo e online extremamente fácil de usar. Mesmo assim, existe uma curva de aprendizado que precisa ser superada para entender e descobrir alguns comandos [1].

No modo matemático, temos que necessariamente usar comandos especiais para inserir espaços em branco, não é possível utilizar a barra de espaço. Assim, podemos usar a barra invertida isolada (por exemplo, $x \ y$ produz um espaço entre o x e o y), podem ser usados \, (espaço muito pequeno), \: ou \; ou \quad e \qquad (espaço muito grande) para espaços em branco. Pode-se repetir esses comandos a vontade até obter o espaçamento desejado. Além disso, \! produz um espaço em branco “negativo”, ou seja, uma redução do espaço em branco, um pequeno retrocesso [2].

Para representar módulo, basta utilizar a barra reta do seu teclado |.

Se você quiser utilizar módulo em uma fração, ou alguma expressão matemática que seja maior, e exija uma barra de módulo maior, utilize os códigos \left| e \right| ao redor da expressão.

Referências:

[1] https://pt.overleaf.com/

[2]https://rlatex.wordpress.com/2017/02/14/%E2%98%AF-espaco-no-modo-matematico/