2010-02-23 5 views
29

Ich habe die Spracherkennung auf Android verwendet und ich liebe es. Es ist eines der am meisten gelobten Features meiner Kunden. Das Format ist jedoch etwas restriktiv. Sie müssen die Erkennung aufrufen, die Aufnahme zur Transkription an Google senden und auf den Text warten.Spracherkennung auf Android mit aufgenommenem Soundclip?

Einige meiner Ideen würden erfordern, das Audio innerhalb meiner APP aufzuzeichnen und dann den Clip zur Transkription an Google zu senden.

Gibt es eine Möglichkeit, einen Audioclip zu senden, der mit Sprache zu Text verarbeitet wird?

+0

Wissen Sie, ob dies seither in der API enthalten ist? Falls nicht, haben Sie eine Problemumgehung gefunden, um Ihre eigene Aufzeichnung an Google zu senden? – ahsteele

+0

Ich frage mich das Gleiche. Ich kann nicht glauben, dass Android dieses hohe Niveau ist, da es ernstlich einen Mangel an API gibt, wenn es um Medien geht. – Tom

+0

Android nicht zur Verfügung gestellt Eine Bibliothek, um dies zu tun. – sravan

Antwort

3

Leider nicht zu dieser Zeit. Die einzige Schnittstelle, die derzeit von Androids Spracherkennungsdienst unterstützt wird, ist die RecognizerIntent, die es Ihnen nicht erlaubt, Ihre eigenen Audiodaten bereitzustellen.

Wenn dies etwas ist, das Sie sehen möchten, reichen Sie eine Feature-Anforderung unter http://b.android.com ein. Dies steht auch tangential im Zusammenhang mit bestehenden issue 4541.

+2

Bietet Google eine Möglichkeit, die Genauigkeit des Erkenners oder der Sprachmodelle zu bewerten? Wir evaluieren typischerweise die Erkennungsgenauigkeit, indem wir vorbespielte Proben mit bekannten Transkriptionen ablaufen lassen. Gibt es eine Möglichkeit, den Google-Erkenner zu testen, um festzustellen, ob er für meine Anwendung geeignet ist? Ich möchte auch die zwei Sprachmodelle gegen meine vorbespielten Samples testen, um festzustellen, welches die bessere Genauigkeit bietet. Kann ich das irgendwie machen? –

+0

Nicht öffentlich, nein. –

+1

Gibt es keine Möglichkeit, dass ein bestimmter Ton vom Mikrofon zurückgeschleift wird? So etwas wie eine Socket/Datei/Stream-Umleitung? – Snicolas

1

Soweit ich weiß, gibt es immer noch keine Möglichkeit, einen Audioclip direkt an Google zur Transkription zu senden. Froyo (API Level 8) führte jedoch die Klasse SpeechRecognizer ein, die direkten Zugang zum Spracherkennungsdienst bietet. So können Sie z. B. die Wiedergabe eines Audioclips starten und Ihre Aktivität den Spracherkenner im Hintergrund starten lassen, wodurch die Ergebnisse nach Abschluss einer benutzerdefinierten Listener-Rückrufmethode zurückgegeben werden.

Der folgende Beispielcode sollte innerhalb einer Aktivität definiert werden, da die Methoden von SpeechRecognizer im Hauptanwendungsthread ausgeführt werden müssen. Außerdem müssen Sie die Berechtigung RECORD_AUDIO zu Ihrer AndroidManifest.xml hinzufügen.

 


    boolean available = SpeechRecognizer.isRecognitionAvailable(this); 
    if (available) { 
     SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(this); 
     sr.setRecognitionListener(new RecognitionListener() { 
      @Override 
      public void onResults(Bundle results) { 
       // process results here 
      } 
      // define your other overloaded listener methods here 
     }); 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     // the following appears to be a requirement, but can be a "dummy" value 
     intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.dummy"); 
     // define any other intent extras you want 

     // start playback of audio clip here 

     // this will start the speech recognizer service in the background 
     // without starting a separate activity 
     sr.startListening(intent); 
    } 
 

