如何将 STT 文件流式传输到 IBM Watson (Unity)?
How to stream STT file to IBM Watson (Unity)?
我正在使用IBM Watson Unity SDK
网络上有一些关于如何将文件发送到 IBM Watson 的示例。
但是没有确切的例子说明如何将一个长文件分割成多个部分。所以我想做什么:
我有一个日志音频文件(大约 1-3 分钟),想将其发送给 Watson 以识别语音。
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,当识别到某些东西时应该调用它,但它永远不会被调用。
我正在测试的这个文件已经被识别,在在线网站上,肯定没问题。
有什么建议吗?
所以数字是 Watson 无法识别的数据块太小,所以我对这个特定问题的解决方案是发送更长的音频块,几秒长,大约半分钟,识别工作正常正确。
我发送的音频文件越长,收到的效果越好,但我仍然必须小于 5mb。
这个解决方案很老,但它可以帮助 运行 遇到同样问题的人。
我正在使用IBM Watson Unity SDK
网络上有一些关于如何将文件发送到 IBM Watson 的示例。
但是没有确切的例子说明如何将一个长文件分割成多个部分。所以我想做什么: 我有一个日志音频文件(大约 1-3 分钟),想将其发送给 Watson 以识别语音。
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,当识别到某些东西时应该调用它,但它永远不会被调用。
我正在测试的这个文件已经被识别,在在线网站上,肯定没问题。
有什么建议吗?
所以数字是 Watson 无法识别的数据块太小,所以我对这个特定问题的解决方案是发送更长的音频块,几秒长,大约半分钟,识别工作正常正确。
我发送的音频文件越长,收到的效果越好,但我仍然必须小于 5mb。
这个解决方案很老,但它可以帮助 运行 遇到同样问题的人。