Microsoft.CognitiveServices.Speech不调用端点

问题描述 投票:0回答:1

我正在尝试将概念证明项目放在一起,只是为了看看微软的认知服务语音转录有多好。

我已经关注了他们网站上的所有示例,但到目前为止还没有成功。最初我无法让它在我现有的一个代码库x86下运行,它抛出了错误:

尝试加载格式不正确的程序

然后我创建了一个全新的.net框架x64控制台应用程序。它会启动,然后在内部崩溃使用版本1.4.0以及我尝试的其他一些版本并将此错误放入我的事件日志中:

错误应用程序名称:dotnet.exe,版本:2.1.27415.1,时间戳:0x5c672873错误模块名称:Microsoft.CognitiveServices.Speech.core.dll,版本:1.3.1.28,时间戳:0x5c764ab1异常代码:0xc0000094错误偏移量:0x000000000007567c错误进程id:0x6200错误应用程序启动时间:0x01d4f1518c240c4b错误应用程序路径:C:\ Program Files \ dotnet \ dotnet.exe错误模块路径:C:\ Users \ username.nuget \ packages \ microsoft.cognitiveservices.speech \ 1.3.1 \运行时\ WIN-64 \本地\ Microsoft.CognitiveServices.Speech.core.dll

最后我发现版本1.1.0实际上会启动,(版本1.0.0甚至不允许应用程序编译)。现在我遇到了SessionStarted和SessionStopped事件被立即调用的问题,但是没有转录发生,并且使用Fiddler它看起来好像没有在我的机器外进行调用。

除非认知服务确实是错误的,否则必须有一些我想念的简单。任何人都可以指出它吗?

我的目标是在本地网络上转录5分钟或更短的音频文件。这是我正在尝试的代码。

    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");

        var file = @"U:\path\file.wav";
        ContinuousRecognitionAsync(file).Wait();

        Console.WriteLine("End!");
    }


    public static async Task ContinuousRecognitionAsync(string audiopath)
    {
        // subscription key and service region. Replace with your own subscription key
        // and service region (e.g., "westus").
        var config = SpeechConfig.FromSubscription("<my free test key>", "westus");

        var audio = Microsoft.CognitiveServices.Speech.Audio.AudioConfig.FromWavFileInput(audiopath);


        // Creates a continuos speech recognizer using WAV input.
        using (var recognizer = new SpeechRecognizer(config, audio))
        {
            //Subscribes to events.
            recognizer.Recognizing += (s, e) =>
            {
                Console.WriteLine($"\n    Recognizing: {e.Result.Text}.");
            };

            recognizer.Recognized += (s, e) =>
            {
                Console.WriteLine($"\n    Recognized: {e.Result.Text}.");
            };
            recognizer.SessionStarted += (s, e) =>
            {
                Console.WriteLine($"\n    SessionStarted: {e.SessionId}.");
            };
            recognizer.SessionStopped += (s, e) =>
            {
                Console.WriteLine($"\n    SessionStopped: {e.SessionId}.");
            };
            recognizer.SpeechEndDetected += (s, e) =>
            {
                Console.WriteLine($"\n    SpeechEndDetected: {e.SessionId}.");
            };
            recognizer.SpeechStartDetected += (s, e) =>
            {
                Console.WriteLine($"\n    SpeechStartDetected: {e.SessionId}.");
            };
            recognizer.Canceled += (s, e) =>
            {
                Console.WriteLine($"\n    Canceled: {e.SessionId}.");
            };


            // Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
            Console.WriteLine("Say something...");
            //await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);
            await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

            Console.WriteLine("Press any key to stop");
            Console.ReadKey();

            await recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
        }
    }

编辑:经过一些更改,并在本地移动wav文件(它在映射的驱动器上),它确实短暂尝试在文件上运行转录,但没有返回有效的文本,只有空字符串。

通过麦克风转录工作正常。但是,只要我将其中一个.wav文件丢入其中,Cognitive Services就会再次崩溃,并显示异常代码:0xc0000094。我甚至尝试了一半工作的代码,现在也抛出同样的错误。

c# microsoft-cognitive
1个回答
0
投票

我发现了问题,结果证明是.wav文件本身。就像我所知,它们是有效的波形文件。如果您在Notepad ++中查看了WAV,则会在二进制文件的顶部列出WAV。但是,他们一直导致认知服务崩溃。而有一次我得到它,它无法读取它,只是开始在无限循环中运行返回空白字符串。

我通过双重转换运行文件解决了这个问题。我将它们转换为.m4a文件,然后再转换为.wav文件。一旦我这样做,他们都开始完美地工作。

我原本以为是因为我将文件远程存储在映射驱动器上。但是,一旦修复了文件,通过映射驱动器访问就可以了。

希望Microsoft能够为Cognitive Services包装器添加更好的错误处理。并允许API处理的不仅仅是wav文件类型。

© www.soinside.com 2019 - 2024. All rights reserved.