PlatformNotSupportedException Использование распознавания речи .NET - PullRequest
3 голосов
/ 16 марта 2012

Итак, я пробую распознавание голоса для C #, я использую System.Speech.Recognition, и я искал в интернете, пробуя несколько фрагментов кода для некоторого базового распознавания речи, лучшее, что я мог найти было это:

using System;
using System.Text;
using System.Windows.Forms;
using System.Speech.Recognition;

namespace SpeechRecognition
{
    public partial class MainForm : Form
    {

        SpeechRecognitionEngine recognitionEngine; 


        public MainForm()
        {
            InitializeComponent();

            Initialize();
        }

        private void Initialize()
        {
            recognitionEngine = new SpeechRecognitionEngine();
            recognitionEngine.SetInputToDefaultAudioDevice();
            recognitionEngine.SpeechRecognized += (s, args) =>
            {
                foreach (RecognizedWordUnit word in args.Result.Words)
                {
                    // You can change the minimun confidence level here
                    if (word.Confidence > 0.8f)
                        freeTextBox.Text += word.Text + " ";
                }
                freeTextBox.Text += Environment.NewLine;
            };
        }

        private void startButton_Click(object sender, EventArgs e)
        {
            try
            {
                recognitionEngine.UnloadAllGrammars();
                recognitionEngine.LoadGrammar(new DictationGrammar());
                RecognitionResult result = recognitionEngine.Recognize(new TimeSpan(0, 0, 20));

                if (result != null)
                {
                    foreach (RecognizedWordUnit word in result.Words)
                    {

                        freeTextBox.Text += word.Text + " ";
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void startAsyncButton_Click(object sender, EventArgs e)
        {
            recognitionEngine.UnloadAllGrammars();
            recognitionEngine.LoadGrammar(new DictationGrammar());
            recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
        }



        private void stopButton_Click(object sender, EventArgs e)
        {
            recognitionEngine.RecognizeAsyncStop();
        }


        private void startAsyncGrammarButton_Click(object sender, EventArgs e)
        {         
            try
            {
                recognitionEngine.UnloadAllGrammars();

                Grammar cg = CreateSampleGrammar();
                recognitionEngine.LoadGrammar(cg);
                recognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        private Grammar CreateSampleGrammar()
        {
            Choices commandChoices = new Choices("Calculator", "Notepad", "Internet Explorer", "Paint");
            GrammarBuilder grammarBuilder = new GrammarBuilder("Start");
            grammarBuilder.Append(commandChoices);
            Grammar g = new Grammar(grammarBuilder);
            g.Name = "Available programs";
            return g;
        }

    }
}

Теперь я попробовал это и некоторые другие, и все они привели к одной и той же ошибке, PlatformNotSupportedException, в сообщении об ошибке «Нет установленного распознавателя».

Есть ли способ обойти это? Я использую Windows 7 64 бит.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Speech Platform Runtime 11 и Speech Platform SDK 11 не включают языки времени исполнения для распознавания речи или для синтеза речи (TTS или преобразования текста в речь).Вы должны установить их отдельно.Runtime Language включает языковую модель, акустическую модель и другие данные, необходимые для обеспечения речевого механизма для выполнения распознавания речи или TTS на определенном языке.Существуют отдельные языки времени исполнения для распознавания речи или синтеза речи.Загружаемая вами версия Runtime Languages ​​(например, версия 11.0) должна соответствовать установленной вами версии Speech Platform Runtime.Вы можете скачать Runtime Languages ​​ по этой ссылке .

С http://msdn.microsoft.com/en-us/library/hh362873.aspx.

Я думаю, что вы используете версию, поставляемую с .NET, но тамс тех пор было выпущено несколько ревизий.Microsoft Speech Services v11 является текущей версией на сегодняшний день.Если вы устанавливаете SDK, добавляете ссылку и изменяете свое пространство имен на Microsoft.Speech (вместо System.Speech), вы должны быть обновлены.

0 голосов
/ 12 мая 2017

У меня была такая же проблема. Я только что запустил VisualStudio в режиме отладки x86, а System.Speech.dll использовался для x64. В режиме Release (x64) все заработало. Возможно, у вас такая же проблема с настройкой CPU Architecture и System.Speech.dll.

0 голосов
/ 16 марта 2012

Какую версию Windows 7 вы используете? Какой язык?

Можете ли вы использовать встроенные в Windows 7 функции диктовки? Работает ли у вас приложение панели управления распознаванием речи? Смотри http://windows.microsoft.com/en-US/windows7/Setting-speech-options

Я думал, что все версии Windows 7 должны поставляться с предустановленным распознавателем. Однако, если вы используете неподдерживаемый язык, он не может.

С https://stackoverflow.com/a/2998963/90236:

Вы можете использовать API для запроса и определения установленного Рабочий стол Recongizers: System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers ()

Я обнаружил, что могу посмотреть, какие распознаватели установлены, посмотрев в разделах реестра: распознаватели рабочего стола: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech \ распознования \ токенов

Если вы хотите попробовать очень простую программу, которая может помочь, см. https://stackoverflow.com/a/4737003/90236

...