Android telefonlarda sinir bozucu iletişim kutusu olmadan konuşma tanımayı nasıl kullanabilirim


124

Bu, android API'lerini değiştirmeden mümkün müdür? Bununla ilgili bir makale buldum. Android API'lerinde değişiklik yapmam gerektiğine dair bir yorum var. Ancak modifikasyonun nasıl yapılacağını söylemedi. Bunun nasıl yapılacağına dair bana öneride bulunan var mı? Teşekkürler!


Bu makaleyi buldum; SpeechRecognizer Onun ihtiyaçları neredeyse benimkiyle aynı. Benim için iyi bir referans!


Bu sorunu tamamen çözdüm. Bu Çin web sitesinden
kullanılabilir bir örnek kod inceledim. İşte kaynak kodum

package voice.recognition.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import android.util.Log;



public class voiceRecognitionTest extends Activity implements OnClickListener 
{

   private TextView mText;
   private SpeechRecognizer sr;
   private static final String TAG = "MyStt3Activity";
   @Override
   public void onCreate(Bundle savedInstanceState) 
   {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Button speakButton = (Button) findViewById(R.id.btn_speak);     
            mText = (TextView) findViewById(R.id.textView1);     
            speakButton.setOnClickListener(this);
            sr = SpeechRecognizer.createSpeechRecognizer(this);       
            sr.setRecognitionListener(new listener());        
   }

   class listener implements RecognitionListener          
   {
            public void onReadyForSpeech(Bundle params)
            {
                     Log.d(TAG, "onReadyForSpeech");
            }
            public void onBeginningOfSpeech()
            {
                     Log.d(TAG, "onBeginningOfSpeech");
            }
            public void onRmsChanged(float rmsdB)
            {
                     Log.d(TAG, "onRmsChanged");
            }
            public void onBufferReceived(byte[] buffer)
            {
                     Log.d(TAG, "onBufferReceived");
            }
            public void onEndOfSpeech()
            {
                     Log.d(TAG, "onEndofSpeech");
            }
            public void onError(int error)
            {
                     Log.d(TAG,  "error " +  error);
                     mText.setText("error " + error);
            }
            public void onResults(Bundle results)                   
            {
                     String str = new String();
                     Log.d(TAG, "onResults " + results);
                     ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
                     for (int i = 0; i < data.size(); i++)
                     {
                               Log.d(TAG, "result " + data.get(i));
                               str += data.get(i);
                     }
                     mText.setText("results: "+String.valueOf(data.size()));        
            }
            public void onPartialResults(Bundle partialResults)
            {
                     Log.d(TAG, "onPartialResults");
            }
            public void onEvent(int eventType, Bundle params)
            {
                     Log.d(TAG, "onEvent " + eventType);
            }
   }
   public void onClick(View v) {
            if (v.getId() == R.id.btn_speak) 
            {
                Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);        
                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
                intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test");

                intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5); 
                     sr.startListening(intent);
                     Log.i("111111","11111111");
            }
   }
}

Hata ayıkladıktan sonra can sıkıcı Günlükleri sildiğinizden emin olun!


1
Diğer uygulamaların yaptığını gördüğüm gibi yapmak kesinlikle mümkün (Voice infinity), ancak nasıl olduğuna gelince, hiçbir fikrim yok. Android kaynağını indirip sesin olduğu api'yi kontrol ederek başlayabileceğinizi ve ardından genişletmeyi deneyeceğinizi hayal ediyorum ...
Eric

1
<uses-permission android:name="android.permission.RECORD_AUDIO" />Femi'nin belirttiği gibi, AndroidManifest.xml dosyanızın olduğundan emin olun, aksi takdirde SpeechRecognizer herhangi bir ses almayacaktır
nommer

Yanıtlar:


72

