app/src/main/java/com/example/jarvis_stts/JarviceService.kt aktualisiert

This commit is contained in:
2026-03-12 16:35:57 +00:00
parent ad46c99993
commit 0c9766f7cc

View File

@@ -122,49 +122,41 @@ class JarvisService : Service(), RecognitionListener {
private fun resumeListening() { private fun resumeListening() {
if (voskModel == null) return if (voskModel == null) return
Log.d("JARVIS", "Service: Starte Zuhören (Volles Wörterbuch)")
voskService?.stop() voskService?.stop()
// Wir fügen häufige deutsche Wörter und phonetische Ähnlichkeiten hinzu // GANZ WICHTIG: Keine Grammar (Wortliste) mehr übergeben!
// Diese dienen als "Blitzableiter" für Fehlalarm // Wir nutzen das volle deutsche Vokabular, um Fehlinterpretationen zu vermeiden.
val grammar = "[" + val rec = Recognizer(voskModel, 16000.0f)
"\"jarvis\", " + // Wake-Words
"\"ja\", \"nein\", \"und\", \"der\", \"die\", \"das\", " + // Füllwörter
"\"service\", \"imbiss\", \"harnisch\", \"garvis\", \"fertig\", " + // Phonetische Fallen
"\"[unk]\"" +
"]"
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 = SpeechService(rec, 16000.0f)
voskService?.startListening(this) voskService?.startListening(this)
isInteracting = false 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) {
override fun onPartialResult(hypothesis: String) {}
// Wir nutzen nur noch onResult für den echten Check
override fun onResult(hypothesis: String) {
if (isInteracting) return if (isInteracting) return
try { try {
val json = JSONObject(hypothesis) 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 // Regex \b bedeutet "Wortgrenze". Er sucht nach dem eigenständigen Wort.
if (recognizedText == "jarvis") { // Verhindert Reaktionen auf Fantasiewörter, in denen die Silben vorkommen.
Log.d("JARVIS", "Sicheres Wake-Word erkannt: $recognizedText") if (Regex("\\b(jarvis)\\b").containsMatchIn(partialText)) {
Log.d("JARVIS", "WAKE WORD IM TEXT ERKANNT: $partialText")
triggerJarvis() triggerJarvis()
} }
} catch (e: Exception) { } 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() { private fun triggerJarvis() {
isInteracting = true isInteracting = true
pauseListening() pauseListening()