Sie können auch Ihre eigenen Spracherkennungsdienst definieren RecognitionService durch die Erweiterung, aber das sprengt den Rahmen dieser Antwort ist :)

+0

Hat jemand das versucht und Erfolg gehabt? Müssten Sie die gesamte Wiedergabezeit für eine lange Audiodatei warten, bis die Sprache erkannt wird? – rmooney

+0

Obwohl dies vor einer Weile gepostet wurde, habe ich bestätigt (mit viel mehr Code), dass diese Idee funktioniert (auf Android N). Warten Sie nach dem Aufruf von 'startListening()' auf den 'RecognitionListener.onReadyForSpeech()' Callback und spielen Sie den Audioclip (laut!). – adelphus

+0

@adelphus können Sie Quellcode hochladen? – Hamza

10

ich eine Lösung erhielt, die gut funktioniert Sprache zu haben, zu erkennen und Audio-Aufnahme . Hier ist das link zu einem einfachen Android-Projekt, das ich erstellt habe, um zu zeigen, dass die Lösung funktioniert. Außerdem habe ich einige Druckbildschirme in das Projekt eingefügt, um die App zu veranschaulichen.

Ich werde versuchen, kurz den Ansatz zu erklären, den ich verwendet habe. Ich habe zwei Funktionen in diesem Projekt kombiniert: Google Speech API und Flac-Aufnahme.

Die Google Speech-API wird über HTTP-Verbindungen aufgerufen. Mike Pultz gibt weitere Details über die API:

"(...) die neue [Google] API ist eine Vollduplex-Streaming-API. Das bedeutet, dass es tatsächlich zwei HTTP-Verbindungen verwendet - eine POST-Anfrage zum Hochladen der Inhalt als "live" Chunked-Stream und eine zweite GET-Anfrage, um auf die Ergebnisse zuzugreifen, was bei längeren Audio-Samples oder beim Streaming von Audio viel sinnvoller ist. "

Diese API muss jedoch eine FLAC-Audiodatei erhalten, damit sie ordnungsgemäß funktioniert. Das bringt uns zum zweiten Teil: Flac-Aufnahme

Ich habe die Flac-Aufnahme in diesem Projekt implementiert, indem ich einige Code-Teile und Bibliotheken aus einer Open-Source-App namens AudioBoo extrahiert und angepasst habe. AudioBoo verwendet nativen Code zum Aufnehmen und Abspielen von FLAC-Formaten.

So ist es möglich, einen Flac-Sound aufzunehmen, an Google Speech API zu senden, den Text zu erhalten und den soeben aufgenommenen Sound abzuspielen.

Das Projekt, das ich erstellt habe, hat die grundlegenden Prinzipien, damit es funktioniert und kann für bestimmte Situationen verbessert werden. Damit es in einem anderen Szenario funktioniert, ist es erforderlich, einen Google Speech-API-Schlüssel zu erhalten, der durch die Mitgliedschaft in der Google Chromium-dev-Gruppe erhalten wird. Ich habe einen Schlüssel in diesem Projekt gelassen, nur um zu zeigen, dass es funktioniert, aber ich werde es irgendwann entfernen. Wenn jemand mehr Informationen darüber benötigt, lass es mich wissen, weil ich nicht mehr als 2 Links in diesen Beitrag schreiben kann.

+0

@Isantsan Ich muss ähnliche Funktionalität implementieren, aber ich finde den zweiten Teil (Aufnahme in FLAC) wirklich schwierig können Sie mir helfen. Ich habe mir auch das AudioBoo-Projekt angesehen, wusste aber nicht, wo ich anfangen soll. –

+0

tatsächlich dort Änderung in API und der oben genannte Code stürzt ab, wenn ich versuchte zu testen, ist dies wirklich möglich, um Stimme zu haben, sowie zu Sprache in Android zu testen – KOTIOS

+0

Wenn die API geändert hat, könnte das Projekt einige Verbesserungen benötigen. Ich habe eine Weile nicht mit der API Schritt gehalten. Als diese Antwort gepostet wurde, funktionierte alles wie beschrieben. – lsantsan