如何在Windows Server 2012 R2上运行Microsoft.CognitiveServices.Speech

时间:2018-05-14 21:49:52

标签: c# speech-recognition microsoft-cognitive

我需要将语音从wav文件转换为文本。所以我从Quickstart: Recognize speech using Speech service C# SDK页面下载了示例C#代码项目,并按照页面上的说明进行操作。

它适用于Windows 10,但我需要该项目才能在Windows Server 2012 R2上运行,并且它无法在Windows Server 2012 R2上运行。

当我在Windows Servers 2012 R2上运行它时,按3键 3。带文件输入的语音识别选项。但是当它尝试执行以下代码(具有有效的订阅和区域值)时

var factory = SpeechFactory.FromSubscription("YourSubscriptionKey", "YourServiceRegion");

抛出以下异常:

发生了System.TypeInitializationException   的HResult = 0x80131534   Message =' Microsoft.CognitiveServices.Speech.Internal.carbon_csharpPINVOKE'的类型初始值设定项。抛出一个例外。   来源= Microsoft.CognitiveServices.Speech.csharp   堆栈跟踪:    在Microsoft.CognitiveServices.Speech.Internal.carbon_csharpPINVOKE.SpeechFactory_FromSubscription(String jarg1,String jarg2)    在Microsoft.CognitiveServices.Speech.Internal.SpeechFactory.FromSubscription(String subscription,String region)    在Microsoft.CognitiveServices.Speech.SpeechFactory.FromSubscription(String subscriptionKey,String region)    在C:\ temp \ csharp_samples \ speech_recognition_samples.cs中的MicrosoftSpeechSDKSamples.SpeechRecognitionSamples.d__2.MoveNext():第86行

内部例外1: TypeInitializationException:' SWIGExceptionHelper'的类型初始值设定项抛出异常。

内部例外2: DllNotFoundException:无法加载DLL' Microsoft.CognitiveServices.Speech.csharp.bindings.dll':找不到指定的模块。 (HRESULT异常:0x8007007E)

我认为Microsoft.CognitiveServices.Speech.csharp.bindings.dll不喜欢在Windows Server 2012 R2上运行,因为它存在于bin文件夹中(并且不会丢失)并且可以在Windows上运行10.我在一个小的Hello World控制台项目中编写了以下代码,它在Windows Server 2012 R2上运行了相同的异常。

class Program
{
    [DllImport("Microsoft.CognitiveServices.Speech.csharp.bindings.dll", CharSet = CharSet.None, EntryPoint = "CSharp_MicrosoftfCognitiveServicesfSpeechfInternal_TRANSLATION_LANGUAGE_RESOURCE_SCOPE_SPEECH_get___", ExactSpelling = false)]
    public static extern int TRANSLATION_LANGUAGE_RESOURCE_SCOPE_SPEECH_get();

    static void Main(string[] args)
    {
        int test = TRANSLATION_LANGUAGE_RESOURCE_SCOPE_SPEECH_get();
        Console.WriteLine($"API value: {test}");
    }
}

我已尝试以管理员身份运行,以防它是权限。但那并没有做任何事情。

有人可以帮助我吗?告诉我在Windows Server 2012 R2上运行语音服务示例需要做些什么?

4 个答案:

答案 0 :(得分:1)

在“构建”>“配置管理器”中检查项目的平台设置。
必须将其设置为x64或x86,而不是AnyCpu。

答案 1 :(得分:0)

为Visual Studio 2017安装最新的Microsoft Visual C ++ Redistributable应该修复它,请参阅https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

(我们会尽快更新文档)

答案 2 :(得分:0)

目前,SDK对Windows Media Foundation有很强的依赖性。你的服务器镜像上是否有以下dll:Ksuser.dll,Mf.dll,Mfcore.dll,Mfplat.dll,Mfreadwrite.dll?

答案 3 :(得分:0)

.NET Framework 4.7.1遇到了此问题,但是它不会引发异常,并且可以在.NET Core 2.0中工作

执行以下行时,.NET中出现此错误

var recognizer = factory.CreateSpeechRecognizer();
  

{“用于   'Microsoft.CognitiveServices.Speech.Internal.carbon_csharpPINVOKE'   引发异常。“}

.NET Core 2.0中完全相同的代码创建了工厂。还确保安装了2017年最新的Visual C ++可再发行组件