2016-03-22 6 views
1

Я пытался обернуть голову вокруг, используя sphinx4, чтобы получить неподвижное изображение для анимации, когда моя подруга говорит о twitch.tv. Что-то похожее на этого общего парня mittenz https://www.youtube.com/watch?v=L2oUE-C2g6Y Говорящий кот - это то, что я пытаюсь подражать.Попытка получить неподвижное изображение, чтобы «поговорить», когда кто-то говорит в JAVA

Я теряюсь, когда мне нужно ввести изображение в уравнение. Я использовал это в качестве примера.

`package edu.cmu.sphinx.demo.hellowrld; 
import edu.cmu.sphinx.frontend.util.Microphone; 
import edu.cmu.sphinx.recognizer.Recognizer; 
import edu.cmu.sphinx.result.Result; 
import edu.cmu.sphinx.util.props.ConfigurationManager; 
import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import models.Tts; 

public class Speech { 

    public static void main(String[] args) { 
    ConfigurationManager cm; 

    if (args.length > 0) { 
     cm = new ConfigurationManager(args[0]); 
    } else { 
     ///tmp/helloworld.config.xml 
     cm = new ConfigurationManager(Speech.class.getResource("speech.config.xml")); 

    } 
    Recognizer recognizer = (Recognizer) cm.lookup("recognizer"); 
    recognizer.allocate(); 

    Microphone microphone = (Microphone) cm.lookup("microphone"); 
    if (!microphone.startRecording()) { 
     System.out.println("Cannot start microphone."); 
     recognizer.deallocate(); 
     System.exit(1); 
    } 

    System.out.println("Say: (Hello | call) (Naam | Baam | Caam | Some )"); 

    while (true) { 
     System.out.println("Start speaking. Press Ctrl-C to quit.\n"); 

     Result result = recognizer.recognize(); 

     if (result != null) { 
      String resultText = result.getBestFinalResultNoFiller(); 
      System.out.println("You said: " + resultText + '\n'); 

       Tts ts = new Tts(); 
       try { 
        ts.load(); 
        ts.say("Did you said: " + resultText); 
       } catch (IOException ex) { 

       } 
     } else { 
      System.out.println("I can't hear what you said.\n"); 
     } 
    } 
    } 
}` 

Любая помощь будет принята с благодарностью.

ответ

0

Sphinx4 - это не подходящий инструмент для решения этой задачи. Он распознает речь, а не отдельные звуки в реальном времени. Вам нужен звуковой распознаватель, в простой форме - детектор амплитуды. Общий подход должен выглядеть следующим образом:

  1. Запишите небольшой кусок аудио, скажем, 100 мс.
  2. Рассчитать амплитуду речи (простая сумма квадратов выборок)
  3. Отобразить соответствующую картинку (рот широко открыт для громких фрагментов или закрыт в тишине).

В более продвинутой форме вы можете распознать гласные и отрегулировать изображение лица в зависимости от этого. Гласные можно распознать с помощью классификатора GMM. Вы можете даже записать несколько эмоций и отобразить их в реальном времени. В реальном времени проблема здесь, потому что вашему распознавателю требуется очень короткое время анализа, и это делает дизайн такого системного комплекса, который будет представлять собой проект на несколько месяцев. Вы можете найти более подробное описание here.