অ্যান্ড্রয়েড ফোনে বিরক্তিকর ডায়ালগ ছাড়াই আমি কীভাবে স্পিচ সনাক্তকরণটি ব্যবহার করতে পারি


124

অ্যান্ড্রয়েড API গুলি সংশোধন না করেই কি এটি সম্ভব? আমি এই সম্পর্কে একটি নিবন্ধ পেয়েছি। এখানে একটি মন্তব্য আছে যে আমার অ্যান্ড্রয়েড এপিআইগুলিতে পরিবর্তন করা উচিত। তবে এটি কীভাবে পরিবর্তন করতে হবে তা বলেনি। এটি কীভাবে করা যায় সে সম্পর্কে কেউ আমাকে কিছু পরামর্শ দিতে পারেন? ধন্যবাদ!


আমি এই নিবন্ধটি খুঁজে পেয়েছি; স্পিচরোকনাইজার তাঁর চাহিদা প্রায় আমার মতো। এটা আমার জন্য একটি ভাল রেফারেন্স!


আমি পুরোপুরি এই সমস্যার সমাধান পেয়েছি।
আমি এই চীন ওয়েবসাইটটি থেকে ব্যবহারযোগ্য নমুনা কোডটি এখানে আমার উত্স কোডটি দিয়েছি

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
<uses-permission android:name="android.permission.RECORD_AUDIO" />ফেমির দ্বারা উল্লিখিত হিসাবে, আপনার অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলটিতে রয়েছে তা নিশ্চিত করুন অন্যথায় স্পিচরোকনাইজার কোনও অডিও বাছাই করবে না
মনোনীত

উত্তর:


72

স্পিচরেকনাইজার ইন্টারফেস ব্যবহার করুন । আপনার অ্যাপ্লিকেশনটির কাছে RECORD_AUDIO অনুমতি থাকা দরকার এবং আপনি তারপরে একটি স্পিচরেকগনাইজার তৈরি করতে পারেন, এটি একটি স্বীকৃতিলিস্টনার দিতে পারেন এবং তারপরে এর startListeningপদ্ধতিটি কল করতে পারেন । বক্তৃতা শনাক্তকারী যখন বক্তৃতা শোনার জন্য প্রস্তুত হয় এবং বক্তৃতাটি গ্রহণ করে এটি পাঠ্যে রূপান্তরিত হয় আপনি শ্রোতার কাছে কলব্যাক পাবেন।


আপনার উপদেশের জন্য ধন্যবাদ. আমি এখনই চেষ্টা করব
Jim31837

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ব্যবহার করে একটি পটভূমি পরিসেবা হিসাবে এই এবং এই


কীভাবে এগুলিকে মেইনএ্যাকটিভিটিতে বাস্তবায়ন করতে হয় সে সম্পর্কে আপনি আমাকে গাইড করতে আপত্তি করবেন? এর অর্থ কী "" এটি শুরু করতে এবং থামাতে ইন্টেন্ট l @ লিঙ্ক ইন্টেন্ট Use গুলি ব্যবহার করবেন? " অনেক অনেক ধন্যবাদ
দান্তে

আপনি কি আমাকে একটি উদাহরণ দেখাতে পারেন? এছাড়াও, স্ক্রিনটি বন্ধ থাকাকালীন আমি কি এটি ব্যবহার করতে পারি?
রুচির বড়োনিয়া

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

    })

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.