SpeechRecognizer arayüzünü kullanın . Uygulamanızın RECORD_AUDIO iznine sahip olması gerekir ve ardından bir SpeechRecognizer oluşturabilir, ona bir RecognitionListener verebilir ve ardından startListeningyöntemini çağırabilirsiniz . Konuşma tanıyıcı konuşmayı dinlemeye hazır olduğunda ve konuşmayı alıp onu metne dönüştürürken dinleyiciye geri aramalar alacaksınız.


Tavsiyen için teşekkürler. Şimdi deneyeceğim
Jim31837

10
Ayrıca, burada belirtildiği gibi SpeechRecognier'ı OnDestroy () yönteminde yok etmeyi unutmayın: stackoverflow.com/a/19931355/2048266has leaked ServiceConnection android.speech.SpeechRecognizer$Connection@414f0e40 that was originally bound here hata almamak için
nommer

Lütfen bana bir örnek gösterir misin? Ayrıca, ekran kapalıyken bunu kullanabilir miyim?
Ruchir Baronia

7

GAST , SpeechRecognizersınıfı çok az yeni kodla kullanmak için kullanabileceğiniz kullanışlı bir soyut sınıfa sahiptir . Çalışan bir örnektir da vardır SpeechRecognizerkullanarak bir arka plan servisi olarak bu ve bu


Bunları MainActivity'de nasıl uygulayacağım konusunda bana rehberlik edebilir misiniz? Bu ne anlama geliyor "* Başlatmak ve durdurmak için {@link Amaç} 'ı kullanın?" Çok teşekkürler
Dante

Lütfen bana bir örnek gösterir misin? Ayrıca, ekran kapalıyken bunu kullanabilir miyim?
Ruchir Baronia

6

Bunu gönderdiğiniz için teşekkürler! Oncreate'de onclick dinleyiciyi tanımlamayı yararlı buldum:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mText = (TextView) findViewById(R.id.textView1);     
    MyRecognitionListener listener = new MyRecognitionListener();
    sr = SpeechRecognizer.createSpeechRecognizer(this);       
    sr.setRecognitionListener(listener);

    findViewById(R.id.button1).setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) 
        {
                Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);    
                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
                intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,1); 
                intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test");
                sr.startListening(intent);
        }
    });     
}

4

Sinir bozucu diyalog olmadan Metni konuşmaya ve konuşmayı metne dönüştürmek için Github projesi yapıyorum,

https://github.com/hiteshsahu/Android-TTS-STT/tree/master/app/src/main/java/com/hiteshsahu/stt_tts/translation_engine

 //SPEECH TO TEXT DEMO
    speechToText.setOnClickListener({ view ->

        Snackbar.make(view, "Speak now, App is listening", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show()

        TranslatorFactory
                .instance
                .with(TranslatorFactory.TRANSLATORS.SPEECH_TO_TEXT,
                        object : ConversionCallback {
                            override fun onSuccess(result: String) {
                                sttOutput.text = result
                            }

                            override fun onCompletion() {
                            }

                            override fun onErrorOccurred(errorMessage: String) {
                                erroConsole.text = "Speech2Text Error: $errorMessage"
                            }

                        }).initialize("Speak Now !!", this@HomeActivity)

    })


    //TEXT TO SPEECH DEMO
    textToSpeech.setOnClickListener({ view ->

        val stringToSpeak :String = ttsInput.text.toString()

        if (null!=stringToSpeak &&  stringToSpeak.isNotEmpty()) {

            TranslatorFactory
                    .instance
                    .with(TranslatorFactory.TRANSLATORS.TEXT_TO_SPEECH,
                            object : ConversionCallback {
                                override fun onSuccess(result: String) {
                                }

                                override fun onCompletion() {
                                }

                                override fun onErrorOccurred(errorMessage: String) {
                                    erroConsole.text = "Text2Speech Error: $errorMessage"
                                }

                            })
                    .initialize(stringToSpeak, this)

        } else {
            ttsInput.setText("Invalid input")
            Snackbar.make(view, "Please enter some text to speak", Snackbar.LENGTH_LONG).show()
        }

    })

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.