एंड्रॉइड फोन में कष्टप्रद संवाद के बिना मैं भाषण पहचान का उपयोग कैसे कर सकता हूं


124

क्या यह एंड्रॉइड एपीआई को संशोधित किए बिना संभव है? मुझे इस बारे में एक लेख मिला है। एक टिप्पणी है कि मुझे एंड्रॉइड एपीआई में संशोधन करना चाहिए। लेकिन यह नहीं कहा कि संशोधन कैसे करना है। किसी ने मुझे कैसे करना है पर कुछ सुझाव दे सकते हैं? धन्यवाद!


मुझे यह लेख मिला है; SpeechRecognizer उसकी जरूरतें लगभग मेरी जैसी ही हैं। यह मेरे लिए एक अच्छा संदर्भ है!


मैंने पूरी तरह से इस समस्या को हल कर लिया है।
मैंने इस चाइना वेबसाइट से एक यूजेबल सैंपल कोड देखा , यहाँ मेरा सोर्स कोड है

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");
            }
   }
}

डिबगिंग के बाद कष्टप्रद लॉग को हटाना सुनिश्चित करें!


1
ऐसा करना निश्चित रूप से संभव है, जैसा कि मैंने देखा है कि अन्य ऐप इसे (वॉयस इनफिनिटी) करते हैं, लेकिन कैसे, इसके लिए मेरे पास कोई सुराग नहीं है। मुझे लगता है कि आप एंड्रॉइड स्रोत को डाउनलोड करके शुरू कर सकते हैं और एपी में जांच कर सकते हैं कि आवाज कहां है, और फिर प्रयोग करें ...
एरिक

1
के रूप में Femi से बताया गया है, के लिए सुनिश्चित करें कि <uses-permission android:name="android.permission.RECORD_AUDIO" />अपनी AndroidManifest.xml फ़ाइल अन्यथा SpeechRecognizer किसी भी ऑडियो लेने नहीं होंगे में
nommer

जवाबों:


72

SpeechRecognizer इंटरफ़ेस का उपयोग करें । आपके ऐप के पास RECORD_AUDIO की अनुमति होनी चाहिए, और फिर आप एक SpeechRecognizer बना सकते हैं, इसे एक मान्यता प्राप्तकर्ता दे सकते हैं और फिर इसकी startListeningविधि को कॉल कर सकते हैं । आप श्रोता को कॉलबैक प्राप्त करेंगे जब भाषण पहचानकर्ता भाषण के लिए सुनना शुरू करने के लिए तैयार है और जैसे ही वह भाषण प्राप्त करता है और उसे पाठ में परिवर्तित करता है।


आपके सुझाव के लिए धन्यवाद। अब मैं कोशिश करूँगा
जिम ३37३

10
भी OnDestroy () विधि में SpeechRecognier नष्ट करने के लिए मत भूलना के रूप में यहाँ का उल्लेख किया: stackoverflow.com/a/19931355/2048266 नहीं कर has leaked ServiceConnection android.speech.SpeechRecognizer$Connection@414f0e40 that was originally bound hereत्रुटि
nommer

क्या आप मुझे एक उदाहरण दिखा सकते हैं? स्क्रीन बंद होने के दौरान क्या मैं इसका उपयोग कर सकता हूं?
रुचिर बरोनिया

7

GAST में एक आसान अमूर्त वर्ग है जिसका उपयोग आप SpeechRecognizerबहुत कम नए कोड के साथ कक्षा का उपयोग करने के लिए कर सकते हैं । इस और इसSpeechRecognizer का उपयोग करके पृष्ठभूमि सेवा के रूप में चलाने का एक उदाहरण भी है


क्या आप मुझे इस बात का मार्गदर्शन करेंगे कि मैं उन्हें मुख्यता में कैसे लागू करूं? इसे शुरू करने और इसे रोकने के लिए "* {@link Intent} का उपयोग करने का क्या मतलब है?" बहुत बहुत धन्यवाद
Dante

क्या आप मुझे एक उदाहरण दिखा सकते हैं? स्क्रीन बंद होने के दौरान क्या मैं इसका उपयोग कर सकता हूं?
रुचिर बरोनिया

6

इसे पोस्ट करने के लिए धन्यवाद! मैंने ऑनक्रीट में ऑन्कलिक श्रोता को परिभाषित करने में मददगार पाया:

@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

मैं अंत में कष्टप्रद संवाद के बिना पाठ को भाषण और भाषण को पाठ में परिवर्तित करने के लिए गितुब परियोजना बना रहा हूं,

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()
        }

    })

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.