app/src/main/java/com/example/jarvis_stts/JarviceService.kt aktualisiert
This commit is contained in:
@@ -122,49 +122,41 @@ class JarvisService : Service(), RecognitionListener {
|
||||
|
||||
private fun resumeListening() {
|
||||
if (voskModel == null) return
|
||||
Log.d("JARVIS", "Service: Starte Zuhören (Volles Wörterbuch)")
|
||||
voskService?.stop()
|
||||
|
||||
// Wir fügen häufige deutsche Wörter und phonetische Ähnlichkeiten hinzu
|
||||
// Diese dienen als "Blitzableiter" für Fehlalarm
|
||||
val grammar = "[" +
|
||||
"\"jarvis\", " + // Wake-Words
|
||||
"\"ja\", \"nein\", \"und\", \"der\", \"die\", \"das\", " + // Füllwörter
|
||||
"\"service\", \"imbiss\", \"harnisch\", \"garvis\", \"fertig\", " + // Phonetische Fallen
|
||||
"\"[unk]\"" +
|
||||
"]"
|
||||
// GANZ WICHTIG: Keine Grammar (Wortliste) mehr übergeben!
|
||||
// Wir nutzen das volle deutsche Vokabular, um Fehlinterpretationen zu vermeiden.
|
||||
val rec = Recognizer(voskModel, 16000.0f)
|
||||
|
||||
val rec = Recognizer(voskModel, 16000.0f, grammar)
|
||||
// Wir erlauben dem Recognizer, weniger "nervös" zu sein
|
||||
// Ein höherer Wert für Small-Models kann helfen
|
||||
rec.setThreshold(0.5) // Falls deine Vosk-Version das unterstützt
|
||||
voskService = SpeechService(rec, 16000.0f)
|
||||
voskService?.startListening(this)
|
||||
|
||||
isInteracting = false
|
||||
updateNotification("Warte auf 'Jarvis'...")
|
||||
updateNotification("Warte auf 'Jarvis'")
|
||||
}
|
||||
|
||||
// In onPartialResult machen wir jetzt GAR NICHTS mehr, um Fehlalarme zu vermeiden
|
||||
override fun onPartialResult(hypothesis: String) {}
|
||||
|
||||
// Wir nutzen nur noch onResult für den echten Check
|
||||
override fun onResult(hypothesis: String) {
|
||||
override fun onPartialResult(hypothesis: String) {
|
||||
if (isInteracting) return
|
||||
|
||||
try {
|
||||
val json = JSONObject(hypothesis)
|
||||
val recognizedText = json.optString("text").lowercase().trim()
|
||||
val partialText = json.optString("partial").lowercase().trim()
|
||||
|
||||
// Nur wenn das erkannte Wort EXAKT Jarvis oder Computer ist
|
||||
if (recognizedText == "jarvis") {
|
||||
Log.d("JARVIS", "Sicheres Wake-Word erkannt: $recognizedText")
|
||||
// Regex \b bedeutet "Wortgrenze". Er sucht nach dem eigenständigen Wort.
|
||||
// Verhindert Reaktionen auf Fantasiewörter, in denen die Silben vorkommen.
|
||||
if (Regex("\\b(jarvis)\\b").containsMatchIn(partialText)) {
|
||||
Log.d("JARVIS", "WAKE WORD IM TEXT ERKANNT: $partialText")
|
||||
triggerJarvis()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("JARVIS", "Fehler: ${e.message}")
|
||||
Log.e("JARVIS", "Fehler beim Parsen: ${e.message}")
|
||||
}
|
||||
}
|
||||
|
||||
// onResult bleibt leer oder loggt nur zur Kontrolle
|
||||
override fun onResult(hypothesis: String) {}
|
||||
|
||||
private fun triggerJarvis() {
|
||||
isInteracting = true
|
||||
pauseListening()
|
||||
|
||||
Reference in New Issue
Block a user