代码之家  ›  专栏  ›  技术社区  ›  Markiian Benovskyi

如何将STT文件流式传输到IBM Watson(Unity)?

  •  1
  • Markiian Benovskyi  · 技术社区  · 8 年前

    IBM Watson Unity SDK

    web上有一些关于如何将文件发送到IBM Watson的示例。

    但是没有确切的例子来说明如何将一个长文件分割成多个部分。所以我想做的是: 我有一个日志音频文件(约1-3分钟),并想把它发送给沃森,以识别语音。

    IBM Watson只接受<5mb文件,但我的文件更大,所以我需要将其拆分并作为部分发送。

    private void OnAudioLoaded (AudioClip clip)
    {
        Debug.Log ("Audio was loaded and starting to stream...");
        _chunksCount = 0;
    
        float[] clipData = new float[(int)(clip.length * CHUNK_SIZE)];
        clip.GetData (clipData, 1);
    
        try {
            _speechToText.StartListening (OnRecognize);
    
            for (int i = 0; i < Math.Ceiling (clip.length / SECONDS_TO_SPLIT); i++) {
                Debug.Log ("Iteration of recognition #" + i);
                _chunksCount++;
    
                // creating array of floats from clip array
                float[] chunkData = new float[SECONDS_TO_SPLIT * (int)CHUNK_SIZE];
                Array.Copy (clipData, i * SECONDS_TO_SPLIT * (int)CHUNK_SIZE, chunkData, 0, clipData.Length - i * SECONDS_TO_SPLIT * CHUNK_SIZE < SECONDS_TO_SPLIT * CHUNK_SIZE ? (int)(clipData.Length - i * SECONDS_TO_SPLIT * CHUNK_SIZE) : SECONDS_TO_SPLIT * (int)CHUNK_SIZE);
    
                // creating audioclip from floats array
                AudioClip chunk = AudioClip.Create ("ch", clip.frequency * SECONDS_TO_SPLIT, clip.channels, clip.frequency, false);
                chunk.SetData (chunkData, 0);
                AudioData audioData = new AudioData (chunk, chunk.samples);
    
                // sending recognition request
                _speechToText.OnListen (audioData);
            }
        } catch (OutOfMemoryException e) {
            DialogBoxes.CallErrorBox ("Audio Recognition Error", e.Message);
        }
    }
    

    问题是:

    _speechToText.StartListening (OnRecognize); 我在OnRecognize上分配了一个回调函数,该函数应该在识别出某个对象时调用,但从未调用过。

    有什么建议吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Markiian Benovskyi    6 年前

    数据块太小,沃森无法识别,所以我对这个特定问题的解决方案是发送更长的音频块,几秒长,大约半分钟,识别工作正常。

    这个解决方案非常古老,但它可以帮助遇到相同问题的人。