Tôi đang phát triển một bài phát biểu nguyên mẫu cho ứng dụng phụ đề văn bản cho một dự án Đại học. Tôi sẽ sử dụng nhận dạng cử chỉ trong dự án của tôi vào cuối, vì vậy tôi nghĩ rằng nên sử dụng Kinect làm nguồn micrô, thay vì sử dụng micrô bổ sung. Ý tưởng ứng dụng của tôi là để nhận ra các bài phát biểu tự phát như câu dài và phức tạp (tôi hiểu nó sẽ không phải là lời nói chính tả sẽ không hoàn hảo). Tôi đã nhìn thấy nhiều mẫu giọng nói Kinect, nơi nó làm cho một tham chiếu đến Microsoft.Speech, nhưng không phải System.Speech. Khi tôi cần đào tạo công cụ phát biểu và tải DictationGrammar vào Công cụ nhận dạng giọng nói, Microsoft.Speech là lựa chọn duy nhất cho tôi.Sử dụng System.Speech với Kinect
Tôi đã cố gắng làm cho nó hoạt động trong khi sử dụng Kinect làm nguồn âm thanh micrô trực tiếp, nhưng vì tôi đang tải Kinect để xem trước video và nhận dạng cử chỉ, tôi không thể truy cập nó dưới dạng micrô trực tiếp.
Đây là mã truy cập vào micro trực tiếp mà không cần tải phần cứng Kinect cho cử chỉ, vv, và hoạt động hoàn hảo:
private void InitializeSpeech()
{
var speechRecognitionEngine = new SpeechRecognitionEngine();
speechRecognitionEngine.SetInputToDefaultAudioDevice();
speechRecognitionEngine.LoadGrammar(new DictationGrammar());
speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
speechRecognitionEngine.SpeechRecognized += (s, args) => MessageBox.Show(args.Result.Text);
}
Và đây là nơi mà tôi cần phải truy cập vào các nguồn truy cập thông qua Kinect khi nó đã được nạp, mà không làm gì cả. Nay tôi muốn được thực hiện:
using (var audioSource = new KinectAudioSource())
{
audioSource.FeatureMode = true;
audioSource.AutomaticGainControl = false;
audioSource.SystemMode = SystemMode.OptibeamArrayOnly;
var recognizerInfo = GetKinectRecognizer();
var speechRecognitionEngine = new SpeechRecognitionEngine(recognizerInfo.Id);
speechRecognitionEngine.LoadGrammar(new DictationGrammar());
speechRecognitionEngine.SpeechRecognized += (s, args) => MessageBox.Show(args.Result.Text);
using (var s = audioSource.Start())
{
speechRecognitionEngine.SetInputToAudioStream(s, new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
speechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple);
}
}
Vì vậy, câu hỏi là, nó thậm chí có thể sử dụng System.Speech thay vì Microsoft.Speech với Kinect SDK hiện tại, và những gì tôi làm sai trong mẫu mã thứ 2 ?
GetKinectRecognizer Phương pháp
private static RecognizerInfo GetKinectRecognizer()
{
Func<RecognizerInfo, bool> matchingFunc = r =>
{
string value;
r.AdditionalInfo.TryGetValue("Kinect", out value);
return "True".Equals(value, StringComparison.InvariantCultureIgnoreCase) && "en-US".Equals(r.Culture.Name, StringComparison.InvariantCultureIgnoreCase);
};
return SpeechRecognitionEngine.InstalledRecognizers().Where(matchingFunc).FirstOrDefault();
}
Windows nhận Kinect làm đầu vào micrô, vì vậy tất cả thư viện giọng nói sẽ hoạt động tốt. Bạn có thể chạy các mẫu âm thanh/giọng nói được cung cấp cùng với Kinect SDK để xác minh thiết bị đang hoạt động không? Đoạn mã trên trông có vẻ ổn với tôi, nhưng bạn có thể đăng phương thức GetKinectRecognizer mà bạn đang gọi không? – LewisBenge
Xin chào. Xin lỗi vì trả lời muộn. Vui lòng tham khảo bản chỉnh sửa ở trên để xem phương pháp GetKinectRecognizer tôi đang sử dụng, về cơ bản là phương pháp từ mẫu Kinect. –
@LewisBenge, bạn có thấy câu trả lời của Dan Clark không? –