Determinando como o áudio é semelhante ao discurso humano

12

Enquanto procurava uma resposta para esse problema, encontrei este fórum, então decidi postar essa questão minha no Stack Overflow.


Estou procurando um método para determinar a semelhança entre um segmento de áudio e uma voz humana, que é expressa numericamente.

Pesquisei bastante, mas o que encontrei até agora (detalhado abaixo) não se encaixa realmente no que preciso:

  • Um método é usar o software de reconhecimento de fala para obter palavras de um segmento de áudio. No entanto, esse método é incapaz de apresentar como o áudio "semelhante" é ao discurso humano; geralmente é possível saber se há ou não palavras no áudio, mas se não houver palavras definidas, não é possível saber se o áudio deve ter essas palavras.
    Exemplos: CMU Sphinx , Dragonfly , SHoUT

  • O método mais promissor é conhecido como VAD ( Voice Activity Detection ). No entanto, isso tende a ter os mesmos problemas: os algoritmos / programas que usam VAD tendem a retornar apenas se o limite de atividade foi atingido ou não, e nenhum valor de "similaridade" antes ou depois desse limite. Alternativamente, muitos apenas procuram volume, não semelhança com a fala humana.
    Exemplos: Speex , Listener , FreeSWITCH


Alguma ideia?

Jeff Gortmaker
fonte
1
Na sua pergunta, não está claro se o problema é A / faça uma gravação de áudio e diga se ela contém fala humana ou não (exemplo de aplicação: detecte e remova o DJ talk da gravação de um programa de rádio); ou B / pegue a entrada de fala e diz o quão semelhante soa a um segmento de áudio de referência. Caso seja B, em quais critérios você deseja medir a semelhança. No contorno da melodia? (por exemplo: combinando uma voz cantada com uma música). Nas aulas de ritmo e cluster? (por exemplo: combinar beatboxing / onomatopéia com um loop de bateria). No timbre? (combinando uma voz ao efeito sonoro). Por favor, diga-nos a sua aplicação.
Pichenettes
Desculpe, meu problema é o que você detalhou em A. Desejo determinar se um segmento de áudio é ou não um discurso humano.
Jeff Gortmaker
1
Estou trabalhando em um problema relacionado - tentando determinar quando os sons do ronco / respiração foram "poluídos" pela fala ou pela música. É frustrantemente difícil fazer isso com qualquer confiabilidade e sem recorrer a algoritmos de reconhecimento de fala "avançados" (se eles, de fato, funcionariam). Minha única observação seria que a fala tende a ter um ritmo irregular, enquanto a música é (geralmente) regular. Talvez valha a pena verificar isso e talvez "achatamento espectral" (ainda estou avaliando seus méritos para meus propósitos).
Daniel R Hicks
(Um cabelo mais detalhes: Eu acho que o desvio padrão normalizado de nivelamento espectral calculado a partir da FFT do áudio parece refletir algo de qualidade de áudio.)
Daniel R Hicks

Respostas:

6

Esse tipo de problema geralmente é resolvido usando técnicas de aprendizado de máquina.

Divida o sinal em uma sequência de quadros de 20 ms ou 50 ms. Extrair recursos em cada quadro. Os MFCC geralmente são bons para esse tipo de aplicação, embora existam recursos mais específicos para a detecção de voz (energia de modulação de 4 Hz - que é aproximadamente a taxa na qual as pessoas falam; taxa de cruzamento zero).

Em seguida, usando um conjunto de treinamento de áudio que você rotulou manualmente como fala / não fala, treine um classificador (modelos de mistura gaussiana, SVM ...) nos recursos de quadros.

Isso permitirá que você classifique os quadros não rotulados em classes de fala / não fala. A última etapa consiste em suavizar as decisões (é provável que um quadro classificado como não-discurso cercado por centenas de quadros de fala seja um erro de classificação), por exemplo, usando HMMs ou apenas um filtro mediano.

Algumas referências:

Classificação robusta de fala / música em documentos de áudio (Pinquier e cols.) Discriminação de fala / música para aplicativos multimídia (El-Maleh e cols) Uma comparação de recursos para discriminação de fala / música (Carey e cols)

Observe que os recursos e as técnicas de classificação que eles descrevem também são relevantes para o problema de classe 1 de detecção de fala (em vez de discriminar fala versus outra coisa). Nesse caso, você pode usar técnicas de modelagem de 1 classe, como SVM de 1 classe, ou apenas obter a pontuação de probabilidade de um GMM treinado em dados de fala como uma medida de "fala".

Se, por outro lado, seu problema é realmente discriminar a fala em relação a outra coisa (digamos, música), você também pode usar abordagens não supervisionadas, focadas em detectar os limites entre conteúdos de áudio semelhantes - em vez de identificar esse conteúdo em si.

pichenettes
fonte
Obrigado, isso ajuda muito! Qual é o benefício de dividir o sinal em pequenas janelas? Como a saída que estou procurando é um valor numérico que descreve todo o segmento de áudio, seria melhor extrair recursos para todo o sinal e não apenas janelas específicas?
Jeff Gortmaker
A computação dos recursos (particularmente os espectrais ou cepstrais) em janelas muito longas média ou cancelaria algumas das propriedades que destacam a fala. Você pode verificar isso misturando vários fragmentos curtos de fala - será difícil reconhecer o resultado como fala. Portanto, é melhor executar a classificação em pequenos segmentos; e, no seu caso, agregue as pontuações (por exemplo, calcule a média da pontuação de probabilidade fornecida por um GMM; ou calcule a% de quadros classificados como fala por um classificador binário).
Pichenettes
Para ser mais preciso, lembre-se de que a dimensão temporal é "recolhida" quando você olha para um espectro. Por exemplo, o espectro de potência de um tom de 500 Hz seguido no tempo por um tom de 1kHz é semelhante ao espectro de potência desses dois tons reproduzidos simultaneamente; portanto, o espectro de potência, em uma janela longa, de um sinal que muda muito pode não parecer muito representativo do conteúdo do sinal.
Pichenettes