Tópicos Avançados em Media Digitais
Tópicos Avançados em Media Digitais es un curso tutoriado.
Felizmente para mim, o meu tutor é também o diretor do programa, Dr. António Coelho.
António Fernando Coelho é Professor Universitário desde 1996 e investigador do INESC TEC (anterior INESC Porto), desde 1995, sendo atualmente o coordenador da área da Computação Gráfica e Ambientes Virtuais.
A área científica da Computação Gráfica tem sido o foco de todo o seu percurso académico, realizado na FEUP, desde a sua licenciatura em 1994, passando pela dissertação de mestrado em “Integração de Som 3D em Simulação” em 1997, e a tese de doutoramento initulada “Modelação Expedita de Ambientes Urbanos Virtuais Baseada em Interoperabilidade e Contextualização Geoespacial” em 2006.
Concluiu as suas provas de agregação em 2018 apresentando a lição de síntese “Os desafios da Modelação Procedimental de Ambientes Urbanos” e a unidade curricular “Introdução à Programação Criativa”.
Ao nível do Ensino, a sua carreira como Professor Universitário tem como foco principal o ensino da Computação Gráfica, dos Jogos Digitais e da Programação. É coautor do primeiro livro de Introdução à Computação Gráfica em língua portuguesa.
A sua atividade de investigação foca-se nas seguintes áreas:
Computação Gráfica: Modelação Procedimental, Realidade Virtual e Aumentada;
Media Digitais Interativos: Jogos Digitais, Ludificação, Geração Procedimental de comteúdos e Aprendizagem Baseada em Jogos;
Sistemas Geoespaciais.
Neste espaço espero avançar meu projeto de pesquisa de uma forma abrangente. Ou seja, conectar os aspectos teóricos, práticos e críticos presentes no desenvolvimento da minha tese.
Por isso convergem aqui os conteúdos das outras três disciplinas das quais participo neste semestre.
Como primeira abordagem prática, procurarei desenvolver um programa que permita controlar a estrutura dos sons tocados em tempo real, por meio de análises sentimentais sobre o reconhecimento contínuo da voz de um usuário.
Em geral, pretendo fazer algo assim.
Speech Recognition(Speech to Text)
No mundo Open Source exsiten diversas alternativas que podemos utilizar para novos propósitos.
Julius: Provavelmente um dos mais antigos softwares de reconhecimento de voz de todos os tempos; Seu desenvolvimento começou em 1991 na Universidade de Kyoto, e então sua propriedade foi transferida como um projeto independente em 2005. Muitos aplicativos de código aberto o utilizam como mecanismo. É escrito em C e funciona em Linux, Windows, macOS e até Android (em smartphones). Atualmente ele suporta apenas os idiomas inglês e japonês.
Kaldi: Seu desenvolvimento começou em 2009. É um software de reconhecimento de voz de código aberto escrito em C ++ e “empacotado” por scripts Bash ou Python. Ele é lançado sob a licença pública Apache. Funciona em Windows, macOS e Linux. C ++, é “embrulhado” por scripts Bash e Python.
OpenSeq2Seq: Desenvolvido pela NVIDIA para treinamento de modelos sequência a sequência. Você pode construir seus próprios modelos de treinamento usando-o ou usar os modelos Jasper, Wave2Letter + e DeepSpeech2 que são enviados por padrão. Ele suporta processamento paralelo usando várias GPUs / CPUs múltiplas, além de um suporte pesado para algumas tecnologias NVIDIA como CUDA e suas placas gráficas fortes.
Vosk: Um dos mais novos sistemas de reconhecimento de voz de código aberto, já que seu desenvolvimento começou apenas em 2020. Ao contrário de outros sistemas nesta lista, Vosk está pronto para uso após a instalação, pois suporta 10 idiomas (inglês, alemão, francês, turco …) com modelos portáteis de 50 MB já disponíveis para os usuários (existem outros modelos maiores de até 1,4 GB, se necessário). Ele também funciona em Raspberry Pi, dispositivos iOS e Android, e fornece uma API de streaming que permite que você se conecte a ele para fazer suas tarefas de reconhecimento de voz online. Vosk tem vínculos para Java, Python, JavaScript, C # e NodeJS.
Project DeepSpeech: Este projeto é feito pela Mozilla; É uma biblioteca de fala em texto 100% gratuita e de código aberto que também implica a tecnologia de aprendizado de máquina usando o framework TensorFlow para cumprir sua missão.
O projeto de reconhecimento de voz também considera um banco de dados aberto com vozes integradas aos sistemas.
Data Mining (Text scoring)
Nesta parte, o que precisamos é ser capaz de analisar o texto escrito (com certeza no futuro, podemos pular esta etapa e analisar o áudio diretamente, mas por agora parece uma boa aproximação).
Existem vários métodos e dicionários para avaliar a opinião ou emoção no texto.
Três léxicos de uso geral são:
AFINN
de Finn Årup Nielsen,bing
de Bing Liu and collaborators, enrc
de Saif Mohammad and Peter Turney.
Todos os três léxicos são baseados em unigramas, ou seja, palavras únicas. Esses léxicos contêm muitas palavras que são pontuações. O léxico nrc
categoriza as palavras de uma forma binária (“sim” / “não”) em categorias de positivo, negativo, raiva, antecipação, repulsa, medo, alegria, tristeza, surpresa e confiança. O léxico bing
categoriza palavras de forma binária em categorias positivas e negativas. O léxico AFINN
atribui palavras com uma pontuação que varia entre -5 e 5, com pontuações negativas indicando sentimento negativo e pontuações positivas indicando sentimento positivo.
Como exemplo, digamos que falamos ao microfone e dissemos “Espero que não seja horrível”. Isso seria 2 pontos para “esperança” e -3 pontos para “horrendo”, o que tornaria nossa sentença negativa com -1 pontos. Todas as outras palavras que não estão na lista, nós ignoraríamos para pontuar.
Tecnicamente, o que temos que fazer é analisar o arquivo e convertê-lo em um arquivo JSON com a palavra e somar cada uma das pontuações associadas.
Felizmente, isso já foi feito por Andrew Sliwinski e sua contribuição de Open Source Sentiment
Eu também encontrei uma versão multilíngue.
🙂
Sound Synthesis (Procedural Audio)
WebPD is a 100% JavaScript Pure Data runtime using Web Audio API to play audio in the browser. It aims at allowing a subset of Pure Data programming language to run in the browser without plugins and with best possible performance.
Agora que sabemos o que usaremos, podemos ver as tarefas como:
- O navegador escuta o usuário e retorna algum texto usando Mozilla Web Speech API
- It faz uma solicitação ao servidor Node.js com o texto
- The servidor avalia o texto usando a lista de AFINN e retorna a pontuação
- A pontuação é recebida pelo cliente (navegador) que se comunica com o patch PD montado no servidor.
- O patch interage com a API de áudio da Web para fazer a síntese
1) O navegador escuta o usuário e retorna algum texto usando Mozilla Web Speech API
The first thing to do is define a speech recogntion instance to control the recognition for our application. This is done using the SpeechRecognition()
constructor.
We also set a few other properties of the recognition instance before we move on:
SpeechRecognition.continuous
: Controls whether continuous results are captured (true
), or just a single result each time recognition is started (false
).SpeechRecognition.lang
: Sets the language of the recognition. Setting this is good practice, and therefore recommended.
Once the speech recognition is started, there are many event handlers that can be used to retrieve results, and other pieces of surrounding information (see the SpeechRecognition
event handlers list.) The most common one you’ll probably use is SpeechRecognition.onresult
, which is fired once a successful result is received:
The SpeechRecognitionEvent.results
property returns a SpeechRecognitionResultList
object containing SpeechRecognitionResult
objects. It has a getter so it can be accessed like an array — so the first [0]
returns the SpeechRecognitionResult
at position 0.
We then return its transcript
property to get a string containing the individual recognised result as a string,
2) It faz uma solicitação ao servidor Node.js com o texto