.NET 표준에서 음성 인식 시도(System.Speech.Recognition)
16512 단어 System.Speech.RecognitionC#.NET음성 인식
소개
안녕하세요, 여유롭게 엔지니어의 츠츠입니다.
블로그 을 운영하고 있으므로 좋으면 봐 주세요.
대상물 호출과 그에 대한 지시를 동시에 인식하는 샘플을 써 보았습니다.
매우 쉽게 구현할 수 있으므로 꼭 시도해보십시오.
실행 결과
사용법
アセンブリ
에서 System.Speech
를 추가하십시오. VoiceCommand를 인스턴스화하고 Open() 메서드를 호출합니다.
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test
{
public class Program
{
static void Main(string[] args)
{
using (var vc = new VoiceCommand())
{
vc.Open();
System.Console.ReadKey();
}
}
}
}
VoiceCommand.cs는 리소스를 사용하므로 IDispose를 구현하거나 Open/Close 메서드를 구현합니다.
Choices를 사용하여 등록한 단어만 인식하고 있습니다 (자유 문법이라면 구문 분석이 필요하기 때문에). DictationGrammar 등을 사용하면 자유 문법으로 음성 인식이 가능합니다.
VoiceCommand.cs
using System;
using System.Linq;
using System.Speech.Recognition;
namespace test
{
public class VoiceCommand : IDisposable
{
SpeechRecognitionEngine engine1;
SpeechRecognitionEngine engine2;
static string[] AwakeWord = new string[] { "佐藤さん", "田中さん", "佐々木さん" };
static string[] SilentWords = new string[] { "静かにして", "黙って" };
static string[] TalkWords = new string[] { "喋っていいよ", "声出していいよ" };
public VoiceCommand()
{
}
public void Open()
{
// 呼び出し
Choices awake = new Choices(AwakeWord);
this.engine1 = Open(new GrammarBuilder(awake));
// 指示
Choices actions = new Choices();
actions.Add(SilentWords);
actions.Add(TalkWords);
GrammarBuilder gb = new GrammarBuilder();
gb.Append(awake);
gb.Append(actions);
this.engine2 = Open(gb);
}
private SpeechRecognitionEngine Open(GrammarBuilder gb)
{
var engine = new SpeechRecognitionEngine();
// 音声認識が認識処理を終えたときのイベントハンドラを設定する。
engine.SpeechRecognized += recogEngine_SpeechRecognized;
// 音声認識が推定処理を終えたときのイベントハンドラを設定する。
engine.SpeechHypothesized += recogEngine_SpeechHypothesized;
// SystemSpeech を利用したディクテーションを行う場合には、
engine.LoadGrammar(new Grammar(gb));
// 実行環境の標準の入力を音声認識エンジンの入力とする。
engine.SetInputToDefaultAudioDevice();
// 非同期の認識を継続して実行するようにして音声認識を開始する。
engine.RecognizeAsync(RecognizeMode.Multiple);
return engine;
}
public void Close()
{
if (this.engine2 != null)
{
this.engine2.SpeechRecognized -= recogEngine_SpeechRecognized;
this.engine2.SpeechHypothesized -= recogEngine_SpeechHypothesized;
this.engine2.Dispose();
this.engine2 = null;
}
if (this.engine1 != null)
{
this.engine1.SpeechRecognized -= recogEngine_SpeechRecognized;
this.engine1.SpeechHypothesized -= recogEngine_SpeechHypothesized;
this.engine1.Dispose();
this.engine1 = null;
}
}
public void Dispose()
{
this.Close();
}
private void recogEngine_SpeechHypothesized(object sender, SpeechHypothesizedEventArgs e)
{
System.Console.WriteLine("○" + e.Result.Text + "(" + e.Result.Confidence + ")");
}
private void recogEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
System.Console.WriteLine("●" + e.Result.Text + "(" + e.Result.Confidence + ")");
// 処理を分ける
bool isSilent = SilentWords.Any(x => e.Result.Text.Contains(x));
bool isTalk = TalkWords.Any(x => e.Result.Text.Contains(x));
if (isSilent)
System.Console.WriteLine("☆静かにしよう!");
else if (isTalk)
System.Console.WriteLine("☆話してOK!");
else
System.Console.WriteLine("☆呼ばれましたよ");
}
}
}
끝에
좋으면 블로그 「초보자용 Unity 정보 사이트」(분)편에도 여러가지 기재하고 있으므로 꼭 참조해 주시면 좋겠습니다.
Reference
이 문제에 관하여(.NET 표준에서 음성 인식 시도(System.Speech.Recognition)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kingyo222/items/3de337f4ce4d382a5325
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(.NET 표준에서 음성 인식 시도(System.Speech.Recognition)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kingyo222/items/3de337f4ce4d382a5325텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)