Как запустить Microsoft.CognitiveServices.Speech в Windows Server 2012 R2

Мне нужно преобразовать речь из файла WAV в текст. Поэтому я скачал пример проекта кода C# из Quickstart: распознавание речи с помощью страницы C# SDK речевого сервиса и следовал инструкциям на странице.

Он работает в Windows 10, но мне нужен проект для работы на Windows Servers 2012 R2, и он не работает на Windows Servers 2012 R2.

Когда я запускаю его на Windows Servers 2012 R2, я нажимаю клавишу 3 для опции 3. Распознавание речи с возможностью ввода файла. Но когда он пытается выполнить следующий код (с действительными значениями подписки и региона)

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

Выдается следующее исключение:

Возникла исключительная ситуация System.TypeInitializationException HResult=0x80131534 Сообщение = Инициализатор типа для 'Microsoft.CognitiveServices.Speech.Internal.carbon_csharpPINVOKE' вызвал исключение. Source = Microsoft.CognitiveServices.Speech.csharp StackTrace: в Microsoft.CognitiveServices.Speech.Internal.carbon_csharpPINVOKE.SpeechFactory_FromSubscription(строковый jarg1, строковый jarg2) в Microsoft.CognitiveSercription. Microsoft.CognitiveServices.Speech.SpeechFactory.FromSubscription(String subscriptionKey, String region) в MicrosoftSpeechSDKSamples.SpeechRecognitionSamples.d__2.MoveNext() в C:\temp\csharp_samples\speech_recognition_samples.cs: строка 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?

5 ответов

Проверьте настройки платформы для вашего проекта в Build > Configuration Manager.
Должно быть установлено значение x64 или x86, а не AnyCpu.

В настоящее время SDK сильно зависит от Windows Media Foundation. У вас есть следующие dll на образе вашего сервера: Ksuser.dll, Mf.dll, Mfcore.dll, Mfplat.dll, Mfreadwrite.dll?

Столкнулся с этой проблемой в.NET Framework 4.7.1, однако он не выдает исключение и работает в.NET Core 2.0.

Получил эту ошибку в.NET при выполнении следующей строки

var recognizer = factory.CreateSpeechRecognizer();

{"Инициализатор типа для 'Microsoft.CognitiveServices.Speech.Internal.carbon_csharpPINVOKE' вызвал исключение."}

Точно такой же код в.NET Core 2.0 создает фабрику. Также убедитесь, что установили последние распространяемые Visual C++ на 2017 год

Установка последней распространяемой Microsoft Visual C++ для Visual Studio 2017 должна исправить это, см. https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads.

(Мы обновим документы как можно скорее)

Какая жалость за эту dll. Был потерян 1 час моей жизни.

Другие вопросы по тегам