vb.net - 有没有办法在 vb 控制台应用程序中运行语音识别?
问题描述
我正在尝试创建一个程序,可以识别用户在说什么,并据此决定要做什么,但我似乎无法在互联网上找到任何代码在 vb.net 和控制台应用程序。甚至可以用非面向对象的语言来完成它并且在控制台应用程序中没有任何事件吗?
我尝试将 c# 控制台代码转换为 vb.net 控制台代码,但由于从面向对象的编程语言转换为非面向对象的语言的问题,它没有说话。
我也试图让它以一种形式运行,但这不起作用,因为它找到了语法文件,但未能将其识别为一个
这是我尝试过的代码: 1. 我的 VB 表单代码
Imports System.Speech
Imports System.Speech.Recognition
Public Class Form1
Dim WithEvents recog As New Recognition.SpeechRecognitionEngine
Private Sub setcolo(ByVal colour As System.Drawing.Color)
Dim synth As New Synthesis.SpeechSynthesizer
Me.BackColor = colour
End Sub
2.我翻译的C#代码
Imports System, System.Speech.Recognition, System.Speech.Synthesis, System.Globalization
Module Module1
Dim ss As New System.Speech.Synthesis.SpeechSynthesizer
Dim sre As Speech.Recognition.SpeechRecognitionEngine
Dim done As Boolean = False
Dim speechOn As Boolean = True
Sub Main(args As String)
Try
ss.SetOutputToDefaultAudioDevice()
Console.WriteLine("\n(Speaking: I am awake)")
ss.Speak("I am awake")
Dim ci = New CultureInfo("en-us")
sre = New Speech.Recognition.SpeechRecognitionEngine(ci)
sre.SetInputToDefaultAudioDevice()
'sre.SpeechRecognized = sre.SpeechRecognized + sre_SpeechRecognized()
Dim ch_StartStopCommands As Speech.Recognition.Choices = New Speech.Recognition.Choices
ch_StartStopCommands.Add("speech on")
ch_StartStopCommands.Add("speech off")
ch_StartStopCommands.Add("klatu barada nikto")
Dim gb_StartStop As Speech.Recognition.GrammarBuilder = New Speech.Recognition.GrammarBuilder()
gb_StartStop.Append(ch_StartStopCommands)
Dim g_StartStop As Speech.Recognition.Grammar = New Speech.Recognition.Grammar(gb_StartStop)
Dim ch_Numbers As Speech.Recognition.Choices = New Speech.Recognition.Choices()
ch_Numbers.Add("1")
ch_Numbers.Add("2")
ch_Numbers.Add("3")
ch_Numbers.Add("4")
Dim gb_WhatIsXplusY As Speech.Recognition.GrammarBuilder = New Speech.Recognition.GrammarBuilder()
gb_WhatIsXplusY.Append("What is")
gb_WhatIsXplusY.Append(ch_Numbers)
gb_WhatIsXplusY.Append("plus")
gb_WhatIsXplusY.Append(ch_Numbers)
Dim g_WhatIsXplusY As Speech.Recognition.Grammar = New Speech.Recognition.Grammar(gb_WhatIsXplusY)
sre.LoadGrammarAsync(g_StartStop)
sre.LoadGrammarAsync(g_WhatIsXplusY)
sre.RecognizeAsync(Speech.Recognition.RecognizeMode.Multiple)
While (done = False)
End While
Console.WriteLine("\nHit <enter> to close shell\n")
Console.ReadLine()
Catch ex As Exception
Console.WriteLine(ex.Message)
Console.ReadLine()
End Try
End Sub
Function sre_SpeechRecognized(sender As Object, e As Speech.Recognition.SpeechRecognizedEventArgs)
Dim txt As String = e.Result.Text
Dim confidence As Double = e.Result.Confidence
Console.WriteLine("\nRecognized: " & txt)
If (confidence < 0.6) Then Return ""
If (txt.IndexOf("speech on") >= 0) Then
Console.WriteLine("Speech is now ON")
speechOn = True
End If
If (txt.IndexOf("speech off") >= 0) Then
Console.WriteLine("Speech is now OFF")
speechOn = False
End If
If (speechOn = False) Then Return ""
If (txt.IndexOf("klatu") >= 0 And txt.IndexOf("barada") >= 0) Then
'((SpeechRecognitionEngine)sender).RecognizeAsyncCancel()
done = True
Console.WriteLine("(Speaking: Farewell)")
ss.Speak("Farewell")
End If
If (txt.IndexOf("What") >= 0 And txt.IndexOf("plus") >= 0) Then
Dim words() As String = txt.Split(" ")
Dim num1 As Integer = Int(words(2))
Dim num2 As Integer = Int(words(4))
Dim sum As Integer = num1 + num2
Console.WriteLine("(Speaking: " & words(2) & " plus " & words(4) & " equals " & sum & ")")
ss.SpeakAsync(words(2) & " plus " & words(4) & " equals " & sum)
End If
Return ""
End Function
End Module
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
recog.SetInputToDefaultAudioDevice()
Dim gram As New Recognition.SrgsGrammar.SrgsDocument("D:\Voiceregogform\Voiceregogform\bin\Debug\Voiceregogform.xml")
Dim colourr As Recognition.SrgsGrammar.SrgsRule
Dim colourlist As New Recognition.SrgsGrammar.SrgsOneOf("red", "yellow", "indigo", "aqua", "green")
colourr.Add(colourlist)
gram.Rules.Add(colourr)
gram.Root = colourr
recog.LoadGrammar(New Recognition.Grammar(gram))
recog.RecognizeAsync()
End Sub
Private Sub recog_RecognizeCompleted(sender As Object, e As RecognizeCompletedEventArgs) Handles recog.RecognizeCompleted
recog.RecognizeAsync()
End Sub
Private Sub recog_SpeechRecognized(sender As Object, e As SpeechRecognizedEventArgs) Handles recog.SpeechRecognized
Select Case e.Result.Text
Case "red"
setcolo(Color.Red)
Case "yellow"
setcolo(Color.Yellow)
Case "aqua"
setcolo(Color.Aqua)
Case "green"
setcolo(Color.Green)
Case "indigo"
setcolo(Color.Indigo)
Case "blue"
setcolo(Color.Blue)
End Select
End Sub
End Class
解决方案
这是https://docs.microsoft.com/en-us/dotnet/api/system.speech.recognition.speechrecognitionengine中示例的翻译。我在自己的 Windows 10 PC 上试用了它,并且可以确认它可以工作。我使用了 Visual Studio Community 2019,并在 .NET FW 上使用了 VB 控制台应用程序的默认设置。希望这可以帮助!
附带说明一下,VB 有两种风格:(1)旧的 VBA/VB6;(2)和最新的VB.NET。VB.NET 是一种完全现代的 OOP 语言;VB.NET 和 C# 是由一个名为 Roslyn 的通用编译平台“迅速加入”的兄弟姐妹。VB6 已停产,VBA 作为 Microsoft Office 的一部分继续存在。
关于 VBA/VB6 和 OOP,请查看VBA 是一种 OOP 语言吗,它是否支持多态性?,这是一本有趣且深思熟虑的读物。
' NOTE: Must target .NET Framework, 3.0 or later (not .NET Core!)
Imports System.Console
' Make reference to System.Speech (System.Speech.dll)
' https://docs.microsoft.com/en-us/dotnet/api/system.speech.recognition.speechrecognitionengine
Imports System.Speech.Recognition
Module Program
Sub Main()
' Create an in-process speech recognizer for the en-US locale.
Using recognizer As New SpeechRecognitionEngine(
New Globalization.CultureInfo("en-US"))
' Create and load a dictation grammar.
recognizer.LoadGrammar(New DictationGrammar())
' Add a handler for the speech recognized event.
AddHandler recognizer.SpeechRecognized,
AddressOf recognizer_SpeechRecognized
' Configure input to the speech recognizer.
recognizer.SetInputToDefaultAudioDevice()
' Start asynchronous, continuous speech recognition.
recognizer.RecognizeAsync(RecognizeMode.Multiple)
' Keep the console window open.
Do
ReadLine()
Loop
End Using
End Sub
' Handle the SpeechRecognized event.
Sub recognizer_SpeechRecognized(sender As Object, e As SpeechRecognizedEventArgs)
WriteLine("Recognized text: " + e.Result.Text)
End Sub
End Module
推荐阅读
- html - 如何使用容器 (CSS) 将 twitter 嵌入“包装”到我自己的规格大小
- notepad++ - 启动时使用的 Notepad++ 工作区
- firebase - Firebase 数据库规则 - 这是必要的吗?
- python-3.x - How fast or slow is the Constant memory that Numba allows a device to allocate, when compared to local and shared memories?
- python - 如何构建一维 CNN
- python - 使用日期范围的 Scrapy Start URL
- excel - 如何在 ms excel 中使用 vlookup 功能而不会出现 REF 错误?
- java - 如何在 Velocity 模板中使用表情符号字符
- php - php通过子键值对多层深的多维数组进行排序
- python - Python中日期时间列中多个事件的持续时间