У меня есть этот код, относящийся к модальности, которая генерирует грамматику и отправляет сообщение в IM (модальность взаимодействия). Но каждый раз, когда я запускаю программу, у меня есть это освобождение. Я уже видел несколько решений, таких как компьютер с неправильными настройками COM, и я изменился, и ничего не изменилось, он не запускается.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using mmisharp;
using Microsoft.Speech.Recognition;
namespace speechModality
{
public class SpeechMod
{
private SpeechRecognitionEngine sre;
private Grammar gr;
public event EventHandler<SpeechEventArg> Recognized;
protected virtual void onRecognized(SpeechEventArg msg)
{
EventHandler<SpeechEventArg> handler = Recognized;
if (handler != null)
{
handler(this, msg);
}
}
private LifeCycleEvents lce;
private MmiCommunication mmic;
public SpeechMod()
{
//init LifeCycleEvents..
lce = new LifeCycleEvents("ASR", "FUSION","speech-1", "acoustic", "command"); // LifeCycleEvents(string source, string target, string id, string medium, string mode)
//mmic = new MmiCommunication("localhost",9876,"User1", "ASR"); //PORT TO FUSION - uncomment this line to work with fusion later
mmic = new MmiCommunication("localhost", 8000, "User1", "ASR"); // MmiCommunication(string IMhost, int portIM, string UserOD, string thisModalityName)
mmic.Send(lce.NewContextRequest());
//load pt recognizer
sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("pt-PT"));
gr = new Grammar(Environment.CurrentDirectory + "\\ptG.grxml", "rootRule");
sre.LoadGrammar(gr);
sre.SetInputToDefaultAudioDevice();
sre.RecognizeAsync(RecognizeMode.Multiple);
sre.SpeechRecognized += Sre_SpeechRecognized;
sre.SpeechHypothesized += Sre_SpeechHypothesized;
}
private void Sre_SpeechHypothesized(object sender, SpeechHypothesizedEventArgs e)
{
onRecognized(new SpeechEventArg() { Text = e.Result.Text, Confidence = e.Result.Confidence, Final = false });
}
private void Sre_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
onRecognized(new SpeechEventArg(){Text = e.Result.Text, Confidence = e.Result.Confidence, Final = true});
//SEND
// IMPORTANT TO KEEP THE FORMAT {"recognized":["SHAPE","COLOR"]}
string json = "{ \"recognized\": [";
foreach (var resultSemantic in e.Result.Semantics)
{
json+= "\"" + resultSemantic.Value.Value +"\", ";
}
json = json.Substring(0, json.Length - 2);
json += "] }";
var exNot = lce.ExtensionNotification(e.Result.Audio.StartTime+"", e.Result.Audio.StartTime.Add(e.Result.Audio.Duration)+"",e.Result.Confidence, json);
mmic.Send(exNot);
}
}
}
Ошибка:
System.Runtime.InteropServices.COMException: 'Не удалось получить фабрику классов COM из компонента с CLSID {49428A60-C997-4D0E-9808-9E326C178D58} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 ( REGDB_E_CLASSNOTREG)). «